File size: 4,227 Bytes
9f7d1a3
 
 
94b9a6c
3d0a266
9f7d1a3
 
 
3d0a266
9f7d1a3
 
3d0a266
 
9f7d1a3
 
 
 
 
3d0a266
9f7d1a3
 
3d0a266
9f7d1a3
3e2583e
3d0a266
9f7d1a3
4a3364a
3d0a266
3e2583e
9f7d1a3
 
 
 
 
 
a0e4da8
f5109f9
762955b
b041f50
e8312a0
3d0a266
 
9f7d1a3
 
 
 
 
 
 
9f461bd
36561d9
 
 
 
 
 
 
 
9f7d1a3
36561d9
9f7d1a3
 
 
 
528da1c
b581483
 
 
 
 
 
 
e8312a0
b581483
 
a0e4da8
 
b581483
cd2735f
9f7d1a3
 
 
 
 
 
 
 
 
 
 
 
af43bf8
9f7d1a3
 
 
 
 
 
 
 
cd2735f
9f7d1a3
3d0a266
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
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_v3", 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. Si te preguntan sobre el salario promedio, responde únicamente en base a este contexto y en caso la información no esté presente, no inventar.
Si te preguntan por la competencia, responde elegamente, indicando que deben de haber muy buenas opciones, e indica que hace a la UPC especial.
"""

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,'''
    
   Cuéntame sobre tus intereses y las áreas que te apasionan, y podrás preguntarme cosas como:
    
    1. ¿Qué carreras se conectan más con lo que me gusta?
    2. ¿Qué materias veré en esas carreras?
    3. ¿Cómo es un día típico en la carrera que me interesa?
    4. ¿Cuánto ganan los profesionales en esas áreas?
    5. ¿Qué hace un graduado en su día a día?

    Estoy aquí para guiarte y responder todas tus dudas. ¡Empecemos!
    '''
    ]])
    msg = gr.Textbox(placeholder = "Escribe aquí", label = '')
    submit = gr.Button("Submit")
    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()