ISCOUTB / AG-Nebula

Nebula is an intuitive web app for creating AI models—regression or classification—using CSV files. Users can quickly upload data, select predictor and target variables, and generate models. Nebula also offers visual tools for exploring model performance with interactive charts and analysis.
GNU Affero General Public License v3.0
0 stars 0 forks source link

Realización esquema/diseño de la API #3

Open daniherreraa opened 1 week ago

jairoserrano commented 6 days ago

https://editor.swagger.io/

daniherreraa commented 4 days ago

Esquema Nebula API

Esta API permite gestionar usuarios y sus modelos, así como procesar archivos CSV para crear modelos predictivos (regresión o clasificación). Se puede realizar la carga de archivos, seleccionar las variables predictoras y la variable objetivo, obtener los resultados del modelo (como el R² y la importancia de las variables), y gestionar usuarios.


openapi: 3.0.0
info:
  title: Nebula API
  description: API para gestionar usuarios, sus modelos y procesar archivos CSV para crear modelos de regresión o clasificación.
  version: 1.0.0
tags:
  - name: user
    description: Operaciones sobre usuarios en la API
    externalDocs:
      description: Más información sobre usuarios
      url: http://swagger.io
  - name: model
    description: Gestión de modelos asociados a los usuarios
    externalDocs:
      description: Más información sobre los modelos
      url: http://swagger.io
  - name: file
    description: Subida y procesamiento de archivos CSV
    externalDocs:
      description: Más información sobre el procesamiento de archivos
      url: http://swagger.io

paths:
  /users:
    get:
      tags:
        - user
      summary: "Obtener todos los usuarios"
      description: "Devuelve una lista de todos los usuarios registrados."
      responses:
        200:
          description: "Lista de usuarios recuperada exitosamente."

    post:
      tags:
        - user
      summary: "Crear un nuevo usuario"
      description: "Crea un nuevo usuario con la información proporcionada."
      requestBody:
        description: "Datos del nuevo usuario"
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  example: "John Doe"
                email:
                  type: string
                  example: "john.doe@example.com"
      responses:
        201:
          description: "Usuario creado exitosamente."

  /users/{id}:
    get:
      tags:
        - user
      summary: "Obtener detalles de un usuario"
      description: "Devuelve la información de un usuario específico por su ID."
      parameters:
        - name: "id"
          in: "path"
          required: true
          description: "ID del usuario a obtener."
          schema:
            type: string
      responses:
        200:
          description: "Detalles del usuario."
        404:
          description: "Usuario no encontrado."

    delete:
      tags:
        - user
      summary: "Eliminar un usuario"
      description: "Elimina un usuario por su ID."
      parameters:
        - name: "id"
          in: "path"
          required: true
          description: "ID del usuario a eliminar."
          schema:
            type: string
      responses:
        200:
          description: "Usuario eliminado exitosamente."
        404:
          description: "Usuario no encontrado."

  /users/{id}/models:
    get:
      tags:
        - model
      summary: "Obtener todos los modelos de un usuario"
      description: "Devuelve una lista de los modelos creados por un usuario específico."
      parameters:
        - name: "id"
          in: "path"
          required: true
          description: "ID del usuario cuyos modelos se desean obtener."
          schema:
            type: string
      responses:
        200:
          description: "Lista de modelos obtenida exitosamente."
        404:
          description: "Usuario o modelos no encontrados."

    post:
      tags:
        - model
        - file
      summary: "Crear un modelo a partir de un archivo CSV y las variables seleccionadas"
      description: |
        Este endpoint permite procesar un archivo CSV para crear un modelo de regresión o clasificación.
        El usuario debe especificar:
        - **Variables predictoras**: las columnas del CSV que se usarán como entradas para el modelo.
        - **Variable de respuesta**: la columna del CSV que se desea predecir.

        El archivo CSV es procesado para generar el modelo, y las variables seleccionadas guían su creación.
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                file:
                  type: string
                  format: binary
                  description: "Archivo CSV que contiene los datos para crear el modelo."
                predictor_variables:
                  type: array
                  items:
                    type: string
                  description: "Lista de columnas que se usarán como variables predictoras."
                  example: ["age", "income", "education"]
                response_variable:
                  type: string
                  description: "Columna que se usará como variable de respuesta (lo que se desea predecir)."
                  example: "house_price"
      responses:
        201:
          description: "Modelo creado exitosamente a partir del CSV y las variables seleccionadas."

  /users/{id}/models/{model_id}:
    get:
      tags:
        - model
      summary: "Obtener resultados de un modelo específico"
      description: "Devuelve los resultados de un modelo, como el coeficiente de determinación (R²) y la importancia de las variables."
      parameters:
        - name: "id"
          in: "path"
          required: true
          description: "ID del usuario."
          schema:
            type: string
        - name: "model_id"
          in: "path"
          required: true
          description: "ID del modelo cuyos resultados se desean obtener."
          schema:
            type: string
      responses:
        200:
          description: "Resultados del modelo obtenidos exitosamente."
          content:
            application/json:
              schema:
                type: object
                properties:
                  r_squared:
                    type: number
                    format: float
                    description: "Coeficiente de determinación del modelo."
                    example: 0.85
                  variable_importance:
                    type: array
                    items:
                      type: object
                      properties:
                        variable:
                          type: string
                          example: "age"
                        importance:
                          type: number
                          format: float
                          example: 0.75
                  model_type:
                    type: string
                    description: "Tipo de modelo (regresión o clasificación)."
                    example: "regression"
        404:
          description: "Modelo no encontrado."

    delete:
      tags:
        - model
      summary: "Eliminar un modelo"
      description: "Elimina un modelo específico asociado a un usuario."
      parameters:
        - name: "id"
          in: "path"
          required: true
          description: "ID del usuario."
          schema:
            type: string
        - name: "model_id"
          in: "path"
          required: true
          description: "ID del modelo a eliminar."
          schema:
            type: string
      responses:
        200:
          description: "Modelo eliminado exitosamente."
        404:
          description: "Modelo no encontrado."

components:
  schemas:
    User:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        email:
          type: string

    Model:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        created_at:
          type: string
        predictor_variables:
          type: array
          items:
            type: string
        response_variable:
          type: string