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.0.tar.gz (11.9 kB view details)

Uploaded Source

Built Distribution

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

Uploaded Python 3

File details

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

File metadata

  • Download URL: recomenda-0.1.0.tar.gz
  • Upload date:
  • Size: 11.9 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.0.tar.gz
Algorithm Hash digest
SHA256 7be31981911beaf7adfb290b44ac6910de723bd3c9a977c649feb524852d2681
MD5 ebaa3eb1f838c1a49d786566c5e209de
BLAKE2b-256 a514741589810ee5793d8cd6a927f97d487bc061e4ba7d5d32644137db7c5a39

See more details on using hashes here.

File details

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

File metadata

  • Download URL: recomenda-0.1.0-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.0-py3-none-any.whl
Algorithm Hash digest
SHA256 8214b81a641098ab69e92c988e8714b7f7dffccdb286d060e3217e35836893b9
MD5 c6e9b62dfcb805b51645eb24cd6076fb
BLAKE2b-256 dd71f85f03a95d693eebb502861e09af4adcca08de358a2421c128fd2bea0a72

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