Metadata-Version: 2.1
Name: recommender-agent
Version: 0.2.1
Summary: En el presente proyecto muestro la construcción de una sistema de recomendación, el sistema permite recomendar recursos a través del uso de mecanismos de Procesamiento de lenguaje natura como agentes langchain, IA generatica y embeddings.
Home-page: https://github.com/johansquintero/recommender-agent
Author: Johan sebastian quintero rojas
Author-email: metalium144@gmail.com
License: MIT
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: numpy <1.26.0
Requires-Dist: langchain ==0.0.334
Requires-Dist: chromadb ==0.4.17
Requires-Dist: requests ==2.31.0
Requires-Dist: huggingface-hub ==0.16.4
Requires-Dist: scipy ==1.9.3
Requires-Dist: pandas <2.0.0
Requires-Dist: sentence-transformers ==2.2.2
Requires-Dist: openai <1.0.0
Requires-Dist: llama-cpp-python ==0.2.11
Requires-Dist: torch ==2.1.2

# Sistema de recomendaciÃ³n con agente langchain

<!-- ABOUT THE PROJECT -->
## Acerca del proyecto
En el presente proyecto muestro la construcciÃ³n de una sistema de recomendaciÃ³n, el sistema permite recomendar recursos a travÃ©s del uso de mecanismos de Procesamiento de lenguaje natura como agentes langchain, IA generatica y embeddings.


## Procesos 

* ConfiguraciÃ³n de ChromaDb - Vector Similarity
* CreaciÃ³n del mÃ³dulo de generaciÃ³n de embeddings ya sea por openAi o algun otro modelo
* MÃ³dulo de recomendaciÃ³n generativo con agentes langchain y llms

<!-- GETTING STARTED -->
## TecnologÃ­as

* Python
* ChromaDB
* Langchain
* Llama
* HugginFace
* pytorch
* OpenAI
* Embeddings
* Mistral
* GPT


## Prerequisitos

* Instalar Python (<a href="https://www.python.org/downloads/">https://www.python.org/downloads/</a>).
* Obtener el API KEY de OpenAI (opcional) (<a href="https://openai.com/">https://openai.com/</a>).

## Inicializacion manual

* Clonar el repositorio
  ```sh
  git clone https://github.com/johansquintero/recommender-agent
  ```

* Crear el entorno virtual
  ```sh
  python -m venv env
  ```
* Activar entorno virtual (windows):
  ```sh
  env\Scripts\activate
  ```
* Instalar las dependencias del proyecto:
  ```sh
  pip install -r requirements.txt
  ```

## Instalando con pip
```sh
pip install recommender-agent
```
# Ejemplo de implementacion del sistema
#### Imports 
```python
from recommender_agent.recommenderSystem import CoreRecommendation
import pandas as pd
```
#### Se importa el dataset de la ruta donde este ubicado
```python
books = pd.read_csv("../dataset_books/Books2.csv")
books = books.fillna('')
books.drop(columns=["isbn13","thumbnail","subtitle"],axis=1,inplace=True)
```
#### Un requisito es que cada uno de los elementos tengan un id
```python
books["id"] = books.index + 1
```
#### Se convierte a diccionario el dataset
```python
books_dict = books.to_dict(orient='records') 
```
#### Si se cuenta con una api key de openai se agrega en este apartado
```python
openai_api_key = ""
```
#### Se inicializa la instancia el recomendador
```python
recommender = CoreRecommendation(openai_key=openai_api_key)
```
#### De la intancia anterior se crea ruta de persistencia de los recursos
```python
recommender.init_components(collection_name="books",resources=books_dict)
```
#### Usuario de prueba en formato JSON
```python
user = {
  "user": {
    "id": 234567,
    "name": "Carlos Rodriguez",
    "email": "carlos_rodriguez@email.com",
    "address": {
      "street": "Calle Principal",
      "city": "Barcelona",
      "state": "Spain",
      "postal_code": "08001"
    },
    "preferences": {
      "genres": ["Philosophy","Novels", "History"],
      "favorite_authors": ["Dan Brown", "Ken Follett", "RenÃ© Descartes"]
    },
    "purchase_history": [
      {
        "book": "The Da Vinci Code",
        "author": "Dan Brown",
        "price": 17.99,
        "purchase_date": "2023-12-12"
      },
      {
        "book": "The Pillars of the Earth",
        "author": "Ken Follett",
        "price": 22.99,
        "purchase_date": "2024-01-05"
      }
    ]
  }
}
```
#### Se ejecuta el recomendador con la informacion del usuario
```python
print(recommender.get_recommendation(user=user))
```



