Skip to main content

A recommendation system package using OpenAI embeddings

Project description

Recomenda

GitHub stars License Python Version

Recomenda is the most simple-to-use Recommender System designed to seamlessly integrate with your projects. Powered by OpenAI Embeddings, Recomenda delivers accurate and efficient recommendations with minimal setup.


Table of Contents


Features

  • Simplicity: Easy-to-use API with minimal configuration.
  • Powered by OpenAI: Utilizes OpenAI Embeddings for high-quality recommendations.
  • Synchronous & Asynchronous: Choose between synchronous and asynchronous operations based on your project needs.
  • Extensible: Easily extend and customize the recommender to fit your specific requirements.
  • Robust Logging: Comprehensive logging for debugging and monitoring.
  • Configuration Management: Flexible configuration through environment variables.

Installation

Ensure you have Python 3.8 or higher installed. You can install Recomenda via pip:

pip install recomenda

Alternatively, clone the repository and install manually:

git clone https://github.com/yourusername/recomenda.git
cd recomenda
pip install -r requirements.txt

Quick Start

Here's a quick example to get you started with Recomenda.

1. Set Up Environment Variables

Ensure you have the OPENAI_API_KEY set in your environment. You can create a .env file or set it directly in your shell.

export OPENAI_API_KEY='your-openai-api-key'

2. Initialize the Recommender

from recomenda import Recommender

# Define your options
options = [
    {"id": 1, "name": "Option A"},
    {"id": 2, "name": "Option B"},
    {"id": 3, "name": "Option C"},
    {"id": 4, "name": "Option D"},
    {"id": 5, "name": "Option E"},
]

# Initialize the Recommender
recommender = Recommender(options=options)

# Generate recommendations based on a target
target = "Your target input here"
recommendations = recommender.generate_recommendations(to=target, how_many=3)

print("Top Recommendations:")
for rec in recommendations:
    print(rec)

Usage

Recomenda offers both synchronous and asynchronous Recommender interfaces to cater to different application needs.

Synchronous Recommender

Ideal for applications where blocking operations are acceptable.

from recomenda import Recommender

options = [
    {"id": 1, "name": "Option A"},
    {"id": 2, "name": "Option B"},
    # Add more options
]

recommender = Recommender(options=options)
target = "Sample input for recommendation"
recommendations = recommender.generate_recommendations(to=target, how_many=5)

for rec in recommendations:
    print(rec)

Asynchronous Recommender

Perfect for high-performance applications requiring non-blocking operations.

import asyncio
from recomenda import AsyncRecommender

async def main():
    options = [
        {"id": 1, "name": "Option A"},
        {"id": 2, "name": "Option B"},
        # Add more options
    ]

    recommender = AsyncRecommender(options=options)
    target = "Sample input for recommendation"
    recommendations = await recommender.generate_recommendations(to=target, how_many=5)

    for rec in recommendations:
        print(rec)

asyncio.run(main())

Configuration

Recommender is highly configurable through environment variables. Below are the primary configurations:

Embedder Configuration

  • OPENAI_API_KEY: (Required) Your OpenAI API key.
  • OPENAI_EMBEDDING_MODEL: (Optional) The OpenAI embedding model to use. Defaults to text-embedding-3-small.

Database Configuration

  • DATABASE_URL: (Optional) The database URL for storing embeddings. Defaults to sqlite:///./recomenda.db.

Ensure these variables are set in your environment or defined in a .env file.


API Reference

Recommender

The synchronous recommender class.

Initialization:

Recommender(
    embedder: Optional[Embedder] = None,
    how: str = "default",
    how_many: int = 5,
    options: Optional[List[Dict[str, Any]]] = None,
    to: Optional[str] = None,
    api_key: str = config.EMBEDDER.OPENAI_API_KEY,
    model: str = config.EMBEDDER.OPENAI_EMBEDDING_MODEL
)

Methods:

  • generate_recommendations(to: Optional[str], how_many: Optional[int], force: bool = False) -> List[Dict[str, Any]]
  • generate_recommendation() -> Optional[Dict[str, Any]]
  • show_recommendations() -> None
  • show_recommendation() -> None

AsyncRecommender

The asynchronous recommender class.

Initialization:

AsyncRecommender(
    embedder: Optional[Embedder] = None,
    how: str = "default",
    how_many: int = 5,
    options: Optional[List[Dict[str, Any]]] = None,
    to: Optional[str] = None,
    api_key: str = config.EMBEDDER.OPENAI_API_KEY,
    model: str = config.EMBEDDER.OPENAI_EMBEDDING_MODEL
)

Methods:

  • await generate_recommendations(to: Optional[str], how_many: Optional[int]) -> List[Dict[str, Any]]
  • await generate_recommendation() -> Optional[Dict[str, Any]]
  • await show_recommendations() -> None
  • await show_recommendation() -> None
  • await get_recommendations_str() -> str

For detailed documentation, refer to the docs.


Contributing

Contributions are what make the open-source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.

  1. Fork the Project
  2. Create your Feature Branch
    git checkout -b feature/YourFeature
    
  3. Commit your Changes
    git commit -m "Add YourFeature"
    
  4. Push to the Branch
    git push origin feature/YourFeature
    
  5. Open a Pull Request

Please ensure your contributions adhere to the project's code of conduct and guidelines.


License

Distributed under the MIT License. See LICENSE for more information.


Support

If you encounter any issues or have questions, feel free to open an issue or reach out via email.


Acknowledgements

  • OpenAI for providing powerful embedding models.
  • Scipy for the cosine similarity implementation.
  • Python Logging for robust logging capabilities.

Happy Recommending! 🚀

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

recomenda-0.1.2.tar.gz (12.0 kB view details)

Uploaded Source

Built Distribution

recomenda-0.1.2-py3-none-any.whl (13.8 kB view details)

Uploaded Python 3

File details

Details for the file recomenda-0.1.2.tar.gz.

File metadata

  • Download URL: recomenda-0.1.2.tar.gz
  • Upload date:
  • Size: 12.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.5.5 CPython/3.11.9 Linux/6.2.16

File hashes

Hashes for recomenda-0.1.2.tar.gz
Algorithm Hash digest
SHA256 52e4e18767ccab1a148b6f53ed6a8446626187405e569b9bd7fb405e9cf05b16
MD5 3242f379b7227e1d3f61bf9ca4ad02ad
BLAKE2b-256 4b7f35a24ff3eb668b5fb31b45cbfe88f90838620741e05393c1fdba9f48685b

See more details on using hashes here.

File details

Details for the file recomenda-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: recomenda-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 13.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.5.5 CPython/3.11.9 Linux/6.2.16

File hashes

Hashes for recomenda-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 afee911c34d89db6c5ddd63a5b27c6949f4d01bf83461d8b6fabae4b500b46d2
MD5 c0bba206349166cc6b5df114264de990
BLAKE2b-256 dfae72cf9d7b5f4f7251d1eea7b3c61d14b40e538a7686ba8330e2f57c4ec585

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page