morenomp commited on
Commit
0a227d1
·
0 Parent(s):

HF - PARTE 0

Browse files
Files changed (6) hide show
  1. app.py +29 -0
  2. documents.json +7 -0
  3. rag_engine.py +53 -0
  4. requirements.txt +14 -0
  5. test/test-api-space.py +13 -0
  6. test/test_api.py +0 -0
app.py ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # ENUNCIADO
2
+ # app.py
3
+ #
4
+ # Este archivo construirá la interfaz web con Gradio.
5
+ # Función principal ask:
6
+ # Se debe definir una función ask(query, top_k, umbral) que:
7
+ # • Reciba:
8
+ # o query (str): la pregunta del usuario.
9
+ # o top_k (int): número de documentos a recuperar.
10
+ # o umbral (float): umbral de similitud.
11
+ # • Utilice las funciones del módulo rag_engine para obtener los documentos
12
+ # relevantes y la respuesta generada.
13
+ # • Formatee los documentos recuperados para mostrarlos de forma legible (por
14
+ # ejemplo, uniendo los textos con separadores como \n\n---\n\n).
15
+ # • Retorne (respuesta, docs_formateados).
16
+ #
17
+ # Interfaz Gradio
18
+ # • Utilizar gr.Blocks con un título y descripción.
19
+ # • Tiene:
20
+ # o Un gr.Textbox para la pregunta (con placeholder).
21
+ # o Un gr.Slider para top_k (valores de 1 a 5, valor por defecto 5, paso 1).
22
+ # o Un gr.Slider para umbral (valores de 0.0 a 1.0, valor por defecto 0.55,
23
+ # paso 0.05).
24
+ # o Un gr.Textbox para mostrar la respuesta (de 3 líneas).
25
+ # o Un gr.Textbox para mostrar los documentos recuperados (de 6 líneas,
26
+ # máximo 15).
27
+ # o Un botón Enviar que al hacer clic ejecute la función ask con los valores
28
+ # de entrada y actualice las salidas.
29
+ # • Por último, lanzar la interfaz con .launch().
documents.json ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ {
2
+ "doc1": "Hospital contact details: You can contact the hospital at email testing@gmail.com, phone +911234567890, or visit us at xyz, abc, 1234, Nepal.",
3
+ "doc2": "Hospital's working hours: The hospital's working hours are 7:00 AM - 8:00 PM daily.",
4
+ "doc3": "Official email address: The official email address to contact the hospital is testing@gmail.com.",
5
+ "doc4": "Main services: We provide comprehensive healthcare services including emergency care, diagnostic testing, surgical procedures, maternity services, and specialized treatments.",
6
+ "doc5": "Hospital location: The hospital is located at xyz, abc, 1234, Nepal."
7
+ }
rag_engine.py ADDED
@@ -0,0 +1,53 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # ENUNCIADO
2
+ # rag_engine.py
3
+ #
4
+ # Este archivo contendrá toda la lógica del motor RAG. Se deben
5
+ # implementar obligatoriamente las siguientes funciones (con los nombres y parámetros
6
+ # exactos que se indican).
7
+ # Al inicio del script se deben cargar:
8
+ # • El modelo de embeddings: SentenceTransformer("MongoDB/mdbr-leaf-ir")
9
+ # • El modelo de lenguaje: PleIAs/Pleias-RAG350M (usando AutoTokenizer y AutoModelForCausalLM de transformers).
10
+ # • Los documentos desde documents.json.
11
+ # Función recuperar_documentos(consulta, top_k=2, umbral=0.4)
12
+ # Dada una consulta en inglés, recupera los documentos más relevantes de la base de conocimiento.
13
+ # • Parámetros:
14
+ # o consulta (str): pregunta del usuario.
15
+ # o top_k (int): número máximo de documentos a retornar.
16
+ # o umbral (float): valor mínimo de similitud (coseno) para considerar un
17
+ # documento relevante. Los documentos con similitud inferior a este
18
+ # umbral se descartan.
19
+ # • Proceso:
20
+ # 1. Calcular el embedding de la consulta y de todos los documentos
21
+ # (preferiblemente una sola vez al cargar el script y almacenarlos para
22
+ # evitar recalcular).
23
+ # 2. Calcular la similitud del coseno entre el embedding de la consulta y los
24
+ # embeddings de los documentos.
25
+ # 3. Ordenar los documentos de mayor a menor similitud.
26
+ # 4. Recorrer en ese orden y seleccionar aquellos cuya similitud sea mayor o
27
+ # igual al umbral, hasta un máximo de top_k documentos.
28
+ # • Retorno: Lista con los textos de los documentos seleccionados.
29
+ # Función generar_respuesta(consulta, documentos_recuperados)
30
+ # Genera una respuesta usando el modelo de lenguaje, inyectando los documentos
31
+ # recuperados como contexto.
32
+ # Parámetros:
33
+ # o consulta (str): pregunta original del usuario.
34
+ # o documentos_recuperados (list): lista de textos con los documentos
35
+ # relevantes.
36
+ # Proceso:
37
+ # 1. Se concatenan todos los documentos en un solo string (por ejemplo,
38
+ # separados por espacios).
39
+ # 2. Se construye un prompt con el siguiente formato:
40
+ # “””
41
+ # Answer the question based only on the context provided
42
+ # Context: <" ".join(documentos_recuperados)>
43
+ # Question: <consulta>
44
+ # Answer:
45
+ # “””
46
+ # 3. Se genera la respuesta con el modelo
47
+ # Retorno: Cadena con la respuesta generada.
48
+ # Función preguntar(consulta, top_k=2, umbral=0.4)
49
+ # • Descripción:
50
+ # o Función de alto nivel que une la lógica de recuperar_documentos y
51
+ # generar_respuestas
52
+ # • Parámetros: los mismos que recuperar_documentos.
53
+ # • Retorno: La respuesta generada (cadena).
requirements.txt ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # ENUNCIADO
2
+ # documents.json y requirements.txt (ya vienen dados)
3
+ #
4
+ # documents.json contendrá un conjunto de documentos en inglés que servirán como base
5
+ # de conocimiento para el chatbot.
6
+
7
+ torch
8
+ transformers
9
+ sentence-transformers
10
+ scikit-learn
11
+ fastapi
12
+ uvicorn
13
+ gradio
14
+ pydantic
test/test-api-space.py ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Una vez hemos hecho el deploy en Hugging Face, podemos probar la API de Gradio
2
+ # usando el cliente de Gradio (https://github.com/gradio-app/gradio-client)
3
+
4
+ from gradio_client import Client
5
+
6
+ client = Client("manuell01/practica-chat")
7
+ result = client.predict(
8
+ query="Where is the hospital located!!",
9
+ top_k=5,
10
+ umbral=0.55,
11
+ api_name="/ask"
12
+ )
13
+ print(result[0])
test/test_api.py ADDED
File without changes