File size: 3,780 Bytes
3687fa1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
---
title: Agente Inteligente Reciclaje
emoji: ♻️
colorFrom: green
colorTo: blue
sdk: docker
app_port: 7860
pinned: false
---

# ReciclA: Asistente Inteligente de Reciclaje

![Sync to Hugging Face](https://github.com/YellowAlberto/ReciclA---Proyecto-Agente/actions/workflows/sync_to_hf.yml/badge.svg)

**ReciclA** es un ecosistema inteligente diseñado para facilitar el reciclaje mediante el uso de Inteligencia Artificial avanzada. El sistema integra visión artificial para la detección de residuos y un agente conversacional que asesora al usuario sobre la gestión de desechos.

### Componentes Clave:

*   **Agente Inteligente:** Implementado con **Groq** para ofrecer respuestas expertas y personalizadas en lenguaje natural.
*   **Visión Artificial:** Utiliza modelos **YOLOv8** optimizados para identificar objetos en imágenes subidas por el usuario.
*   **Base de Datos Híbrida:** Configurada para trabajar con **PostgreSQL (Supabase)** en producción o **SQLite** de forma local y automática si no se detectan credenciales.
*   **Contenedorización:** Sistema orquestado con **Docker Compose** para garantizar la portabilidad sin dependencias manuales.
* **CI/CD Automático:** Sincronización automatizada mediante **GitHub Actions** que despliega cada actualización directamente en **Hugging Face Spaces**.

---

# Instrucciones de Instalación

### Requisitos previos:
*   **Docker Desktop:** Instalado y en funcionamiento.
*   **Groq API Key:** Necesaria para el funcionamiento del agente conversacional.

### Pasos para el despliegue:

1.  **Configuración de entorno:** Crea un archivo `.env` en la raíz del proyecto con el siguiente contenido:
    ```env
    GROQ_API_KEY=tu_api_key_aqui
    SECRET_KEY=un_secreto_aleatorio_para_jwt
    # Opcional: Si se omite DATABASE_URL, el sistema iniciará en modo SQLite local
    DATABASE_URL=postgresql://tu_url_de_supabase
    ```

2.  **Lanzamiento:** Abre una terminal en la carpeta del proyecto y ejecuta el siguiente comando:
    ```bash
    docker-compose up --build
    ```

3.  **Acceso a las interfaces:**
    *   **Despliegue Online (Hugging Face):** [https://huggingface.co/spaces/YellowAlberto/ReciclA]
    *   **Frontend (Gradio):** [http://localhost:7860](http://localhost:7860)
    *   **API Docs (Swagger):** [http://localhost:8000/docs](http://localhost:8000/docs)

> **Nota sobre el despliegue:** Este repositorio está configurado con **GitHub Actions**. Cualquier commit en la rama `main` dispara automáticamente una actualización del contenedor en Hugging Face.

---

# Uso de la API

La API sigue los principios **RESTful**, utilizando los verbos HTTP para definir las acciones sobre cada recurso.

| Método | Endpoint | Descripción |
| :--- | :--- | :--- |
| **POST** | `/registrar` | Crea la cuenta de un usuario y lo guarda en la base de datos. |
| **POST** | `/login` | Comprueba las credenciales y genera un token JWT de acceso. |
| **POST** | `/detectar-visual` | Analiza una imagen, devuelve la predicción + respuesta del agente y guarda en historial. |
| **GET** | `/historial` | Recupera las últimas 10 consultas del usuario autenticado. |
| **PUT** | `/usuarios/actualizarUsuario` | Actualiza el nombre de usuario del perfil activo. |
| **DELETE** | `/historial` | Borra permanentemente todo el historial del usuario. |

---

### Persistencia de Datos
El proyecto utiliza **volúmenes de Docker** para asegurar que la persistencia sea efectiva:
*   **SQLite:** Si se usa el modo local, se creará un archivo `test.db` en tu carpeta raíz que no se borrará al apagar el contenedor.
*   **Interfaz:** El logo e iconos se cargan mediante codificación **Base64** para garantizar su visualización correcta sin errores de rutas locales o bloqueos de seguridad del navegador.