Giter Club home page Giter Club logo

gradadmissions-buddy's Introduction

gradadmissions-buddy

Descripción del Proyecto

gradadmissions-buddy es un proyecto desarrollado para la materia "Ingeniería de Software 2" por Julia Recalde y Carlos Troya. El objetivo del proyecto es crear una aplicación que gestione y procese datos de admisiones universitarias utilizando FastAPI, Weaviate y OpenAI. La aplicación actúa como un sistema de Recuperación de Información con Generación Automática (RAG), que scrapea páginas web de universidades para luego dar contexto a un modelo de lenguaje (LLM) que se encarga de responder las preguntas.

Sección 1: Levantando el Proyecto con Docker

El proyecto se despliega utilizando Docker y Docker Compose. Para iniciar la aplicación, asegúrate de tener Docker y Docker Compose instalados en tu máquina.

Servicios Incluidos

  • backend_db: Este servicio ejecuta la aplicación FastAPI que gestiona los endpoints para procesar y almacenar datos.
  • weaviate: Una base de datos vectorial utilizada para almacenar y consultar datos procesados.
  • contextionary: Proporciona servicios de vectorización para Weaviate.
  • Univspider: Proporciona servicios de web-scraping mediante FastAPI.

Comandos para Levantar el Proyecto

Para levantar el proyecto, navega al directorio raíz del repositorio y ejecuta:

docker-compose up --build

Este comando construirá las imágenes Docker necesarias y levantará todos los servicios definidos en el archivo docker-compose.yaml.

services:
  backend_db:
    # Configuración del servicio de Backend_DB
  weaviate:
    # Configuración del servicio Weaviate
  contextionary:
    # Configuración del servicio Contextionary
  univspider:
    # Configuración del servicio univspider
networks:
  app-network:
    driver: bridge

Sección 2: Endpoints de la API

/buffer/insert-data/ (POST)

Inserta datos en el buffer para su posterior procesamiento.

Método Endpoint Descripción Ejemplo de Input Ejemplo de Output
POST /buffer/insert-data/ Inserta datos en el buffer [{"url": "http://..."}] {"message": "Buffer updated successfully"}

Ejemplo de uso:

curl -X POST http://localhost:69/buffer/insert-data/ -d '[{"url": "http://example.com"}]'

/split-Data/ (POST)

Procesa y divide en chunks a los datos que esten en el buffer.

Método Endpoint Descripción Ejemplo de Input Ejemplo de Output
POST /split-Data/ Procesa y divide los datos en chunks N/A {"message": "Data processed and split successfully"}"}

Ejemplo de uso:

curl -X POST http://localhost:69/split-Data/

/insert-Data/ (POST)

Inserta datos procesados en Weaviate.

Método Endpoint Descripción Ejemplo de Input Ejemplo de Output
POST /insert-Data/ Inserta datos procesados en Weaviate N/A {"message": "Data inserted into Weaviate successfully"}

Ejemplo de uso:

curl -X POST http://localhost:69/insert-Data/

/query/ (GET)

Consulta la base de datos vectorial en Weaviate para obtener información basada en un prompt.

Método Endpoint Descripción Ejemplo de Input Ejemplo de Output
GET /query/ Realiza una consulta en Weaviate utilizando un prompt dado /query/?prompt=Harvard&n_items=1 {"data": {"Get": {"UniversityData": [{"chunk_id": "123", "content": "example content", "url": "http://example.com"}]}}}

Ejemplo de uso:

curl -X GET "http://localhost:69/query/?prompt=Harvard&n_items=1"

Sección 3: Funcionamiento del Proyecto

Diagrama de Flujo

A continuación se muestra un diagrama de flujo creado con Excalidraw que ilustra los pasos del procesamiento de datos desde la entrada de un string hasta la respuesta de la API:

Diagrama de Flujo

Estructura de los Datos en la DB Vectorizada

Los datos se almacenan en Weaviate en una estructura vectorial. Cada entrada contiene los siguientes metadatos:

  • url: URL de la fuente de datos.
  • university_name: Nombre de la universidad.
  • content: Texto del contenido dividido en chunks.
  • chunk_id: ID único del chunk.
  • previous_id: ID del chunk anterior.
  • next_id: ID del siguiente chunk.

Cada chunk contiene un máximo de 100 caracteres.

Consulta al Crawler y Almacenamiento en la DB

El proceso para conseguir los datos y almacenarlos en la DB vectorizada incluye los siguientes pasos:

  1. Consulta al Crawler: El endpoint /get-data/ se diseña para solicitar datos al crawler y almacenarlos en data.json.
  2. Procesamiento de Datos: El endpoint /split-Data/ utiliza la clase DataSplitter para dividir los datos en chunks manejables.
  3. Inserción en Weaviate: El endpoint /insert-Data/ inserta los datos procesados en Weaviate.

Ejemplo de Uso

# Insertar datos en el buffer
curl -X POST http://localhost:69/buffer/insert-data/ -d '[{"url": "http://example.com"}]'

# Procesar y dividir datos
curl -X POST http://localhost:69/split-Data/

# Insertar datos procesados en Weaviate
curl -X POST http://localhost:69/insert-Data/

# Consultar datos en Weaviate
curl -X GET "http://localhost:69/query/?prompt=Harvard&n_items=1"

Este README.md proporciona una visión general completa del proyecto, incluyendo cómo levantarlo con Docker, los detalles de los endpoints de la API y el flujo de funcionamiento del sistema.

gradadmissions-buddy's People

Contributors

ctroya avatar juliarecalde avatar erwaen avatar

Stargazers

 avatar  avatar

Watchers

 avatar

Forkers

ctroya

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.