Metadata-Version: 2.1
Name: RelevanceAI
Version: 2.7.6
Home-page: https://relevance.ai/
Author: Relevance AI
Author-email: dev@relevance.ai
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Education
Classifier: Intended Audience :: Science/Research
Classifier: Intended Audience :: Information Technology
Classifier: Intended Audience :: Financial and Insurance Industry
Classifier: Intended Audience :: Healthcare Industry
Classifier: Intended Audience :: Manufacturing
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.4
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: Implementation :: PyPy
Classifier: Topic :: Database
Classifier: Topic :: Internet :: WWW/HTTP :: Indexing/Search
Classifier: Topic :: Multimedia :: Sound/Audio :: Conversion
Classifier: Topic :: Multimedia :: Video :: Conversion
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Classifier: Topic :: Scientific/Engineering :: Image Recognition
Classifier: Topic :: Scientific/Engineering :: Information Analysis
Classifier: Topic :: Scientific/Engineering :: Visualization
Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
Requires-Python: >=3.6
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: tqdm (>=4.49.0)
Requires-Dist: pandas (>=1.0.0)
Requires-Dist: loguru (>=0.5.3)
Requires-Dist: document-utils (>=1.7.1)
Requires-Dist: requests (>=2.0.0)
Requires-Dist: numpy (>=1.19.0)
Requires-Dist: joblib (>=1.0.0)
Requires-Dist: scikit-learn (>=0.20.0)
Requires-Dist: typing-extensions (>=3.0)
Requires-Dist: analytics-python (~=1.4.0)
Requires-Dist: aiohttp (>=3.8.1)
Requires-Dist: appdirs (>=1.4.4)
Requires-Dist: orjson (>=3.6.7)
Provides-Extra: dev
Requires-Dist: autopep8 ; extra == 'dev'
Requires-Dist: pylint ; extra == 'dev'
Requires-Dist: jupyter ; extra == 'dev'
Requires-Dist: pre-commit ; extra == 'dev'
Requires-Dist: black ; extra == 'dev'
Requires-Dist: mypy ; extra == 'dev'
Requires-Dist: xenon ; extra == 'dev'
Requires-Dist: pytest ; extra == 'dev'
Requires-Dist: pytest-dotenv ; extra == 'dev'
Requires-Dist: pytest-xdist ; extra == 'dev'
Requires-Dist: pytest-cov ; extra == 'dev'
Requires-Dist: pytest-mock ; extra == 'dev'
Requires-Dist: types-requests ; extra == 'dev'
Requires-Dist: pytest-sugar ; extra == 'dev'
Requires-Dist: pytest-rerunfailures ; extra == 'dev'
Requires-Dist: tqdm (>=4.49.0) ; extra == 'dev'
Requires-Dist: pandas (>=1.0.0) ; extra == 'dev'
Requires-Dist: loguru (>=0.5.3) ; extra == 'dev'
Requires-Dist: document-utils (>=1.7.1) ; extra == 'dev'
Requires-Dist: requests (>=2.0.0) ; extra == 'dev'
Requires-Dist: numpy (>=1.19.0) ; extra == 'dev'
Requires-Dist: joblib (>=1.0.0) ; extra == 'dev'
Requires-Dist: scikit-learn (>=0.20.0) ; extra == 'dev'
Requires-Dist: typing-extensions (>=3.0) ; extra == 'dev'
Requires-Dist: analytics-python (~=1.4.0) ; extra == 'dev'
Requires-Dist: aiohttp (>=3.8.1) ; extra == 'dev'
Requires-Dist: appdirs (>=1.4.4) ; extra == 'dev'
Requires-Dist: orjson (>=3.6.7) ; extra == 'dev'
Requires-Dist: openpyxl (>=3.0.9) ; extra == 'dev'
Requires-Dist: fsspec (>=2021.10.1) ; extra == 'dev'
Requires-Dist: umap-learn (>=0.5.2) ; extra == 'dev'
Requires-Dist: sphinx-rtd-theme (>=0.5.0) ; extra == 'dev'
Requires-Dist: pydata-sphinx-theme (==0.8.1) ; extra == 'dev'
Requires-Dist: sphinx-autoapi (==1.8.4) ; extra == 'dev'
Requires-Dist: sphinx-autodoc-typehints (==1.12.0) ; extra == 'dev'
Provides-Extra: dev-vis
Requires-Dist: autopep8 ; extra == 'dev-vis'
Requires-Dist: pylint ; extra == 'dev-vis'
Requires-Dist: jupyter ; extra == 'dev-vis'
Requires-Dist: pytest ; extra == 'dev-vis'
Requires-Dist: pytest-dotenv ; extra == 'dev-vis'
Requires-Dist: pytest-xdist ; extra == 'dev-vis'
Requires-Dist: pytest-cov ; extra == 'dev-vis'
Requires-Dist: pytest-mock ; extra == 'dev-vis'
Requires-Dist: mypy ; extra == 'dev-vis'
Requires-Dist: types-requests ; extra == 'dev-vis'
Requires-Dist: pytest-sugar ; extra == 'dev-vis'
Requires-Dist: pytest-rerunfailures ; extra == 'dev-vis'
Requires-Dist: tqdm (>=4.49.0) ; extra == 'dev-vis'
Requires-Dist: pandas (>=1.0.0) ; extra == 'dev-vis'
Requires-Dist: loguru (>=0.5.3) ; extra == 'dev-vis'
Requires-Dist: document-utils (>=1.7.1) ; extra == 'dev-vis'
Requires-Dist: requests (>=2.0.0) ; extra == 'dev-vis'
Requires-Dist: numpy (>=1.19.0) ; extra == 'dev-vis'
Requires-Dist: joblib (>=1.0.0) ; extra == 'dev-vis'
Requires-Dist: scikit-learn (>=0.20.0) ; extra == 'dev-vis'
Requires-Dist: typing-extensions (>=3.0) ; extra == 'dev-vis'
Requires-Dist: analytics-python (~=1.4.0) ; extra == 'dev-vis'
Requires-Dist: aiohttp (>=3.8.1) ; extra == 'dev-vis'
Requires-Dist: appdirs (>=1.4.4) ; extra == 'dev-vis'
Requires-Dist: orjson (>=3.6.7) ; extra == 'dev-vis'
Requires-Dist: openpyxl (>=3.0.9) ; extra == 'dev-vis'
Requires-Dist: fsspec (>=2021.10.1) ; extra == 'dev-vis'
Requires-Dist: umap-learn (>=0.5.2) ; extra == 'dev-vis'
Requires-Dist: sphinx-rtd-theme (>=0.5.0) ; extra == 'dev-vis'
Requires-Dist: pydata-sphinx-theme (==0.8.1) ; extra == 'dev-vis'
Requires-Dist: sphinx-autoapi (==1.8.4) ; extra == 'dev-vis'
Requires-Dist: sphinx-autodoc-typehints (==1.12.0) ; extra == 'dev-vis'
Provides-Extra: dev-viz
Requires-Dist: autopep8 ; extra == 'dev-viz'
Requires-Dist: pylint ; extra == 'dev-viz'
Requires-Dist: jupyter ; extra == 'dev-viz'
Requires-Dist: pytest ; extra == 'dev-viz'
Requires-Dist: pytest-dotenv ; extra == 'dev-viz'
Requires-Dist: pytest-xdist ; extra == 'dev-viz'
Requires-Dist: pytest-cov ; extra == 'dev-viz'
Requires-Dist: pytest-mock ; extra == 'dev-viz'
Requires-Dist: mypy ; extra == 'dev-viz'
Requires-Dist: types-requests ; extra == 'dev-viz'
Requires-Dist: pytest-sugar ; extra == 'dev-viz'
Requires-Dist: pytest-rerunfailures ; extra == 'dev-viz'
Requires-Dist: tqdm (>=4.49.0) ; extra == 'dev-viz'
Requires-Dist: pandas (>=1.0.0) ; extra == 'dev-viz'
Requires-Dist: loguru (>=0.5.3) ; extra == 'dev-viz'
Requires-Dist: document-utils (>=1.7.1) ; extra == 'dev-viz'
Requires-Dist: requests (>=2.0.0) ; extra == 'dev-viz'
Requires-Dist: numpy (>=1.19.0) ; extra == 'dev-viz'
Requires-Dist: joblib (>=1.0.0) ; extra == 'dev-viz'
Requires-Dist: scikit-learn (>=0.20.0) ; extra == 'dev-viz'
Requires-Dist: typing-extensions (>=3.0) ; extra == 'dev-viz'
Requires-Dist: analytics-python (~=1.4.0) ; extra == 'dev-viz'
Requires-Dist: aiohttp (>=3.8.1) ; extra == 'dev-viz'
Requires-Dist: appdirs (>=1.4.4) ; extra == 'dev-viz'
Requires-Dist: orjson (>=3.6.7) ; extra == 'dev-viz'
Requires-Dist: openpyxl (>=3.0.9) ; extra == 'dev-viz'
Requires-Dist: fsspec (>=2021.10.1) ; extra == 'dev-viz'
Requires-Dist: umap-learn (>=0.5.2) ; extra == 'dev-viz'
Requires-Dist: sphinx-rtd-theme (>=0.5.0) ; extra == 'dev-viz'
Requires-Dist: pydata-sphinx-theme (==0.8.1) ; extra == 'dev-viz'
Requires-Dist: sphinx-autoapi (==1.8.4) ; extra == 'dev-viz'
Requires-Dist: sphinx-autodoc-typehints (==1.12.0) ; extra == 'dev-viz'
Provides-Extra: docs
Requires-Dist: sphinx-rtd-theme (>=0.5.0) ; extra == 'docs'
Requires-Dist: pydata-sphinx-theme (==0.8.1) ; extra == 'docs'
Requires-Dist: sphinx-autoapi (==1.8.4) ; extra == 'docs'
Requires-Dist: sphinx-autodoc-typehints (==1.12.0) ; extra == 'docs'
Provides-Extra: excel
Requires-Dist: tqdm (>=4.49.0) ; extra == 'excel'
Requires-Dist: pandas (>=1.0.0) ; extra == 'excel'
Requires-Dist: loguru (>=0.5.3) ; extra == 'excel'
Requires-Dist: document-utils (>=1.7.1) ; extra == 'excel'
Requires-Dist: requests (>=2.0.0) ; extra == 'excel'
Requires-Dist: numpy (>=1.19.0) ; extra == 'excel'
Requires-Dist: joblib (>=1.0.0) ; extra == 'excel'
Requires-Dist: scikit-learn (>=0.20.0) ; extra == 'excel'
Requires-Dist: typing-extensions (>=3.0) ; extra == 'excel'
Requires-Dist: analytics-python (~=1.4.0) ; extra == 'excel'
Requires-Dist: aiohttp (>=3.8.1) ; extra == 'excel'
Requires-Dist: appdirs (>=1.4.4) ; extra == 'excel'
Requires-Dist: orjson (>=3.6.7) ; extra == 'excel'
Requires-Dist: openpyxl (>=3.0.9) ; extra == 'excel'
Requires-Dist: fsspec (>=2021.10.1) ; extra == 'excel'
Provides-Extra: hdbscan
Requires-Dist: hdbscan (>=0.8.27) ; extra == 'hdbscan'
Provides-Extra: kmedoids
Requires-Dist: scikit-learn-extra (>=0.2.0) ; extra == 'kmedoids'
Provides-Extra: models
Requires-Dist: tqdm (>=4.49.0) ; extra == 'models'
Requires-Dist: pandas (>=1.0.0) ; extra == 'models'
Requires-Dist: loguru (>=0.5.3) ; extra == 'models'
Requires-Dist: document-utils (>=1.7.1) ; extra == 'models'
Requires-Dist: requests (>=2.0.0) ; extra == 'models'
Requires-Dist: numpy (>=1.19.0) ; extra == 'models'
Requires-Dist: joblib (>=1.0.0) ; extra == 'models'
Requires-Dist: scikit-learn (>=0.20.0) ; extra == 'models'
Requires-Dist: typing-extensions (>=3.0) ; extra == 'models'
Requires-Dist: analytics-python (~=1.4.0) ; extra == 'models'
Requires-Dist: aiohttp (>=3.8.1) ; extra == 'models'
Requires-Dist: appdirs (>=1.4.4) ; extra == 'models'
Requires-Dist: orjson (>=3.6.7) ; extra == 'models'
Requires-Dist: sentence-transformers ; extra == 'models'
Provides-Extra: notebook
Requires-Dist: jsonshower ; extra == 'notebook'
Requires-Dist: tqdm (>=4.49.0) ; extra == 'notebook'
Requires-Dist: pandas (>=1.0.0) ; extra == 'notebook'
Requires-Dist: loguru (>=0.5.3) ; extra == 'notebook'
Requires-Dist: document-utils (>=1.7.1) ; extra == 'notebook'
Requires-Dist: requests (>=2.0.0) ; extra == 'notebook'
Requires-Dist: numpy (>=1.19.0) ; extra == 'notebook'
Requires-Dist: joblib (>=1.0.0) ; extra == 'notebook'
Requires-Dist: scikit-learn (>=0.20.0) ; extra == 'notebook'
Requires-Dist: typing-extensions (>=3.0) ; extra == 'notebook'
Requires-Dist: analytics-python (~=1.4.0) ; extra == 'notebook'
Requires-Dist: aiohttp (>=3.8.1) ; extra == 'notebook'
Requires-Dist: appdirs (>=1.4.4) ; extra == 'notebook'
Requires-Dist: orjson (>=3.6.7) ; extra == 'notebook'
Provides-Extra: tests
Requires-Dist: pytest ; extra == 'tests'
Requires-Dist: pytest-dotenv ; extra == 'tests'
Requires-Dist: pytest-xdist ; extra == 'tests'
Requires-Dist: pytest-cov ; extra == 'tests'
Requires-Dist: pytest-mock ; extra == 'tests'
Requires-Dist: mypy ; extra == 'tests'
Requires-Dist: types-requests ; extra == 'tests'
Requires-Dist: pytest-sugar ; extra == 'tests'
Requires-Dist: pytest-rerunfailures ; extra == 'tests'
Requires-Dist: tqdm (>=4.49.0) ; extra == 'tests'
Requires-Dist: pandas (>=1.0.0) ; extra == 'tests'
Requires-Dist: loguru (>=0.5.3) ; extra == 'tests'
Requires-Dist: document-utils (>=1.7.1) ; extra == 'tests'
Requires-Dist: requests (>=2.0.0) ; extra == 'tests'
Requires-Dist: numpy (>=1.19.0) ; extra == 'tests'
Requires-Dist: joblib (>=1.0.0) ; extra == 'tests'
Requires-Dist: scikit-learn (>=0.20.0) ; extra == 'tests'
Requires-Dist: typing-extensions (>=3.0) ; extra == 'tests'
Requires-Dist: analytics-python (~=1.4.0) ; extra == 'tests'
Requires-Dist: aiohttp (>=3.8.1) ; extra == 'tests'
Requires-Dist: appdirs (>=1.4.4) ; extra == 'tests'
Requires-Dist: orjson (>=3.6.7) ; extra == 'tests'
Requires-Dist: openpyxl (>=3.0.9) ; extra == 'tests'
Requires-Dist: fsspec (>=2021.10.1) ; extra == 'tests'
Requires-Dist: umap-learn (>=0.5.2) ; extra == 'tests'
Provides-Extra: umap
Requires-Dist: umap-learn (>=0.5.2) ; extra == 'umap'

![Github Banner](assets/github_banner.png)


[Join our slack channel!](https://join.slack.com/t/relevance-ai/shared_invite/zt-11fo8oush-dHPd57wamhoQ7J5arNv1mg)

## Relevance AI - The ML Platform for Unstructured Data Analysis 
[![Documentation Status](https://readthedocs.org/projects/relevanceai/badge/?version=latest)](https://relevanceai.readthedocs.io/en/latest/?badge=latest)
[![License](https://img.shields.io/pypi/l/relevanceai)](https://img.shields.io/pypi/l/relevanceai)

🌎 80% of data in the world is unstructured in the form of text, image, audio, videos, and more.

🔥 Use Relevance to unlock the value of your unstructured data:
- ⚡ Quickly analyze unstructured data with pre-trained machine learning models in a few lines of code.
- ✨ Visualize your unstructured data. Text highlights from Named entity recognition, Word cloud from keywords, Bounding box from images.
- 📊 Create charts for both structured and unstructured.
- 🔎 Drilldown with filters and similarity search to explore and find insights.
- 🚀 Share data apps with your team.

[Sign up for a free account ->](https://hubs.ly/Q017CkXK0)

Relevance AI also acts as a platform for:
- 🔑 Vectors, storing and querying vectors with flexible vector similarity search, that can be combined with multiple vectors, aggregates and filters.
- 🔮 ML Dataset Evaluation, for debugging dataset labels, model outputs and surfacing edge cases.


## 🧠 Documentation

| Type      | Link |
| ------------- | ----------- |
| Python API | [Documentation](https://sdk.relevance.ai/) |
| Python Reference | [Documentation](https://relevanceai.readthedocs.io/en/latest/)        |
| Cloud Dashboard | [Documentation](https://docs.relevance.ai/) |

## 🛠️ Installation

Using pip:

```{bash}
pip install -U relevanceai
```
Using conda:

```{bash}
conda install -c relevance relevanceai
```

## ⏩ Quickstart
[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/RelevanceAI/RelevanceAI/blob/development/guides/quickstart_guide.ipynb)

Login to `relevanceai`:
```{python}
from relevanceai import Client

client = Client()
```

Prepare your documents for insertion by following the below format:
- Each document should be a dictionary
- Include a field `_id` as a primary key, otherwise it's automatically generated
- Suffix vector fields with `_vector_`

```{python}
docs = [
    {"_id": "1", "example_vector_": [0.1, 0.1, 0.1], "data": "Documentation"},
    {"_id": "2", "example_vector_": [0.2, 0.2, 0.2], "data": "Best document!"},
    {"_id": "3", "example_vector_": [0.3, 0.3, 0.3], "data": "document example"},
    {"_id": "4", "example_vector_": [0.4, 0.4, 0.4], "data": "this is another doc"},
    {"_id": "5", "example_vector_": [0.5, 0.5, 0.5], "data": "this is a doc"},
]
```

### Insert data into a dataset

Create a dataset object with the name of the dataset you'd like to use. If it doesn't exist, it'll be created for you.

```{python}
ds = client.Dataset("quickstart")
ds.insert_documents(docs)
```
> Quick tip! Our Dataset object is compatible with common dataframes methods like `.head()`, `.shape()` and `.info()`.

### Perform vector search

```{python}
query = [
    {"vector": [0.2, 0.2, 0.2], "field": "example_vector_"}
]
results = ds.search(
    vector_search_query=query,
    page_size=3,
)
```
[Learn more about how to flexibly configure your vector search ->](https://sdk.relevance.ai/docs/search)

### Perform clustering

Generate clusters
```{python}
clusterop = ds.cluster(vector_fields=["example_vector_"])
clusterop.list_closest()
```

Generate clusters with sklearn
```{python}
from sklearn.cluster import AgglomerativeClustering

cluster_model = AgglomerativeClustering()
clusterop = ds.cluster(vector_fields=["example_vector_"], model=cluster_model, alias="agglomerative")
clusterop.list_closest()
```
[Learn more about how to flexibly configure your clustering ->](https://sdk.relevance.ai/docs/search)

## 🧰 Config

The config object contains the adjustable global settings for the SDK. For a description of all the settings, see [here](https://github.com/RelevanceAI/RelevanceAI/blob/development/relevanceai/constants/config.ini).

To view setting options, run the following:

```{python}
client.config.options
```

The syntax for selecting an option is section.key. For example, to disable logging, run the following to modify logging.enable_logging:

```{python}
client.config.set_option('logging.enable_logging', False)
```

To restore all options to their default, run the following:

### Changing the base URL

You can change the base URL as such:

```{python}
client.base_url = "https://.../latest"
```

## 🚧 Development

### Getting Started
To get started with development, ensure you have pytest and mypy installed. These will help ensure typechecking and testing.

```{bash}
python -m pip install pytest mypy
```

Then run testing using:

> Don't forget to set your test credentials!

```{bash}
export TEST_PROJECT = xxx
export TEST_API_KEY = xxx

python -m pytest
mypy relevanceai
```

Set up precommit

```{bash}
pip install precommit
pre-commit install
```
