jimytech commited on
Commit
7416c28
·
verified ·
1 Parent(s): 5dfc96f

Update rag_api.py

Browse files
Files changed (1) hide show
  1. rag_api.py +19 -23
rag_api.py CHANGED
@@ -21,8 +21,8 @@ os.makedirs(TEMP_CACHE_DIR, exist_ok=True)
21
  # --------------------------------------------------------
22
  # 1. CONFIGURACIÓN
23
  # --------------------------------------------------------
24
- URL_FAISS = "https://drive.google.com/uc?export=download&id=1XqImFIKiuRDhSDK6Rm6dAZbHm03NdzQa"
25
- URL_PKL = "https://drive.google.com/uc?export=download&id=156BWHHGi-JuD9EM2Nek1mNcyitivQWAH"
26
  DOWNLOAD_DIR = "/tmp/db_faiss"
27
  DB_FAISS_PATH = DOWNLOAD_DIR
28
 
@@ -30,17 +30,15 @@ DB_FAISS_PATH = DOWNLOAD_DIR
30
  # 2. CLASIFICADOR DE INTENCIÓN ← NUEVO
31
  # --------------------------------------------------------
32
  INTENT_PROMPT = PromptTemplate(
33
- template="""Eres un clasificador de intenciones para un asistente de nutrición llamado NutriActive.
34
  Analiza el mensaje del usuario y clasifícalo en UNA de estas categorías:
35
  - SALUDO: saludos, despedidas, conversación casual ("hola", "gracias", "adiós", "¿cómo estás?")
36
- - NUTRICION: preguntas sobre nutrición, dieta, salud, alimentos, calorías, macros, IMC,
37
- planes alimenticios, recetas, suplementos, hábitos saludables, Y TAMBIÉN cualquier
38
- pregunta relacionada con NutriActive como empresa: sus cursos, servicios, productos,
39
- planes, precios, programas, etc.
40
- - OTRO: preguntas claramente NO relacionadas con nutrición, salud ni NutriActive
41
- (matemáticas, historia, tecnología general, etc.)
42
- IMPORTANTE: Ante la duda, clasifica como NUTRICION. Solo usa OTRO cuando estés
43
- completamente seguro de que no tiene relación con nutrición ni con NutriActive.
44
  Responde SOLO con la categoría, sin explicación.
45
  Mensaje: {query}
46
  Categoría:""",
@@ -48,19 +46,17 @@ Categoría:""",
48
  )
49
 
50
  SALUDO_PROMPT = PromptTemplate(
51
- template="""Eres NutriActive, un asistente amigable especializado en nutrición y salud.
52
- Responde de forma natural y cálida al siguiente mensaje casual del usuario.
53
- Si el usuario se despide o agradece, invítalo a preguntar sobre nutrición.
54
  Mensaje: {query}
55
  Respuesta:""",
56
  input_variables=["query"]
57
  )
58
 
59
  RAG_PROMPT = PromptTemplate(
60
- template="""Eres NutriActive, un asistente experto en nutrición y salud.
61
- Tu tarea es responder basándote en el contexto proporcionado.
62
- Si el contexto no tiene suficiente información, usa tu conocimiento general sobre nutrición para dar una respuesta útil.
63
- Sé amigable, claro y conciso.
64
  Contexto de la base de datos: {context}
65
  Pregunta del usuario: {question}
66
  Respuesta:""",
@@ -131,7 +127,7 @@ def load_and_configure_rag():
131
  # --------------------------------------------------------
132
  # 4. FASTAPI
133
  # --------------------------------------------------------
134
- app = FastAPI(title="NutriActive RAG API")
135
 
136
  intent_chain = saludo_chain = qa_chain = retriever = None
137
 
@@ -144,7 +140,7 @@ except RuntimeError:
144
  def home():
145
  if qa_chain is None:
146
  return {"error": "RAG no inicializado. Revisa los logs."}
147
- return {"message": "API NutriActive operativa. Usa /query."}
148
 
149
  @app.post("/query")
150
  async def process_query(request: QueryRequest):
@@ -170,20 +166,20 @@ async def process_query(request: QueryRequest):
170
  elif "OTRO" in intent:
171
  return {
172
  "query": request.query,
173
- "response": "Soy NutriActive, especializado en nutrición y salud. ¿Tienes alguna pregunta sobre alimentación, dietas o bienestar? 🥗",
174
  "intent": "OTRO",
175
  "sources": []
176
  }
177
 
178
  else:
179
- # NUTRICION o cualquier categoría no reconocida → RAG
180
  respuesta = qa_chain.invoke(request.query)
181
  docs = retriever.invoke(request.query)
182
  sources = [doc.metadata.get("source", "N/A") for doc in docs]
183
  return {
184
  "query": request.query,
185
  "response": respuesta.content,
186
- "intent": "NUTRICION",
187
  "sources": sources
188
  }
189
 
 
21
  # --------------------------------------------------------
22
  # 1. CONFIGURACIÓN
23
  # --------------------------------------------------------
24
+ URL_FAISS = "https://drive.google.com/file/d/1hiVycS4DQHO1MBdC-L_z1TXA6sJO_Y-r/view?usp=drive_link"
25
+ URL_PKL = "https://drive.google.com/file/d/1vbG8unx88Kb5jn7puGv1gqSM4S6rIUQC/view?usp=drive_link"
26
  DOWNLOAD_DIR = "/tmp/db_faiss"
27
  DB_FAISS_PATH = DOWNLOAD_DIR
28
 
 
30
  # 2. CLASIFICADOR DE INTENCIÓN ← NUEVO
31
  # --------------------------------------------------------
32
  INTENT_PROMPT = PromptTemplate(
33
+ template="""Eres un clasificador de intenciones para un asistente del portal de la Universidad Poltécnica de Aragua.
34
  Analiza el mensaje del usuario y clasifícalo en UNA de estas categorías:
35
  - SALUDO: saludos, despedidas, conversación casual ("hola", "gracias", "adiós", "¿cómo estás?")
36
+ - UNIVERSIDAD: preguntas sobre carreras o programas, investigación, cursos, admisiones, notas, proyectos, postgrado,
37
+ PNF, PNFA, diplomados, servivios, Y TAMBIÉN cualquier pregunta relacionada con La Universidad relacionado con: sus autoridades, reglamentos,
38
+ servivios estudiantiles, precios de cursos, programas, etc.
39
+ - OTRO: preguntas claramente NO relacionadas con la Universidad tales como: matemáticas, historia, tecnología general, etc.
40
+ IMPORTANTE: Ante la duda, clasifica como Universidad Politécnica de Aragua o UPT ARagua. Solo usa OTRO cuando estés
41
+ completamente seguro de que no tiene relación con la Universidad.
 
 
42
  Responde SOLO con la categoría, sin explicación.
43
  Mensaje: {query}
44
  Categoría:""",
 
46
  )
47
 
48
  SALUDO_PROMPT = PromptTemplate(
49
+ template="""Eres UPTA bot, un Asistente Virtual de la UPT Aragua. Estas aquí para ayudar con información sobre admisiones, programas académicos,
50
+ servicios, becas y mucho más. Si el usuario se despide o agradece, invítalo a preguntar sobre la universidad.
 
51
  Mensaje: {query}
52
  Respuesta:""",
53
  input_variables=["query"]
54
  )
55
 
56
  RAG_PROMPT = PromptTemplate(
57
+ template="""Eres UPTA bot, un Asistente Virtual experto de la UPT Aragua. Estas aquí para ayudar con información sobre
58
+ admisiones, programas académicos, servicios, becas y mucho más. Tu tarea es responder basándote en el contexto proporcionado. Si el contexto
59
+ no tiene suficiente información, usa tu conocimiento general sobre el sistema universitario para dar una respuesta útil. Sé amigable, claro y conciso.
 
60
  Contexto de la base de datos: {context}
61
  Pregunta del usuario: {question}
62
  Respuesta:""",
 
127
  # --------------------------------------------------------
128
  # 4. FASTAPI
129
  # --------------------------------------------------------
130
+ app = FastAPI(title="UPT Aragua bot RAG API")
131
 
132
  intent_chain = saludo_chain = qa_chain = retriever = None
133
 
 
140
  def home():
141
  if qa_chain is None:
142
  return {"error": "RAG no inicializado. Revisa los logs."}
143
+ return {"message": "API UPT Aragua bot operativa. Usa /query."}
144
 
145
  @app.post("/query")
146
  async def process_query(request: QueryRequest):
 
166
  elif "OTRO" in intent:
167
  return {
168
  "query": request.query,
169
+ "response": "Soy UPTA bot, estoy especializado en la UPT Aragua. ¿Tienes alguna pregunta sobre programas, carreras, inscripciones, fechas...? 🥗",
170
  "intent": "OTRO",
171
  "sources": []
172
  }
173
 
174
  else:
175
+ # UNIVERSIDAD o cualquier categoría no reconocida → RAG
176
  respuesta = qa_chain.invoke(request.query)
177
  docs = retriever.invoke(request.query)
178
  sources = [doc.metadata.get("source", "N/A") for doc in docs]
179
  return {
180
  "query": request.query,
181
  "response": respuesta.content,
182
+ "intent": "UNIVERSIDAD",
183
  "sources": sources
184
  }
185