File size: 3,828 Bytes
a786c9d
f0d2f19
ee8b38f
 
 
 
 
 
d16d3b3
0fed4fb
8cff3c1
a786c9d
0fed4fb
a786c9d
 
f0d2f19
 
 
 
da4f263
f0d2f19
 
 
da4f263
 
 
 
 
 
f0d2f19
 
a786c9d
f0d2f19
3dd38da
a786c9d
0fed4fb
a786c9d
 
0fed4fb
a786c9d
f20afcb
a786c9d
 
 
0fed4fb
a786c9d
 
0fed4fb
a786c9d
 
0fed4fb
f20afcb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
182b574
a786c9d
 
 
 
0fed4fb
a786c9d
 
0fed4fb
da4f263
0fed4fb
 
da4f263
a786c9d
0fed4fb
a786c9d
da4f263
a786c9d
 
da4f263
a786c9d
 
da4f263
 
 
0fed4fb
8837a99
a786c9d
3f51add
a786c9d
 
 
0fed4fb
7c89955
f20afcb
 
 
7c89955
f20afcb
0cc375c
7df1bda
4c6d55a
 
1f23827
 
 
983182b
dfd696d
 
0fed4fb
dfd696d
3dd38da
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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
import pandas as pd
from langchain_groq import ChatGroq
from langchain_huggingface import HuggingFaceEmbeddings
from langchain_chroma import Chroma
from langchain_core.prompts import PromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_core.runnables import RunnablePassthrough
import gradio as gr

# Carga los datos de entrenamiento
df = pd.read_csv('./botreformasconstrucciones.csv')

# Crea un arreglo con los contextos
context_data = []
for i in range(len(df)):
  context = ""
  for j in range(3):
    context += df.columns[j]
    context += ": "
    context += df.iloc[i, j]  # Cambia esto
    context += " "
  context_data.append(context)

# Importa las bibliotecas necesarias
import os
from langchain_groq import ChatGroq
from langchain_huggingface import HuggingFaceEmbeddings
from langchain_chroma import Chroma

# Obtiene la clave de API de Groq
groq_key = os.environ.get('groq_api_keys')

# Crea un objeto ChatGroq con el modelo de lenguaje
llm = ChatGroq(model="llama-3.3-70b-versatile", api_key=groq_key)

# Crea un objeto HuggingFaceEmbeddings con el modelo de embeddings
embed_model = HuggingFaceEmbeddings(model_name="mixedbread-ai/mxbai-embed-large-v1")

# Crea un objeto Chroma con el nombre de la colección
vectorstore = Chroma(
    collection_name="unipapel_papeleria",
    embedding_function=embed_model,
)

# Agrega los textos a la colección
vectorstore.add_texts(context_data)

# Crea un objeto retriever con la colección
retriever = vectorstore.as_retriever()

# Crea un objeto PromptTemplate con el prompt
template = ("""Eres un asistente experto de unipapel.es, especializado en temas relacionados con la papelería. Tu función es ofrecer orientación a los clientes que realicen preguntas. Si no encuentras una respuesta, invítalos a contactar con nosotros. Puedes proporcionar información sobre nuestras categorías de productos según lo que te soliciten. La URL de la tienda es www.unipapel.es. A continuación, algunas de nuestras categorías:

Accesorios para pizarras

Acuarelas y lápices acuarelables

Archivadores de palanca

Blocs de dibujo

Bolígrafos

Carpetas clasificadoras

Cuadernos de caligrafía

Papelería escolar

Pegamentos y adhesivos

Pizarras blancas

    Context: {context}
    Question: {question}
    Answer:""")

# Crea un objeto rag_prompt con el prompt
rag_prompt = PromptTemplate.from_template(template)

# Crea un objeto StrOutputParser para parsear la salida
from langchain_core.output_parsers import StrOutputParser

# Crea un objeto RunnablePassthrough para ejecutar el modelo
from langchain_core.runnables import RunnablePassthrough

# Crea un objeto rag_chain con el modelo y el prompt
rag_chain = (
    {"context": retriever, "question": RunnablePassthrough()}
    | rag_prompt
    | llm
    | StrOutputParser()
)

# Importa la biblioteca Gradio
import gradio as gr

# Crea una función para procesar la entrada del usuario
def rag_memory_stream(message, history):
    partial_text = ""
    for new_text in rag_chain.stream(message):
        partial_text += new_text
        yield partial_text

# Crea un objeto Gradio con la función y el título
examples = [
    "¿Qué tipo de bolígrafos son ideales para tomar apuntes en clase?",
    "¿Cuáles son los mejores tipos de papel para imprimir documentos profesionales?",
    "¿Qué materiales de oficina son esenciales para un espacio de trabajo productivo?"
]
description = "Chatbot con Unipapel"

demo = gr.ChatInterface(fn=rag_memory_stream,
                        type="messages",
                        title=title,
                        description=description,
                        fill_height=True,
                        examples=examples,
                        theme="glass",
)

# Lanza la aplicación
if __name__ == "__main__":
    demo.launch()