diff --git a/DataSets/AdVec/advec_demo.ipynb b/DataSets/AdVec/advec_demo.ipynb index 7aed8e9..96770cb 100644 --- a/DataSets/AdVec/advec_demo.ipynb +++ b/DataSets/AdVec/advec_demo.ipynb @@ -1,5267 +1,626 @@ { - "cells": [ - { - "cell_type": "markdown", - "source": [ - "![63f78014766fd30436c18a79_Hyperspace - navbar logo.png](data:image/png;base64,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)\n", - "\n", - "# Application Semantic Search Using Hyperspace\n", - "\n", - "This notebook demonstrates the use of Hyperspace to perform hybrid search over an App database.\n", - "In addition to hybrid search, the notebook includes examples for classic search and vector search, based on embedding of a user provided query.\n", - "\n", - "The relevent score functions can be downloaded from [Hyperspace git](https://github.com/hyper-space-io/QuickStart/blob/main/DataSets/AdVec/classic_score.py).\n", - "For more info, see the [Hyperspace documentation](https://docs.hyper-space.io/hyperspace-docs/getting-started/overview).\n", - "\n", - "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/hyper-space-io/QuickStart/blob/master/DataSets/AdVec/advec_demo.ipynb)\n", - "# The Dataset\n", - "![AdVec_logo.PNG](data:image/png;base64,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)\n", - "\n", - "The dataset includes 89330 documents with the following fields:\n", - "1. **id** [float] - unique identifier per application\n", - "2. **title** [Keyword] - Application name\n", - "3. **bundle_id** [keyword] - identifier of the App bundle, if such exists\n", - "4. **ios** [boolean] - Is the App an IOS App (True) or Android (False)\n", - "5. **categories** [list[keyword]] - list of categories to which the App belongs\n", - "6. **content** [Keyword] - app description as text\n", - "7. **embedded_app** [list[float]] - text embedding of the app description. Text was embedded using the Hugging face [bge-small-en model](https://huggingface.co/BAAI/bge-small-en)\n", - "\n", - "The data was taken from [AdVec ML](https://demo.advecml.com/) and the search engine was built in collabortation with [Argmax.io](https://www.linkedin.com/company/argmax/?originalSubdomain=il).\n", - "The data can be downloaded from the following links: [vectors](http://hyperspace-datasets.s3.amazonaws.com/vectors.npy)\n", - ", [metadata](http://hyperspace-datasets.s3.amazonaws.com/context.jsonl)\n", - "\n", - "# Hybrid search with Hyperspace\n", - "This notebook combines brute-force KNN (accurate) with metadata filtering. In this scheme, Hyperspace uses the pre-filtering approach, by which the metadata is first filtered, and KNN is applied only to vectors that pass the initial filtering. With KNN, this approach optimizes the query latency without reducing its recall.\n", - "\n", - "![image.png](data:image/png;base64,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AAEQAAEQAAEQAAEQAAEQCFICMOoE6Y2XXzYHVjwRUWYLgMzZqu7cGpAX88t3zkx17mQ1VRTf98v5cVIQAAEQAAEQAAEQAAEQAAEQAAEQMCMBGHXMeFd8XCc26MhTxonfG2sf+bg29qdjg45YF1431/fYF8A3EAABEAABEAABEAABEAABEAABEAhSAjDqBOmNFy+bvXGkRhOl7YddI2JxzeuGmodUmNtBU5PPNe/LO6RcaLSrX2nBPY+Og51AAARAAARAAARAAARAAARAAARAINAIwKgTaHdU4/WcP1VjZzRRMupkprRqPOp08atJTbZjh27K9Wg6l9SLaPfGXOp64LmByaOLwE4gAAIgAAIgAAIgAAIgAAIgAAIgYFICMOqY9Mb4qlocO0fJkCP9jQ0/nix7NubaHdvTGD311d1UW9lFHe39nlQD+4AACIAACIAACIAACIAACIAACIBAQBKAUScgb6v6i7oYV2tneJEac8TtDA89dWIiXwVePhCST4+6R9VXDCVBAARAAARAAARAAARAAARAAARAAARcEoBRxyWewP+zuqzTrVHHm+DEV5ObKS2pidqaegMfJq4QBEAABEAABEAABEAABEAABEAABHxIAEYdH8I246kmJ5+TqylYJw6VmrHaqBMIgAAIgAAIgAAIgAAIgAAIgAAIBD0BGHWCvgkQDfQ/oQtnHKdhXbvcTFNTL0AIBEAABEAABEAABEAABEAABEAABEDAhARg1DHhTfFXlTizVE15J3HGqZHhCX9VA+cFARAAARAAARAAARAAARAAARAAARBQQQBGHRWQUAQEQAAEQAAEQAAEQAAEQAAEQAAEQAAEzEYARh2z3RHUBwRAAARAAARAAARAAARAAARAAARAAARUEIBRRwUkFAEBEAABEAABEAABEAABEAABEAABEAABsxGAUcdsdwT1AQEQAAEQAAEQAAEQAAEQAAEQAAEQAAEVBGDUUQEJRUAABEAABEAABEAABEAABEAABEAABEDAbARg1DHbHUF9QAAEQAAEQAAEQAAEQAAEQAAEQAAEQEAFARh1VEBCERAAARAAARAAARAAARAAARAAARAAARAwGwEYdcx2R1AfEAABEAABEAABEAABEAABEAABEAABEFBBAEYdFZBQBARAAARAAARAAARAAARAAARAAARAAATMRgBGHbPdEdQHBEAABEAABEAABEAABEAABEAABEAABFQQgFFHBSQUAQEQAAEQAAEQAAEQAAEQAAEQAAEQAAGzEYBRx2x3BPUBARAAARAAARAAARAAARAAARAAARAAARUEYNRRAQlFQAAEQAAEQAAEQAAEQAAEQAAEQAAEQMBsBGDUMdsdQX1AAARAAARAAARAAARAAARAAARAAARAQAUBGHVUQEIREAABEAABEAABEAABEAABEAABEAABEDAbARh1zHZHUB8QAAEQAAEQAAEQAAEQAAEQAAEQAAEQUEEARh0VkFAEBEAABEAABEAABEAABEAABEAABEAABMxGAEYds90R1AcEQAAEQAAEQAAEQAAEQAAEQAAEQAAEVBCAUUcFJBQBARAAARAAARAAARAAARAAARAAARAAAbMRgFHHbHcE9QEBEAABEAABEAABEAABEAABEAABEAABFQRg1FEBCUVAAARAAARAAARAAARAAARAAARAAARAwGwEYNQx2x1BfUAABEAABEAABEAABEAABEAABEAABEBABQEYdVRAQhEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQMBsBGHXMdkdQHxAAARAAARAAARAAARAAARAAARAAARBQQQBGHRWQUAQEQAAEQAAEQAAEQAAEQAAEQAAEQAAEzEYARh2z3RHUBwRAAARAAARAAARAAARAAARAAARAAARUEIBRRwUkFAEBEAABEAABEAABEAABEAABEAABEAABsxGAUcdsdwT1AQEQAAEQAAEQAAEQAAEQAAEQAAEQAAEVBGDUUQEJRUAABEAABEAABEAABEAABEAABEAABEDAbARg1DHbHUF9QAAEQAAEQAAEQAAEQAAEQAAEQAAEQEAFARh1VEBCERAAARAAARAAARAAARAAARAAARAAARAwGwEYdcx2R1AfEAABEAABEAABEAABEAABEAABEAABEFBBAEYdFZBQBARAAARAAARAAARAAARAAARAAARAAATMRgBGHbPdEdQHBEAABEAABEAABEAABEAABEAABEAABFQQ+H8bNcxRT1DjGwAAAABJRU5ErkJggg==)\n" - ], - "metadata": { - "id": "_trhSpIUhamm" - }, - "id": "_trhSpIUhamm" - }, - { - "cell_type": "markdown", - "source": [ - "# Setting up the Hyperspace environment\n", - "Working with Hyperspace requires the followin steps\n", - "\n", - "1. Install the client API\n", - "2. Create data config file\n", - "3. Connect to a server\n", - "4. Create collection\n", - "5. Ingest data\n", - "6. Run query" - ], - "metadata": { - "id": "K41CEp06-JmN" - }, - "id": "K41CEp06-JmN" - }, - { - "cell_type": "markdown", - "source": [ - "## 1. Install the client API\n", - "You can install the Hyperspace API directly from Git by executing the following command:" - ], - "metadata": { - "id": "7UVt24r6-Mft" - }, - "id": "7UVt24r6-Mft" - }, - { - "cell_type": "code", - "source": [ - "pip install git+https://github.com/hyper-space-io/hyperspace-py" - ], - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "edxBW-er-Lvi", - "outputId": "0a9be8ca-7bb7-4943-9a7d-5b8e8ed7e89e" - }, - "id": "edxBW-er-Lvi", - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "markdown", - "source": [ - "### Download dataset" - ], - "metadata": { - "collapsed": false - }, - "id": "cd585f6aa21b383a" - }, - { - "cell_type": "code", - "execution_count": null, - "outputs": [], - "source": [ - "from urllib.request import urlretrieve\n", - "import os\n", - "\n", - "def download_data(url, file_name):\n", - " \"\"\"\n", - " url (str): URL of the file to download.\n", - " file_name (str): Local path where the file will be saved.\n", - " \"\"\"\n", - " # Check if the file already exists and is not empty\n", - " if os.path.exists(file_name) and os.path.getsize(file_name) > 0:\n", - " print(f\"The file {file_name} already exists and is not empty.\")\n", - " else:\n", - " try:\n", - " # Attempt to download the file from `url` and save it locally under `file_name`\n", - " urlretrieve(url, file_name)\n", - " # Check if the file was downloaded and is not empty\n", - " if os.path.exists(file_name) and os.path.getsize(file_name) > 0:\n", - " print(f\"Successfully downloaded {file_name}\")\n", - " else:\n", - " print(\"Download failed or file is empty.\")\n", - " \n", - " except Exception as e:\n", - " print(f\"An error occurred: {e}\")\n" - ], - "metadata": { - "collapsed": false - }, - "id": "9384a45a031b2a23" - }, - { - "cell_type": "code", - "execution_count": null, - "outputs": [], - "source": [ - "metadata_url = \"http://hyperspace-datasets.s3.amazonaws.com/context.jsonl\"\n", - "vectors_url = \"http://hyperspace-datasets.s3.amazonaws.com/vectors.npy\"\n", - "download_data(metadata_url, \"./context.jsonl\")\n", - "download_data(vectors_url, \"./vectors.npy\")" - ], - "metadata": { - "collapsed": false - }, - "id": "57cc9837ffc666d9" - }, - { - "cell_type": "markdown", - "metadata": { - "id": "TCZSwM6DVeDm" - }, - "source": [ - "## 2. Connect to a server\n", - "\n", - "Once the Hyperspace API is installed, you can access database by creating a local instance of the Hyperspace client. This step requires host address, username and password, provided by Hyperspace" - ], - "id": "TCZSwM6DVeDm" - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "id": "17a978a2" - }, - "outputs": [], - "source": [ - "import hyperspace\n", - "from getpass import getpass\n", - "\n", - "username = \"USERNAME\"\n", - "host = \"HOST_URL\"\n", - "\n", - "hyperspace_client = hyperspace.HyperspaceClientApi(host=host, username=username, password=getpass())\n" - ], - "id": "17a978a2" - }, - { - "cell_type": "markdown", - "metadata": { - "id": "HXmdh3YGVfQV" - }, - "source": [ - "## 3. Create a Data Schema File\n", - "\n", - "As other search databases, Hyper-Space database requires a configuration file that outlines the data schema. Attached below is a config file that corresponds to the fields of the given dataset.\n", - "\n", - "For vector fields, we also provide the index type to be used, and the metric. . Current options for index include \"**brute_force**\", \"**hnsw**\", \"**ivf**\", and \"**bin_ivf**\" for binary vectors, and \"**IP**\" ([inner product](https://en.wikipedia.org/wiki/Inner_product_space)) as a metric for floating point vectors and \"**Hamming**\" ([hamming distance](https://en.wikipedia.org/wiki/Hamming_distance)) for binary vectors.\n", - "Here, we use \"brute_force\" (exact KNN) with inner product." - ], - "id": "HXmdh3YGVfQV" - }, - { - "cell_type": "code", - "execution_count": null, - "id": "63ea0ce9-ce9a-45b2-9747-2f0e504c3514", - "metadata": { - "id": "63ea0ce9-ce9a-45b2-9747-2f0e504c3514" - }, - "outputs": [], - "source": [ - "import json\n", - "\n", - "config = {\n", - " \"configuration\": {\n", - " \"id\": {\n", - " \"type\": \"keyword\",\n", - " \"id\": True\n", - " },\n", - " \"title\":{\n", - " \"type\":\"keyword\"\n", - " },\n", - " \"bundle_id\": {\n", - " \"type\":\"keyword\"\n", - " },\n", - " \"ios\":{\n", - " \"type\":\"boolean\"\n", - " },\n", - " \"categories\": {\n", - " \"type\":\"keyword\",\n", - " \"struct_type\":\"list\"\n", - " },\n", - " \"content\": {\n", - " \"type\":\"keyword\"\n", - " },\n", - " \"embedded_app\": {\n", - " \"type\": \"dense_vector\",\n", - " \"dim\": 384,\n", - " \"index_type\": \"brute_force\",\n", - " \"metric\": \"IP\"\n", - " }\n", - " }\n", - "}\n", - "\n", - "with open('advec_config.json', 'w') as f:\n", - " f.write(json.dumps(config, indent=2))" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "7RTDkUsr3ead" - }, - "source": [ - "## 4. Create Collection\n", - "The Hyerspace engine stroes data in Collections, where each collecction commonly hosts data of similar context, etc. Each search is then perfomed within a collection. We create a collection using the command \"**create_collection**(schema_filename, collection_name)\"." - ], - "id": "7RTDkUsr3ead" - }, - { - "cell_type": "code", - "execution_count": null, - "id": "092053ea-a4e2-4dbb-90c7-4adbfc953384", - "metadata": { - "id": "092053ea-a4e2-4dbb-90c7-4adbfc953384", - "outputId": "e21d42f9-206b-4300-a248-a784b4275d98", - "colab": { - "base_uri": "https://localhost:8080/" - } - }, - "outputs": [], - "source": [ - "collection_name = 'advec'\n", - "if collection_name not in hyperspace_client.collections_info()[\"collections\"]:\n", - " hyperspace_client.create_collection('advec_config.json', collection_name)\n", - "\n", - "hyperspace_client.collections_info()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "lUpgHD2VWFXd" - }, - "source": [ - "# 5. Ingest Data\n", - "\n", - "In the next step, we ingest the dataset in batches. The number documents in each batch can be controlled by the user, and specifically, it can be increased to reduce ingestion time.\n", - "Batches of data are added using the add_batch(batch, collection_name) command" - ], - "id": "lUpgHD2VWFXd" - }, - { - "cell_type": "code", - "source": [ - "import numpy as np\n", - "vectors_path = \"vectors.npy\"\n", - "data_file_path = \"context.jsonl\"\n", - "vecs = np.load(vectors_path)\n", - "with open(data_file_path, encoding='cp437') as metadata_file:\n", - " metadata= [json.loads(row) for row in metadata_file]\n" - ], - "metadata": { - "id": "TQsSPSqeTMXq" - }, - "id": "TQsSPSqeTMXq", - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "0904d325-495f-410d-8bc6-f84a30bac7af", - "metadata": { - "scrolled": true, - "id": "0904d325-495f-410d-8bc6-f84a30bac7af", - "outputId": "90378193-b817-404a-dfca-e4a6e6240039", - "colab": { - "base_uri": "https://localhost:8080/" - } - }, - "outputs": [], - "source": [ - "\n", - "BATCH_SIZE = 500\n", - "\n", - "batch = []\n", - "for i, (metadata_row, vec) in enumerate(zip(metadata, vecs)):\n", - " row = {key: value for key, value in metadata_row.items() if key in config[\"configuration\"].keys()}\n", - " row['embedded_app'] = np.ndarray.tolist(vec)\n", - " row[\"id\"] = str(i)\n", - " batch.append(row)\n", - "\n", - " if i % BATCH_SIZE == 0:\n", - " response = hyperspace_client.add_batch(batch, collection_name)\n", - " batch.clear()\n", - " print(i, response)\n", - "response = hyperspace_client.add_batch(batch, collection_name)\n", - "batch.clear()\n", - "print(i, response)\n", - "hyperspace_client.commit(collection_name)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8bac72a3-45c7-445e-8f00-e206608969f5", - "metadata": { - "id": "8bac72a3-45c7-445e-8f00-e206608969f5", - "outputId": "06d1ba8f-5437-40ce-ff4a-70065f0b420a", - "colab": { - "base_uri": "https://localhost:8080/" - } - }, - "outputs": [], - "source": [ - "hyperspace_client.collections_info()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "8lRgTyKwWJ84" - }, - "source": [ - "# 6. Define Logic and Run a Query\n", - "In the last step we build a Hyperspace hybrid search query. We randomly select an App from the database and search for similar applications. The overall score is defined by the weights, provided under the \"boost\" fields. These weights allow to contorl the relative weights of the classic search and vector search scores." - ], - "id": "8lRgTyKwWJ84" - }, - { - "cell_type": "code", - "execution_count": null, - "id": "5ff8391b-b679-43f7-bf79-00a14aef2981", - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "5ff8391b-b679-43f7-bf79-00a14aef2981", - "outputId": "f121c109-81d6-40cc-f9c5-3decab90c9fb" - }, - "outputs": [], - "source": [ - "input_document = hyperspace_client.get_document(collection_name, 42)\n", - "print(input_document)" - ] - }, - { - "cell_type": "markdown", - "source": [ - "## Vector Search" - ], - "metadata": { - "id": "iawRCHKM_8Sj" - }, - "id": "iawRCHKM_8Sj" - }, - { - "cell_type": "markdown", - "source": [ - "Let us first perform a vector search over the embedded description. This step does not require a score function" - ], - "metadata": { - "id": "B_IsUeKYAB5W" - }, - "id": "B_IsUeKYAB5W" - }, - { - "cell_type": "code", - "execution_count": null, - "id": "1ca689dd-b0f9-4ff4-aaea-c041b7135bb9", - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "1ca689dd-b0f9-4ff4-aaea-c041b7135bb9", - "outputId": "1873c114-b89a-4697-fd66-a4253433d475" - }, - "outputs": [], - "source": [ - "results = hyperspace_client.search({'params': input_document,\n", - " 'knn' : [{'field': 'embedded_app',\"boost\": 0},\n", - " {'field': 'query',\"boost\": 1}]},\n", - " size=10,\n", - " collection_name=collection_name)\n", - "\n", - "for i,result in enumerate(results['similarity']):\n", - " vector_api_response = hyperspace_client.get_document(document_id=result['document_id'], collection_name=collection_name)\n", - " response = f\"{i+1} - {result['document_id']} : {result['score']} --- \"\n", - " keys_str = \" - \".join([str(vector_api_response[k]) for k in [\"title\",\"bundle_id\",\"categories\"]])\n", - " print(response+keys_str)" - ] - }, - { - "cell_type": "markdown", - "id": "5f29e4ba-6e8b-43f7-97ff-3037b705dff0", - "metadata": { - "jp-MarkdownHeadingCollapsed": true, - "id": "5f29e4ba-6e8b-43f7-97ff-3037b705dff0" - }, - "source": [ - "## Classic Search\n", - "We repeat the process with classic search, using pre-defined score function, that can be downloaded from [Hyperspace git](https://github.com/hyper-space-io/QuickStart/blob/main/DataSets/AdVec/classic_score.py)" - ] - }, - { - "cell_type": "code", - "source": [ - "import inspect\n", - "\n", - "def set_score_function(func, collection_name, score_function_name='func'):\n", - " source = inspect.getsource(func)\n", - " with open('sf.py', 'w') as f:\n", - " f.write(source)\n", - " return hyperspace_client.set_function('sf.py', collection_name, score_function_name)\n", - " " - ], - "metadata": { - "id": "G6acmbv1vnNq" - }, - "id": "G6acmbv1vnNq", - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "code", - "source": [ - "def ios_score(params, doc):\n", - " if match(\"bundle_id\"):\n", - " return 0.0\n", - "\n", - " score = 0.0\n", - " if match(\"categories\"):\n", - " score += rarity_sum(\"categories\")\n", - "\n", - " if doc[\"ios\"]:\n", - " score *= 2\n", - "\n", - " return score\n", - "\n", - "print(set_score_function(ios_score, collection_name, score_function_name=\"ios_score\"))" - ], - "metadata": { - "id": "g3PLGAF_t2eH" - }, - "id": "g3PLGAF_t2eH", - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "f5fa75ff-6559-462e-b5fb-60f8cfb268ce", - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "f5fa75ff-6559-462e-b5fb-60f8cfb268ce", - "outputId": "ee7a15b5-cd56-4839-fa77-13b0f02d7855" - }, - "outputs": [], - "source": [ - "query_with_knn = {\n", - " 'params': input_document,\n", - " 'knn' : [{'field': 'embedded_app',\"boost\": 0},\n", - " {'field': 'query',\"boost\": 1}]\n", - "}\n", - "\n", - "results = hyperspace_client.search(query_with_knn,\n", - " size=10,\n", - " function_name=\"ios_score\",\n", - " collection_name=collection_name)\n", - "\n", - "for i,result in enumerate(results['similarity']):\n", - " vector_api_response = hyperspace_client.get_document(document_id=result['document_id'], collection_name=collection_name)\n", - " response = f\"{i+1} - {result['document_id']} : {result['score']} --- \"\n", - " keys_str = \" - \".join([str(vector_api_response[k]) for k in [\"title\",\"bundle_id\",\"categories\"]])\n", - " print(response+keys_str)" - ] - }, - { - "cell_type": "markdown", - "id": "31b4bd2a-3fb0-432d-9f29-e556fd0cd870", - "metadata": { - "id": "31b4bd2a-3fb0-432d-9f29-e556fd0cd870" - }, - "source": [ - "## Embed User Query and Search\n", - "Let us now create a free text query, embed it using the [bge-small-en model](https://huggingface.co/BAAI/bge-small-en) and retrieve relevant apps" - ] - }, - { - "cell_type": "code", - "source": [ - "try:\n", - " import sentence_transformers\n", - "except ImportError:\n", - " !pip install sentence_transformers" - ], - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "Xxq39DC5CQ1p", - "outputId": "7c90d148-3a00-4ddb-be12-02d926002f06" - }, - "id": "Xxq39DC5CQ1p", - "execution_count": null, - "outputs": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "dfd1e3b2-3be5-42d2-ab8f-6aa68e708e75", - "metadata": { - "id": "dfd1e3b2-3be5-42d2-ab8f-6aa68e708e75", - "outputId": "af26df99-647e-4b12-e319-fa0f61e30824", - "colab": { - "base_uri": "https://localhost:8080/", - "height": 433, - "referenced_widgets": [ - "edab0fcca6734d49bf178ecd28e84aa2", - "dde169eb76a14027a51f72beec02b7a8", - "a0459f9566a041c78d1d18a67eeefd46", - "ba9de2869272485b89537cc762b4d398", - "e26f297fcfd74e81b06241aac3b49023", - "7970346e5d7547bd8e5e02695ccc5b49", - "68c216897f5d403bb00dd52dc32c6019", - "e9c047d2947e496c93974f5f49a5c172", - "f355a9ec295f4c078163992c73662d28", - "7b6dd89030ff43d08880d3ad3613a7c0", - "ed06c1df20ee40fb98f1cc3b5fcc827d", - "841dfdd7fcef43dab3055b13300c3652", - "37794a9b345c4456bc8faf36942af2dd", - "bfc09d93ac2040b7ae5e46830c00d58c", - "94fc6060c95544549b7b59d1df345819", - "cf26414873dc439e9916b5ff228c4bf4", - "ded50ec8861d4d3998547189e1beeab2", - "5361ce35bc6343039fde123a4af9b58d", - "f96975b7c17243778855154d885152f9", - "824ddea4eaea482db26b873e582c8a03", - "aefab71bec87427f82e4dd0285f6dda4", - "8ae88cb01a2c4bdcb45f0a92acb90442", - "ef834f09ab1e4046843ed1733bcbeba9", - "2ebc9188a308434bb256e91e80dc3e2e", - "c696d208a7554ba1a5971e047687721a", - "c157baf6a71c4ca093b638f6e3448d63", - "d5f2c1fc46cb402596d57420efa8ca10", - "175e7704c0b74f9cb122484a73f38401", - "b56f7bf3439e415792086133ab517a26", - "4740498b4bb44f399e67163e4b2728d2", - "93b82ea6ee024af794d3948503f2ac15", - "c72d2cb4b307474db663fc4bdaa9ff9c", - "cc6f8809c55545c39dbf95f94a8c5ac7", - "0fe94447ec1742cbbe755e10e96659fc", - "268ce921f6994617a0320e3afcd35c77", - "5bd260d90fcd449590f659554344d002", - "b205d9cfe8334bb791d16477cf9005d8", - "867f79f4e5ff4067a487456eff17e795", - "02cbe0caf1c94c0eac7130cfd523da03", - "30f9a3ea9c03491091c7eec441219ef6", - "56ab87077873497b9730cd2306757d84", - "fca4944712734053b1f12479895b8a5f", - "4a44360888194d8e95eb2c0a74c97dbf", - "bf692c66cdb3420b99e9699ca70af6a5", - "4bcb60b1268d4e86b00d12c979591ddb", - "1443b51e5f034419a6c645e47e661449", - "bdb2ed9d6a2941bc804a20d1b9246cc8", - "fa44afce87da4a94800d014e4651e19c", - "896cfd5cf3c64be6862c12101b6868d4", - "103082c03c2a4078ad7f18cc75bf8838", - "225b97737ed5415aafb7de51b70c650c", - "c302387a15b44ca195e17d3a814660e5", - "f2fec96988c044d5936726bfad7a8de6", - "bf3aafe4b3194d97bf7529743de0c388", - "de6e42cf341b467d8473f5ca47605a06", - "f62091b77fee4c139a9e74df7416d17b", - "6f12628603954490be891844c2ad525a", - "8bd3f746083244cf860e7e339998a158", - "2c46df6c36ec47ac8b4b68367ff9a842", - "96571e4398b64ae4a440838e3b699711", - "0190d9216db747d2b6c4cf6f7e3deed8", - "be90bb1519884ef6a42ba9ff66706292", - "f2c7b0c095a148918c3d7941e943a584", - "06593db36a3f4d7f82c682001f3b7421", - "7ec550f71fbb4fa98a019c6a19656ad4", - "3a8d7229525e4ba7bc376ac82df5d2d1", - "8c8cd5238b9d49a3b8396fe6ada21a40", - "fb4093faaa6349fda9bddb7647d3d846", - "63f117175e5d4342b9f7d1f443874070", - "371bc87227b94fe4a9cf7726e20593c6", - "ecf3daf027734c99a94e91f8990c6955", - "a84dd759931842a1ade720f7358caf3a", - "1adff9ab83bd43c69909e2fe3d31ef9a", - "c4daa6cde32f473d8245827d7dfc2c7c", - "f48249b28c0846b5902d3e5805454df0", - "0c4cf500201c4105b656d5890324fa61", - "40ced2dae396443f86faf07bbd923a90", - "7cd8d8954a0140e2ac192b762669ef5c", - "f5a823df899a4a2e9e68396a0229f259", - "c13d059e56a5455ea6057dfcc4003524", - "e219e9aa16014593abbf1843125130e0", - "8222bd8a6e684f2abc9a4a033ef4c4d4", - "8c4d6a396c00443db3d17afb3b55ff35", - "42eef07ae276418fa02d6885401d5d5a", - "659df989d3c6491bacef23aca65a8e08", - "5740a110796e42ae8ad3230e7876889a", - "5fc767a015fa468ea30d2eb7b24b5a75", - "ea319de9c8254b59ae0d0e9209218e36", - "9bff5ae41d714e31b8472dfb163ff0d4", - "e1df1c91733c4108adee77846d11278e", - "ebe50f5013774c9bbecc704dc9e6b3a1", - "3951e3f34008406a86d69473e8beb32f", - "11ef22c9716d439a96f1896ef05a4470", - "129ab1a2f2d946ca9c70723ce46d0f5b", - "49ea66c4778343608641e04a0cb19637", - "cb56178d93ab43bd9143eb01da0eef1f", - "30d5690e1b014dccba847f2f68abba4f", - "70cfc3b2ddc146dd8bfb595c199ffe8a", - "6ac778f22cdd4e49b78d455e37491b6c", - "95d4316e8e5a4f92aae48d22824df3b9", - "ba49dc57a28c4f319b49211b0669b95a", - "5af787f313364d54a95121512f030510", - "e81b9e3dfd4b49a49a5c42feb5b65f04", - "41ce1cfa2e054d4daf95177682bbcf34", - "dc89470ee36847a78880c997a0b9f63e", - "467c02d8f5f147908729d80de1f51f70", - "514eed6d562344f7866867ff4550dbcb", - "a4a139ce4cb94f91a78839a406e67f31", - "d9b549be0e594b6a8105d77221ca40f0", - "d9306c2d52724a31b8d29a90c123f508", - "a2c457a03fb04ee9b155e65a082e58e5", - "a624d6afa6a2418592026f037c48e253", - "1ee5fb825f114993b575795584f98301", - "b0a2a43e44e047349248b9b94a0f58d0", - "113da0edbfb14ef0b1844020dc814c33", - "34b6b2cf879e4a87a66af87888ccd0b9", - "3c40e4d223b145bcb9ef881d8d5fb268", - "cf9182ed0fbd4e5bac5b5b0badfdc938", - "a6b694a9ea964133bf085967984f1bf7", - "99971a53f7194457bbc06e6458b340d6", - "22ddbb4eccf04e50b77e6f64df8f6cee", - "d661e8d0f34241f98be969a3d0853f6e", - "7dbd603ea2e741cc808ba5f0798f70fb", - "42ef47c7184e45649a3f2e0434e9ecc9", - "3d1b70ed00d74d288198320225ef8bd4", - "7ae4b92b9e144702977befd7c0b45f91", - "2bf03c2eeccc4572b8903c92cc8f30d1", - "80b3dec35c2f484fb05ae76518a44428", - "043077e63bed45329811efc1e07aa35c", - "af04eee5a56840b384a1c5dbaa679cab", - "8d25496b978f4df38ca2e5781b5a5472", - "ae2d2c1526fc476b8ddca3b71f520cd9", - "e16139aa130d4b90af89e7b67c5a01ae", - "e86bf22fa4e943f8bc448a284385c531", - "e9166ca449f04fb783e06baa9f8413b1", - "d08e4837a5314677808b8dcb4d67162d", - "c0bd65caef214882a25faa0ae5615c08", - "215d0f33bd8d4692a375e185d0fb4ece", - "7dc550ffd0fe4448aff53c73ed5bdb73", - "bac733d0ec2344f7ab2c1a68dc6210ba", - "f2dda96c9ec84ef4a0880db78ae26206", - "bc13d9867f384020a5ffae6ee51a6c44", - "162b9b0e624445d286fff0e805a7c573" - ] - } - }, - "outputs": [], - "source": [ - "from sentence_transformers import SentenceTransformer\n", - "embbeding_model = SentenceTransformer('BAAI/bge-small-en')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "outputs": [], - "source": [ - "sim_sentence = \"\"\"a great app for gaming with my friends \"\"\"\n", - "sim_embedding = embbeding_model.encode([sim_sentence], normalize_embeddings=True)[0]\n", - "\n", - "results = hyperspace_client.search({'params': {'embedded_app': sim_embedding.tolist()},\n", - " 'knn' : [{'field': 'embedded_app',\"boost\": 0},\n", - " {'field': 'query',\"boost\": 1}]},\n", - " size=10,\n", - " collection_name=collection_name)\n", - "\n", - "for i,result in enumerate(results['similarity']):\n", - " vector_api_response = hyperspace_client.get_document(document_id=result['document_id'], collection_name=collection_name)\n", - " response = f\"{i+1} - {result['document_id']} : {result['score']} --- \"\n", - " keys_str = \" - \".join([str(vector_api_response[k]) for k in [\"title\",\"bundle_id\",\"categories\"]])\n", - " print(response+keys_str)" - ], - "metadata": { - "collapsed": false - }, - "id": "da81d11b390d1231" - }, - { - "cell_type": "markdown", - "id": "1d96433e-80fe-47b2-befb-9197e5ec75cf", - "metadata": { - "id": "1d96433e-80fe-47b2-befb-9197e5ec75cf" - }, - "source": [ - "## Hybrid Search\n", - "In the last step, we perform a hybrid search that combines KNN using the embedded app description with a classic score function." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b07eaf8c-2b68-4d9a-8d15-d5e1c24b2aa7", - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 36 - }, - "id": "b07eaf8c-2b68-4d9a-8d15-d5e1c24b2aa7", - "outputId": "95f6925c-bccc-48e9-ee27-cba9ddf84aa6" - }, - "outputs": [], - "source": [ - "input_document = hyperspace_client.get_document(collection_name, 7960)\n", - "input_document['title'] + \"\\n\" + str(input_document['categories'])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "5fff6916-3310-4653-98e9-6ec9dc68c1d1", - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "5fff6916-3310-4653-98e9-6ec9dc68c1d1", - "outputId": "58ffce97-acc2-4320-ca23-fa9c36f2b97a" - }, - "outputs": [], - "source": [ - "results = hyperspace_client.search({'params': input_document},\n", - " size=10,\n", - " function_name=\"ios_score\",\n", - " collection_name=collection_name)\n", - "\n", - "for i,result in enumerate(results['similarity']):\n", - " vector_api_response = hyperspace_client.get_document(document_id=result['document_id'], collection_name=collection_name)\n", - " response = f\"{i+1} - {result['document_id']} : {result['score']} --- \"\n", - " keys_str = \" - \".join([str(vector_api_response[k]) for k in [\"title\",\"bundle_id\",\"categories\"]])\n", - " print(response+keys_str)" - ] - }, - { - "cell_type": "markdown", - "source": [ - "This notebook demonstrated the use of Hyper search for classic, vector and hybrid search. For more info, visit us at [Hyper-space.io](https://www.hyper-space.io/)" - ], - "metadata": { - "id": "Sj6caGDZEHBz" - }, - "id": "Sj6caGDZEHBz" - } - ], - "metadata": { - "kernelspec": { - "name": "python3", - "language": "python", - "display_name": "Python 3 (ipykernel)" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.11" - }, - "colab": { - "provenance": [] - }, - "widgets": { - "application/vnd.jupyter.widget-state+json": { - "edab0fcca6734d49bf178ecd28e84aa2": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HBoxModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HBoxModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HBoxView", - "box_style": "", - "children": [ - "IPY_MODEL_dde169eb76a14027a51f72beec02b7a8", - "IPY_MODEL_a0459f9566a041c78d1d18a67eeefd46", - "IPY_MODEL_ba9de2869272485b89537cc762b4d398" + "cells": [ + { + "cell_type": "markdown", + "source": [ + "![63f78014766fd30436c18a79_Hyperspace - navbar logo.png](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMoAAAAYCAYAAAC7k2KMAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAApoSURBVHgB7VtdaBzXFT737q6xXUimTfPiUHtNXdKmpZHBeTHUlqBN6Uts4R/8pvUfhL7oxwkE+uDVQyEQ25JeSsBKtHprYxvZfikNBq9TmpcEtKatgxu3HbXEeXBNNzI4RjtzT865Mzs7MzszO6NVYpHMB2Jn5v7/nHO+c+4VQI4cOXLkyJEjR46vCCLq4/FTF/cjKgMyYMOGUv3N14dNyJHja4guQTk2cem0AKxCZgiztEEOZRGW4xOX5jrF8cpbZw9eDuc58cqFQVRypP1uKzlZmw62QYI9DSiebL+/de7A0cj2SAFQvn3td1mwZ86/cbiRVFcYCHBzwwZ5OWmc4XaSYD8hx2vV4ab/28mxhQEl1WhcGSGhiYg3ouYrCi+/tlC2LDVKym8QURhCILUnqA4xT2OJVXCVsQWjINVUUj+U0vORSklyP1or6rT/W9T4kzBWXTCWl1WFxrAXEQZ0PwSYNJYrX+a6FP2JJCSV1QkJA3kSrleqCzvTDxwr7SeBuEQ/XQuvFJaFL1+xaM3TjxmoBUWD8nhCd2LiwtLsuUNVfx53kaa4n7o9gY2wkDh1wT7h5okCa5bWij114pVL07NnDoxH5kEcIIGqQApsbMIk/QTmC4uWAUpU4sqg0j9jpGhMamw8SWBY8VF/q27PHM2Iwn3DQZoTk/JMvn3uQC2iuOFfo6h+OPPBdVyYefvcoWlIgLWi9ofrKy5bN+knsVwbrDQfLNsLgvuFPi2PUHbHMkrCEDsf/ayLDFU02H5+6Zc/gpdefA5mzx6A3bu2dVX06q/3wOu/+RU8+/2nYfcL7XQsUwOZKNtaQC+ygHr7HUGMksAG+rGyokbAJwCWXRyGPoAKx0hYpuCxgsaDsHDy1XcGolLTKT6tiOa0tu2jHySCU7yRE3MBdFlJFOk0vHYHlLgOkLS/nPno1Y/VoBiXwEJy9d1bcPuf92ILc/rRI7vg/Q9MeNyQdmFcSXvRfTUKDzRl0BTMsSZtrQqsimbC9C0KbHUU4kznS8EQerEdgWNhIYGc7GFBmwhqPC7xkVHoaX0RkLQbml6/UA7SGDw6qixRpZ+ujU599dEcYQqpjlpWsVECKNtSDTjptMkFNCy7UIeeEDUE+0ZcP8iyc3v1qJIOhY6w1AiDL48tlN9MWA8fG/B1BWZofbTlQJusr78fSjK72A7JyLQusYJy9U8fkVV5Dq79+WO4//+HXel/+WBJCxNj8e+fwuPG+enhxvHxizM0YY7WQqzQ4szPnjlUdya5DWHatqymq1U0iU7U/F+ozoar2TRKy0wnoJZQCdVxOCm9J6SE+uyZw3Xfpxpp2G28yZxuiufDZdi/IKZd9uoAmDxPc+G+MuVsUJ56sWDPkZAMk+LoKbBUx43zwbHUaM7B26Tt/kQAkf3M9kYXJj2zZdDWwZJWhX6qcWWJDQz66TA9T86eDVDrOtFtk5iEqxjQYCsbRa19yLQuMjZFILzxu/dg4MfPwPeeCfq2mzeW4Bc/2wGNv92FP1y5Cd/99mZYD7CxUAUfr2QNx/SDnjxtS0s1mWZTxIE0sgnrAESTb/hee9JdJdRomKKxVZ09e3Con/kQQjRSZfQJEa8Blax33sVochvoSxdm2P9kWKo4LcniCYlDtips7yEkmZFIveBFIFq1BFu3GNoP4WcWkiP7n4dFEpJndzwNP9+zg6zPLf3eDxDkCGnJvd0JohwwuQngBSfBGPcce1ocevY2hxRw+fzZSKc1NaRUI4HuSWX2KGLQuK5HJZDTOQSrgEtFPA3NUZ9wHp4LarfubVAUA8oWi24AoEFK5EavKFEvcATqwXIgOhcpcE60qWMRlJJ1CsqYZJnbCsxgajbbsXhBuNEtDYqORmVxhT0y2hmDTOuSQL1ukaX4Fjz1Hcda/JCcdsbWLY51YSf+/v2HcO2Tj8mP+R/0D+2IlSO+QxawY08TMOLTYJ62bZEfAxnA4Uf/ZKITXSl3cpB2O3Ow3qMaI4mSpOuImKJ+uJsQDfK3yuAbl0IxE1XM9dtCDrAzzzSO/Ry9Y2EqlQpH0wgMkmbXc+uCIlADwbpFTPRN+IW67vqH5vEJPSZdngSXhaYeLkn0sExcoVMTdny1PpFpXWRiKnl7Dx+1nDgc/X3+0HnetKnk/G4uwXqEbRe6NAvz2jQOfAjOZLp/NORysFLMJHirhT4v8PohApuTN15MaFf7bURDdlI5DqlH0yuqkwRmka0UZOqH3mR+ITH5jCtcRteLHepLQj3va9v/PBKOVK4nxFMvcuQfft6Ca+/dgc2bivCfTz4jp/0u3P7XPR3pun3nnrYqO/f8QOdLio6lAk2aKGAt/JkOtGiDitOQASwQ5GTO+yMhzGFhjcCbk4RkMpYqBNEk3txXKDq2H4Dj5NQmjstVDhV+ZnpDtGegALBXgT4KaG9Mw1pJdqgT0OS1s1FWo3wdxxH39VnIJ49NvFPhZ/JN6ETHYwxGVGBEr+XERe+dwsllWBtkWpfEqBdv/iP7fkr+x6fw/odL+jsLxdzvP9TnKOyXXH33I4+e9QNy2MyojUeTWo65aZMJq3FYOTxMTXtWQ1jFJtlUM2NdzZQCldARGC7ZhUaLIlQBuiChp8PKGr1Nq9x+8N80U5qCE053qQ8M9KqL2p4hZebRK54PtlpJRbQj7mfPaE8Lj8gEabUSyIqt1l0J+HwtrfzGwlm039ay53rdNvAh07okRr1YGP5797Mua8HCwuHh3bvK2rr8485a+CjrEUJPZvuPN0U/EaJV90Jgk88ZwpTSPbeIBQU2pphWRR1IaksTEQRIgqQIV3g+kvI7tCuFALZBwhBFv8IRPr5tEM6jD5Sd4M0cjfnfa33omHzgSFaFQ8NPRYR/d/5kiz5w5Hy7X9iqLUuOSBgU46/GJVpPFKfTXvnhzU11TXrnBbQxjk1cGIu6OuLe2dOaV9ly8fipSzUh1HyRwtt2qWWQ0NHG6kQEUcjLsMZotVTwwBPUfFQ+9FHr4rLFfa7605k2F2TnZgXfNqDx0HM7Akan++i/GpMuyJJlXRKpF1sVFojFv0aHfllImIatBfX6GsPABB9rY1NTjdRWqnvTiNOkubvCvJKJjJ+y0kYiC1RpSYog2RJEgPYIMy4g0BeCUaV61PkHQx8LuHnJB+k6ImArfnJsYTgQwXMEo9JuyIcmBRXShN0zrUuAeqHv8IitBQvLiVOXPP/EDz6MfO23f9S0jM9XHAjzkQFfOTX5JoE3DV9F8X0ymJuH8/GmpI1w1DkFjwcHJlJurExwqI/vNF1GWxOdhqJzNkICE0WbvAhe4ng48lYYWkV0sycCFoW0yjSZo0RJi4cODw5luTIt9B0mFzL6jlBBlRooLS9f6pNxCZdXE3MnXUtnEs7/4iiUJqwGNBah0p3/RCmWYrFoUhQqdszsH5ygg9V2P1mhMrcPz71rJWr6npUt9gsJ+qoLbcymQlxix7yHQ9sMrFFBZTrt9pdNasdSslaUVs/QsCsA2/VlT8RBGs823Q7S3gO4SRG9WqIP2ce6rNk/bilVqn8ZkpwjR44cOXLkyJEjR45vFL4Aeoh6Zli/bmMAAAAASUVORK5CYII=)\n", + "\n", + "# Application Semantic Search Using Hyperspace\n", + "\n", + "This notebook demonstrates the use of Hyperspace to perform hybrid search over an App database.\n", + "In addition to hybrid search, the notebook includes examples for classic search and vector search, based on embedding of a user provided query.\n", + "\n", + "The relevent score functions can be downloaded from [Hyperspace git](https://github.com/hyper-space-io/QuickStart/blob/main/DataSets/AdVec/classic_score.py).\n", + "For more info, see the [Hyperspace documentation](https://docs.hyper-space.io/hyperspace-docs/getting-started/overview).\n", + "\n", + "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/hyper-space-io/QuickStart/blob/master/DataSets/AdVec/advec_demo.ipynb)\n", + "# The Dataset\n", + "![AdVec_logo.PNG](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAR0AAAAvCAYAAADerx5pAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAv5SURBVHhe7Z2LUxXXHcf7X3Wm05mm1dSokWJ8QQCxTWzTccaOM22aapPU6Fi1Rkli1OALRVFBBQFFMEZQ8ImAgigg75e85f3m1/3uvQd+LOfuveHuvQL+fjOfAXbP2T17Ht/z+52z9/KLDVFZJAiCECxEdARBCCoiOoIgBBURHUEQgoqIjiAIQUVERxCEoCKiIwhCUBHREQQhqIjoCIIQVER0BEEIKiI6giAElaCKTlT4VVq7MonWR1zXnhcEYeETFNGJjsyi8NXJFLLkMH0ceYyWLTpMYasvmcd16QVBWLgEXHTg1az4/XEKXfINXUt9TBVljZR5rZBWrzhIK5efpuioTG0+QRAWJgEVnciwdFr86/30+aeJ1NbSQ2Nj4wQbHx+nqsoW2rzxFL3zyz1GujRtfkEQFh4BEZ2oiGu0KuQMLf3Nbjp/JpfGTbGZMAVnyiZowhCfROP8+4v305rQc0a4lWHkF89HEBYyjopOdOR1WvdBEq0JOU7/2pJATQ0dhrZYxcZixvniohr6dHM8fbD8KIWtvuxoyLXnv/nU2TnkvtUE/XSzXptOR052g5mPGx5naHDM8NS6KfZIsTaf4sihp9TXN+LO5/neNdXdZhpYQ0MvfbLxpxlp+HPYWWND34y8VhIvlFNr64AxGbjaZnx8grq6hijnVgNt+dttbR5/sNZjTU2P9hlBUWGbO5XLnpV0aNOBKymVNDrq8p59ee7ZgmtbDXXW2ztCDx+8oh3bH2jzCXocEx14KaFL4+jP0ScoKeEe9fYMuAVnpoczzZDGYKB/iE4dy6aNUXEUsvQkbYh0RniuplUbYd3UPe06vBWd6HBDh8dA1eVVcEHB79bzMfsLqbt72DxvJ0xOiA6eG4MaA8aTNTb20e5dj7T5Z4u1HiHEEGRrOgze9rZBdyqXzVXR4Yb2O370mTavMBPHRAfrMps+OkUlT2rNwTNTbMhc0+nq7HOfn2ljo2OG11NLIYu+pugIhFr6e/0c+KCHwUs5Hfdcm9YKHyxNTX2Ul9tED+4306vmflMrYSMj45R2pUqbH2Rcq5n0KNA5ITL8PBdFT4MRcNHBPR/nt5jlsZKe6rksP96omxQclAl1gzylpR00ODhqHofZDfTZYBUd1N3tnJlizUVE2VwSHdQZyoM6KypsnfRiYZ0dg7T/fwXa/MJ0HBOdiHVXaPvWyzQ4gFnbPSKZjY2MUkJcLqUnP6aYvanudDNt1BCeNe9/48i7PDy8QYdRYgfh0KW3wgcL7/zwGO7fa568HmZnTy42OmL3a9ezogwQIX4e11Wm84QUXHQgEN5COyvci0C57+Y1TTt/Nv4FDQ2NmeftxG82qHrEfZUANxsi/tk/cqelK3vRaZ7jNpdEB/fCPdVx1Cn3guBF8nw6Thx7RvV1vZP1gJ/4G8d16RW8DLd+qqeGeuMaxgSCLvja6F/nzpbRD4eLqdmYENVxtGOqzYSoQH/OzKgxr+Pu0ubk/KSoLSCho3OiE3aFdmxL1ooJOtu9vHLa9Z8Uqq5qpU0fx1LC6dvmcauhUtes+NYR0bl/F8Lgui46rxIgO5HgeBIdwEXA2hmt8MHEr8OFQCdIHH9FJ/F8OQ0PuwaozuNCx4M3B8Pz+NJZfYXXo3oGq8fJxbnLSIMywOay6ABeBjwb2omf5yRffjnNo+SG4xeTKrT5gCoD+rNu3GDCGOifeW1vnj3aHXWsuaRp6J9Oe3COejqm6Awy0ZkYp/6+AXpR2kBbPokzZvI2yrz61OhcfbTt7wlmKDUyjIqaemI0oBOig1kUsykMDYKZHOs5MF3n0WEnOqCivMt91t574iEU75jThMAYcHaN66/oILRSnTWQA1QHr8fip+3mQIDxOlNhKOrpyZO2yYE810WHr8mhn8Wf1g9wTDBYvIfhOcvLuigluZLKjT6kQl6d96dQZYD19ozQnduNZpjHhUaF3dm3GkyvRZmvfRP9ChM12gLCr8yuDWaDo6LzlenpTMW5kM8XpfV068cSaqzvoDvZzykuNpueFddR4aMqupryiKorW5DQld4wp0QnKbHCbARYW9sAbf/yvrlIqwYevA9dPo430cExZXYNwwUDIgOxwfGCx63mMZi38vBreDK7gcef5U2KTu6dxsnJQLUL0qi1Nzxj1vXaeSM6vF105xW8rC8rXpseBo5zDxMC4imsVWWwesS8Dz562DJ53FvfVah6x7jgmxjwjtTkoPOM/cHR8OqrbSnTRMeILKmy4hVlpBfQ2OgoNdS10/W0Ampv7TZm9n4qflJHRQXVZkplaBgnRIdvvWJw49ix2BIaGHDNDL6sWzglOsBaHsxoLa/6zb8x02DG0eVTzBXR4YOHG66vSw/4vTHrKvHHpIDJga+9oZ64V2ZXr/NJdPDc3swuv6cy8D7I28Bb3wW7dj4yF8BhEBi+A8f7J58oncDhNZ3pojMyYij3wSwqzK+kmL1pVFmOip+g1pYuij+ZY3o8O79Iot7eqW1SVKq/osPXB3iFYVbBezAwq7Lr8NZwvoZXgHteaMyEs2WTMwk6LTqvLp+Cd27kS7700gyxOAe+9hyeORVe8YHOzVfRQT1aRQY7WSiaaitfBgzgZXlTouNreMXFwZPprq8IhOjwPqUL2e2e2x8CKjod7b204/NLdPH8Pdr00Q90KCbTPH7yaDYd2JNK8SdyaO/OFCotmaogPKC/oqPWB7yZXQwN7BrO1xlOgTAC4QQMolFc3G4ONJgvux7eOog3pq0fadxlPrPheTwtJG/9LM8UDS52QIVJOnT1qNz6np5h6nDPtrg/yjGfRIeXwW7y4KE0XlHQpbEjEKKzID2dzo4+eni3ki6eu2v83kNHD90wj589lUvVla303BCb+tp2KnveZB6HoVL9ER14M2rB2JvZzUzAU8PhHr5umXNUx1OzOkyFGLr0HH9FZ9pO2fiE6fnw83zLHCEoQlF+3h909agWMFEXqEf8xCKmp/Q63rTooE7VOZjd5MEnQoj+dzFFk+cg5Pn5LbYbCYEQHTC/13QmF5KnVs3x+/n4XENssuj7mAy6c6vUODphvkB4KOY63cx8SilJDwxBcoU8MH9Fh7vuuBbeNVAvzilaW1weB8yuo/CGm+3LgRwInBrYyvhiqh1cdHDP2bwciDDGl5cDsaOiFjqdQDcAeAgM40I3G9HBbou1LgDeafFlQrBDDXjUGcqD6/7clwPRfsqjg2EgY5BD/JUHXFfb49HzDpTozP/dq60z39Pp6R6gnJsllJx4j+7nlVFuTindzXlOmemFlGf8HDa3zKcMlbrWj5cD+bs5yl23plELmTA7l5g3nM5QVm8fg+CgLGrnRpm3tSAFFx07Q+fU5QcQEh7W6QyCajd4ZoOnAQDBV8Y/njIb0fFks/EKrXBvRmcQEF8+BoEQRfcuDQyTQWGBa8NDR6BEB3WO8576xJx/T+fLf16i/n5jYFifwPgbX2dRX9dOxYaXU1+Dz/8YnUWTDiK0alnMrEWnxe3F4NLKXbfCF//sdo50ooPrYlbGexbcRfYVLopwX339SIYTogPQyeANvakPfPIBoBbXMQHwcG8+iA7qDJ4avB6ER7p8OvbtfWxumQ8PuzxeXAeeTioTEh2BEh2APjEv30he/+E1WvpODO3enmxUzPQQYspc4uPJerr7aee/L9OiX+2TL/cShAWKY6ID1n+YQUt++z2Fh35HBflVrreNlXR6solxMyQryq+h0Pf20fJ3Yynaj50rQRDmNo6KDvijwdrQC7Ti3W/pzIk7VF3V4vZurOKDHQu8PNhMh2JuGF7SAVq38gJtkO9NFoQFjeOi4yKTIsLSaNniI7T5L2foRsZT82srJr0ew7vpNUKpjNRC+uuf4ugP7x2nyHD5ylJBeBsIkOi4wDcJrjG8nrDQWNr1xWVqqMXOyTi1NHeZLw2uCz1mnpdwShDeHgIqOgD/ZiYy7CqtDjlNEasO0u7tKbRq2X7zO5SjwtO1eQRBWLgEXHQ44WtTaOnvDhtiI6GUILytBFV0BEEQRHQEQQgqIjqCIAQVER1BEIKKiI4gCEFFREcQhKAioiMIQlAR0REEIaiI6AiCEFREdARBCCJZ9H+Uj8wjkwQjBwAAAABJRU5ErkJggg==)\n", + "\n", + "The dataset includes 89330 documents with the following fields:\n", + "1. **id** [float] - unique identifier per application\n", + "2. **title** [Keyword] - Application name\n", + "3. **bundle_id** [keyword] - identifier of the App bundle, if such exists\n", + "4. **ios** [boolean] - Is the App an IOS App (True) or Android (False)\n", + "5. **categories** [list[keyword]] - list of categories to which the App belongs\n", + "6. **content** [Keyword] - app description as text\n", + "7. **embedded_app** [list[float]] - text embedding of the app description. Text was embedded using the Hugging face [bge-small-en model](https://huggingface.co/BAAI/bge-small-en)\n", + "\n", + "The data was taken from [AdVec ML](https://demo.advecml.com/) and the search engine was built in collabortation with [Argmax.io](https://www.linkedin.com/company/argmax/?originalSubdomain=il).\n", + "The data can be downloaded from the following links: [vectors](http://hyperspace-datasets.s3.amazonaws.com/vectors.npy)\n", + ", [metadata](http://hyperspace-datasets.s3.amazonaws.com/context.jsonl)\n", + "\n", + "# Hybrid search with Hyperspace\n", + "This notebook combines brute-force KNN (accurate) with metadata filtering. In this scheme, Hyperspace uses the pre-filtering approach, by which the metadata is first filtered, and KNN is applied only to vectors that pass the initial filtering. With KNN, this approach optimizes the query latency without reducing its recall.\n", + "\n", + "![image.png](data:image/png;base64,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AAEQAAEQAAEQAAEQAAEQCFICMOoE6Y2XXzYHVjwRUWYLgMzZqu7cGpAX88t3zkx17mQ1VRTf98v5cVIQAAEQAAEQAAEQAAEQAAEQAAEQMCMBGHXMeFd8XCc26MhTxonfG2sf+bg29qdjg45YF1431/fYF8A3EAABEAABEAABEAABEAABEAABEAhSAjDqBOmNFy+bvXGkRhOl7YddI2JxzeuGmodUmNtBU5PPNe/LO6RcaLSrX2nBPY+Og51AAARAAARAAARAAARAAARAAARAINAIwKgTaHdU4/WcP1VjZzRRMupkprRqPOp08atJTbZjh27K9Wg6l9SLaPfGXOp64LmByaOLwE4gAAIgAAIgAAIgAAIgAAIgAAIgYFICMOqY9Mb4qlocO0fJkCP9jQ0/nix7NubaHdvTGD311d1UW9lFHe39nlQD+4AACIAACIAACIAACIAACIAACIBAQBKAUScgb6v6i7oYV2tneJEac8TtDA89dWIiXwVePhCST4+6R9VXDCVBAARAAARAAARAAARAAARAAARAAARcEoBRxyWewP+zuqzTrVHHm+DEV5ObKS2pidqaegMfJq4QBEAABEAABEAABEAABEAABEAABHxIAEYdH8I246kmJ5+TqylYJw6VmrHaqBMIgAAIgAAIgAAIgAAIgAAIgAAIBD0BGHWCvgkQDfQ/oQtnHKdhXbvcTFNTL0AIBEAABEAABEAABEAABEAABEAABEDAhARg1DHhTfFXlTizVE15J3HGqZHhCX9VA+cFARAAARAAARAAARAAARAAARAAARBQQQBGHRWQUAQEQAAEQAAEQAAEQAAEQAAEQAAEQAAEzEYARh2z3RHUBwRAAARAAARAAARAAARAAARAAARAAARUEIBRRwUkFAEBEAABEAABEAABEAABEAABEAABEAABsxGAUcdsdwT1AQEQAAEQAAEQAAEQAAEQAAEQAAEQAAEVBGDUUQEJRUAABEAABEAABEAABEAABEAABEAABEDAbARg1DHbHUF9QAAEQAAEQAAEQAAEQAAEQAAEQAAEQEAFARh1VEBCERAAARAAARAAARAAARAAARAAARAAARAwGwEYdcx2R1AfEAABEAABEAABEAABEAABEAABEAABEFBBAEYdFZBQBARAAARAAARAAARAAARAAARAAARAAATMRgBGHbPdEdQHBEAABEAABEAABEAABEAABEAABEAABFQQgFFHBSQUAQEQAAEQAAEQAAEQAAEQAAEQAAEQAAGzEYBRx2x3BPUBARAAARAAARAAARAAARAAARAAARAAARUEYNRRAQlFQAAEQAAEQAAEQAAEQAAEQAAEQAAEQMBsBGDUMdsdQX1AAARAAARAAARAAARAAARAAARAAARAQAUBGHVUQEIREAABEAABEAABEAABEAABEAABEAABEDAbARh1zHZHUB8QAAEQAAEQAAEQAAEQAAEQAAEQAAEQUEEARh0VkFAEBEAABEAABEAABEAABEAABEAABEAABMxGAEYds90R1AcEQAAEQAAEQAAEQAAEQAAEQAAEQAAEVBCAUUcFJBQBARAAARAAARAAARAAARAAARAAARAAAbMRgFHHbHcE9QEBEAABEAABEAABEAABEAABEAABEAABFQRg1FEBCUVAAARAAARAAARAAARAAARAAARAAARAwGwEYNQx2x1BfUAABEAABEAABEAABEAABEAABEAABEBABQEYdVRAQhEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQMBsBGHXMdkdQHxAAARAAARAAARAAARAAARAAARAAARBQQQBGHRWQUAQEQAAEQAAEQAAEQAAEQAAEQAAEQAAEzEYARh2z3RHUBwRAAARAAARAAARAAARAAARAAARAAARUEIBRRwUkFAEBEAABEAABEAABEAABEAABEAABEAABsxGAUcdsdwT1AQEQAAEQAAEQAAEQAAEQAAEQAAEQAAEVBGDUUQEJRUAABEAABEAABEAABEAABEAABEAABEDAbARg1DHbHUF9QAAEQAAEQAAEQAAEQAAEQAAEQAAEQEAFARh1VEBCERAAARAAARAAARAAARAAARAAARAAARAwGwEYdcx2R1AfEAABEAABEAABEAABEAABEAABEAABEFBBAEYdFZBQBARAAARAAARAAARAAARAAARAAARAAATMRgBGHbPdEdQHBEAABEAABEAABEAABEAABEAABEAABFQQ+H8bNcxRT1DjGwAAAABJRU5ErkJggg==)\n" ], - "layout": "IPY_MODEL_e26f297fcfd74e81b06241aac3b49023" - } - }, - "dde169eb76a14027a51f72beec02b7a8": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_7970346e5d7547bd8e5e02695ccc5b49", - "placeholder": "​", - "style": "IPY_MODEL_68c216897f5d403bb00dd52dc32c6019", - "value": ".gitattributes: 100%" - } - }, - "a0459f9566a041c78d1d18a67eeefd46": { - "model_module": "@jupyter-widgets/controls", - "model_name": "FloatProgressModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "FloatProgressModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "ProgressView", - "bar_style": "success", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_e9c047d2947e496c93974f5f49a5c172", - "max": 1519, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_f355a9ec295f4c078163992c73662d28", - "value": 1519 - } - }, - "ba9de2869272485b89537cc762b4d398": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_7b6dd89030ff43d08880d3ad3613a7c0", - "placeholder": "​", - "style": "IPY_MODEL_ed06c1df20ee40fb98f1cc3b5fcc827d", - "value": " 1.52k/1.52k [00:00<00:00, 11.8kB/s]" - } - }, - "e26f297fcfd74e81b06241aac3b49023": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "7970346e5d7547bd8e5e02695ccc5b49": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "68c216897f5d403bb00dd52dc32c6019": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "e9c047d2947e496c93974f5f49a5c172": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "f355a9ec295f4c078163992c73662d28": { - "model_module": "@jupyter-widgets/controls", - "model_name": "ProgressStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "ProgressStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "bar_color": null, - "description_width": "" - } - }, - "7b6dd89030ff43d08880d3ad3613a7c0": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "ed06c1df20ee40fb98f1cc3b5fcc827d": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "841dfdd7fcef43dab3055b13300c3652": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HBoxModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HBoxModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HBoxView", - "box_style": "", - "children": [ - "IPY_MODEL_37794a9b345c4456bc8faf36942af2dd", - "IPY_MODEL_bfc09d93ac2040b7ae5e46830c00d58c", - "IPY_MODEL_94fc6060c95544549b7b59d1df345819" + "metadata": { + "id": "_trhSpIUhamm" + }, + "id": "_trhSpIUhamm" + }, + { + "cell_type": "markdown", + "source": [ + "# Setting up the Hyperspace environment\n", + "Working with Hyperspace requires the followin steps\n", + "\n", + "1. Install the client API\n", + "2. Create data config file\n", + "3. Connect to a server\n", + "4. Create collection\n", + "5. Ingest data\n", + "6. Run query" ], - "layout": "IPY_MODEL_cf26414873dc439e9916b5ff228c4bf4" - } - }, - "37794a9b345c4456bc8faf36942af2dd": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_ded50ec8861d4d3998547189e1beeab2", - "placeholder": "​", - "style": "IPY_MODEL_5361ce35bc6343039fde123a4af9b58d", - "value": "1_Pooling/config.json: 100%" - } - }, - "bfc09d93ac2040b7ae5e46830c00d58c": { - "model_module": "@jupyter-widgets/controls", - "model_name": "FloatProgressModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "FloatProgressModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "ProgressView", - "bar_style": "success", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_f96975b7c17243778855154d885152f9", - "max": 190, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_824ddea4eaea482db26b873e582c8a03", - "value": 190 - } - }, - "94fc6060c95544549b7b59d1df345819": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_aefab71bec87427f82e4dd0285f6dda4", - "placeholder": "​", - "style": "IPY_MODEL_8ae88cb01a2c4bdcb45f0a92acb90442", - "value": " 190/190 [00:00<00:00, 1.81kB/s]" - } - }, - "cf26414873dc439e9916b5ff228c4bf4": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "ded50ec8861d4d3998547189e1beeab2": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "5361ce35bc6343039fde123a4af9b58d": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "f96975b7c17243778855154d885152f9": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "824ddea4eaea482db26b873e582c8a03": { - "model_module": "@jupyter-widgets/controls", - "model_name": "ProgressStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "ProgressStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "bar_color": null, - "description_width": "" - } - }, - "aefab71bec87427f82e4dd0285f6dda4": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "8ae88cb01a2c4bdcb45f0a92acb90442": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "ef834f09ab1e4046843ed1733bcbeba9": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HBoxModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HBoxModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HBoxView", - "box_style": "", - "children": [ - "IPY_MODEL_2ebc9188a308434bb256e91e80dc3e2e", - "IPY_MODEL_c696d208a7554ba1a5971e047687721a", - "IPY_MODEL_c157baf6a71c4ca093b638f6e3448d63" + "metadata": { + "id": "K41CEp06-JmN" + }, + "id": "K41CEp06-JmN" + }, + { + "cell_type": "markdown", + "source": [ + "## 1. Install the client API\n", + "You can install the Hyperspace API directly from Git by executing the following command:" ], - "layout": "IPY_MODEL_d5f2c1fc46cb402596d57420efa8ca10" - } - }, - "2ebc9188a308434bb256e91e80dc3e2e": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_175e7704c0b74f9cb122484a73f38401", - "placeholder": "​", - "style": "IPY_MODEL_b56f7bf3439e415792086133ab517a26", - "value": "README.md: 100%" - } - }, - "c696d208a7554ba1a5971e047687721a": { - "model_module": "@jupyter-widgets/controls", - "model_name": "FloatProgressModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "FloatProgressModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "ProgressView", - "bar_style": "success", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_4740498b4bb44f399e67163e4b2728d2", - "max": 90189, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_93b82ea6ee024af794d3948503f2ac15", - "value": 90189 - } - }, - "c157baf6a71c4ca093b638f6e3448d63": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_c72d2cb4b307474db663fc4bdaa9ff9c", - "placeholder": "​", - "style": "IPY_MODEL_cc6f8809c55545c39dbf95f94a8c5ac7", - "value": " 90.2k/90.2k [00:00<00:00, 1.04MB/s]" - } - }, - "d5f2c1fc46cb402596d57420efa8ca10": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "175e7704c0b74f9cb122484a73f38401": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "b56f7bf3439e415792086133ab517a26": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "4740498b4bb44f399e67163e4b2728d2": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "93b82ea6ee024af794d3948503f2ac15": { - "model_module": "@jupyter-widgets/controls", - "model_name": "ProgressStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "ProgressStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "bar_color": null, - "description_width": "" - } - }, - "c72d2cb4b307474db663fc4bdaa9ff9c": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "cc6f8809c55545c39dbf95f94a8c5ac7": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "0fe94447ec1742cbbe755e10e96659fc": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HBoxModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HBoxModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HBoxView", - "box_style": "", - "children": [ - "IPY_MODEL_268ce921f6994617a0320e3afcd35c77", - "IPY_MODEL_5bd260d90fcd449590f659554344d002", - "IPY_MODEL_b205d9cfe8334bb791d16477cf9005d8" + "metadata": { + "id": "7UVt24r6-Mft" + }, + "id": "7UVt24r6-Mft" + }, + { + "cell_type": "code", + "source": [ + "pip install git+https://github.com/hyper-space-io/hyperspace-py" ], - "layout": "IPY_MODEL_867f79f4e5ff4067a487456eff17e795" - } - }, - "268ce921f6994617a0320e3afcd35c77": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_02cbe0caf1c94c0eac7130cfd523da03", - "placeholder": "​", - "style": "IPY_MODEL_30f9a3ea9c03491091c7eec441219ef6", - "value": "config.json: 100%" - } - }, - "5bd260d90fcd449590f659554344d002": { - "model_module": "@jupyter-widgets/controls", - "model_name": "FloatProgressModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "FloatProgressModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "ProgressView", - "bar_style": "success", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_56ab87077873497b9730cd2306757d84", - "max": 684, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_fca4944712734053b1f12479895b8a5f", - "value": 684 - } - }, - "b205d9cfe8334bb791d16477cf9005d8": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_4a44360888194d8e95eb2c0a74c97dbf", - "placeholder": "​", - "style": "IPY_MODEL_bf692c66cdb3420b99e9699ca70af6a5", - "value": " 684/684 [00:00<00:00, 7.28kB/s]" - } - }, - "867f79f4e5ff4067a487456eff17e795": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "02cbe0caf1c94c0eac7130cfd523da03": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "30f9a3ea9c03491091c7eec441219ef6": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "56ab87077873497b9730cd2306757d84": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "fca4944712734053b1f12479895b8a5f": { - "model_module": "@jupyter-widgets/controls", - "model_name": "ProgressStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "ProgressStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "bar_color": null, - "description_width": "" - } - }, - "4a44360888194d8e95eb2c0a74c97dbf": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "bf692c66cdb3420b99e9699ca70af6a5": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "4bcb60b1268d4e86b00d12c979591ddb": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HBoxModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HBoxModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HBoxView", - "box_style": "", - "children": [ - "IPY_MODEL_1443b51e5f034419a6c645e47e661449", - "IPY_MODEL_bdb2ed9d6a2941bc804a20d1b9246cc8", - "IPY_MODEL_fa44afce87da4a94800d014e4651e19c" + "metadata": { + "id": "edxBW-er-Lvi" + }, + "id": "edxBW-er-Lvi", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "### Download dataset" ], - "layout": "IPY_MODEL_896cfd5cf3c64be6862c12101b6868d4" - } - }, - "1443b51e5f034419a6c645e47e661449": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_103082c03c2a4078ad7f18cc75bf8838", - "placeholder": "​", - "style": "IPY_MODEL_225b97737ed5415aafb7de51b70c650c", - "value": "config_sentence_transformers.json: 100%" - } - }, - "bdb2ed9d6a2941bc804a20d1b9246cc8": { - "model_module": "@jupyter-widgets/controls", - "model_name": "FloatProgressModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "FloatProgressModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "ProgressView", - "bar_style": "success", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_c302387a15b44ca195e17d3a814660e5", - "max": 124, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_f2fec96988c044d5936726bfad7a8de6", - "value": 124 - } - }, - "fa44afce87da4a94800d014e4651e19c": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_bf3aafe4b3194d97bf7529743de0c388", - "placeholder": "​", - "style": "IPY_MODEL_de6e42cf341b467d8473f5ca47605a06", - "value": " 124/124 [00:00<00:00, 1.02kB/s]" - } - }, - "896cfd5cf3c64be6862c12101b6868d4": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "103082c03c2a4078ad7f18cc75bf8838": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "225b97737ed5415aafb7de51b70c650c": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "c302387a15b44ca195e17d3a814660e5": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "f2fec96988c044d5936726bfad7a8de6": { - "model_module": "@jupyter-widgets/controls", - "model_name": "ProgressStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "ProgressStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "bar_color": null, - "description_width": "" - } - }, - "bf3aafe4b3194d97bf7529743de0c388": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "de6e42cf341b467d8473f5ca47605a06": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "f62091b77fee4c139a9e74df7416d17b": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HBoxModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HBoxModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HBoxView", - "box_style": "", - "children": [ - "IPY_MODEL_6f12628603954490be891844c2ad525a", - "IPY_MODEL_8bd3f746083244cf860e7e339998a158", - "IPY_MODEL_2c46df6c36ec47ac8b4b68367ff9a842" + "metadata": { + "collapsed": false, + "id": "cd585f6aa21b383a" + }, + "id": "cd585f6aa21b383a" + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "from urllib.request import urlretrieve\n", + "import os\n", + "\n", + "def download_data(url, file_name):\n", + " \"\"\"\n", + " url (str): URL of the file to download.\n", + " file_name (str): Local path where the file will be saved.\n", + " \"\"\"\n", + " # Check if the file already exists and is not empty\n", + " if os.path.exists(file_name) and os.path.getsize(file_name) > 0:\n", + " print(f\"The file {file_name} already exists and is not empty.\")\n", + " else:\n", + " try:\n", + " # Attempt to download the file from `url` and save it locally under `file_name`\n", + " urlretrieve(url, file_name)\n", + " # Check if the file was downloaded and is not empty\n", + " if os.path.exists(file_name) and os.path.getsize(file_name) > 0:\n", + " print(f\"Successfully downloaded {file_name}\")\n", + " else:\n", + " print(\"Download failed or file is empty.\")\n", + "\n", + " except Exception as e:\n", + " print(f\"An error occurred: {e}\")\n" ], - "layout": "IPY_MODEL_96571e4398b64ae4a440838e3b699711" - } - }, - "6f12628603954490be891844c2ad525a": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_0190d9216db747d2b6c4cf6f7e3deed8", - "placeholder": "​", - "style": "IPY_MODEL_be90bb1519884ef6a42ba9ff66706292", - "value": "model.safetensors: 100%" - } - }, - "8bd3f746083244cf860e7e339998a158": { - "model_module": "@jupyter-widgets/controls", - "model_name": "FloatProgressModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "FloatProgressModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "ProgressView", - "bar_style": "success", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_f2c7b0c095a148918c3d7941e943a584", - "max": 133466304, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_06593db36a3f4d7f82c682001f3b7421", - "value": 133466304 - } - }, - "2c46df6c36ec47ac8b4b68367ff9a842": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_7ec550f71fbb4fa98a019c6a19656ad4", - "placeholder": "​", - "style": "IPY_MODEL_3a8d7229525e4ba7bc376ac82df5d2d1", - "value": " 133M/133M [00:02<00:00, 91.8MB/s]" - } - }, - "96571e4398b64ae4a440838e3b699711": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "0190d9216db747d2b6c4cf6f7e3deed8": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "be90bb1519884ef6a42ba9ff66706292": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "f2c7b0c095a148918c3d7941e943a584": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "06593db36a3f4d7f82c682001f3b7421": { - "model_module": "@jupyter-widgets/controls", - "model_name": "ProgressStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "ProgressStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "bar_color": null, - "description_width": "" - } - }, - "7ec550f71fbb4fa98a019c6a19656ad4": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "3a8d7229525e4ba7bc376ac82df5d2d1": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "8c8cd5238b9d49a3b8396fe6ada21a40": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HBoxModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HBoxModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HBoxView", - "box_style": "", - "children": [ - "IPY_MODEL_fb4093faaa6349fda9bddb7647d3d846", - "IPY_MODEL_63f117175e5d4342b9f7d1f443874070", - "IPY_MODEL_371bc87227b94fe4a9cf7726e20593c6" + "metadata": { + "id": "9384a45a031b2a23" + }, + "id": "9384a45a031b2a23" + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "metadata_url = \"http://hyperspace-datasets.s3.amazonaws.com/context.jsonl\"\n", + "vectors_url = \"http://hyperspace-datasets.s3.amazonaws.com/vectors.npy\"\n", + "download_data(metadata_url, \"./context.jsonl\")\n", + "download_data(vectors_url, \"./vectors.npy\")" ], - "layout": "IPY_MODEL_ecf3daf027734c99a94e91f8990c6955" - } - }, - "fb4093faaa6349fda9bddb7647d3d846": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_a84dd759931842a1ade720f7358caf3a", - "placeholder": "​", - "style": "IPY_MODEL_1adff9ab83bd43c69909e2fe3d31ef9a", - "value": "pytorch_model.bin: 100%" - } - }, - "63f117175e5d4342b9f7d1f443874070": { - "model_module": "@jupyter-widgets/controls", - "model_name": "FloatProgressModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "FloatProgressModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "ProgressView", - "bar_style": "success", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_c4daa6cde32f473d8245827d7dfc2c7c", - "max": 133508397, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_f48249b28c0846b5902d3e5805454df0", - "value": 133508397 - } - }, - "371bc87227b94fe4a9cf7726e20593c6": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_0c4cf500201c4105b656d5890324fa61", - "placeholder": "​", - "style": "IPY_MODEL_40ced2dae396443f86faf07bbd923a90", - "value": " 134M/134M [00:04<00:00, 27.5MB/s]" - } - }, - "ecf3daf027734c99a94e91f8990c6955": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "a84dd759931842a1ade720f7358caf3a": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "1adff9ab83bd43c69909e2fe3d31ef9a": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "c4daa6cde32f473d8245827d7dfc2c7c": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "f48249b28c0846b5902d3e5805454df0": { - "model_module": "@jupyter-widgets/controls", - "model_name": "ProgressStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "ProgressStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "bar_color": null, - "description_width": "" - } - }, - "0c4cf500201c4105b656d5890324fa61": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "40ced2dae396443f86faf07bbd923a90": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "7cd8d8954a0140e2ac192b762669ef5c": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HBoxModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HBoxModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HBoxView", - "box_style": "", - "children": [ - "IPY_MODEL_f5a823df899a4a2e9e68396a0229f259", - "IPY_MODEL_c13d059e56a5455ea6057dfcc4003524", - "IPY_MODEL_e219e9aa16014593abbf1843125130e0" + "metadata": { + "id": "57cc9837ffc666d9" + }, + "id": "57cc9837ffc666d9" + }, + { + "cell_type": "markdown", + "metadata": { + "id": "TCZSwM6DVeDm" + }, + "source": [ + "## 2. Connect to a server\n", + "\n", + "Once the Hyperspace API is installed, you can access database by creating a local instance of the Hyperspace client. This step requires host address, username and password, provided by Hyperspace" ], - "layout": "IPY_MODEL_8222bd8a6e684f2abc9a4a033ef4c4d4" - } - }, - "f5a823df899a4a2e9e68396a0229f259": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_8c4d6a396c00443db3d17afb3b55ff35", - "placeholder": "​", - "style": "IPY_MODEL_42eef07ae276418fa02d6885401d5d5a", - "value": "sentence_bert_config.json: 100%" - } - }, - "c13d059e56a5455ea6057dfcc4003524": { - "model_module": "@jupyter-widgets/controls", - "model_name": "FloatProgressModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "FloatProgressModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "ProgressView", - "bar_style": "success", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_659df989d3c6491bacef23aca65a8e08", - "max": 52, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_5740a110796e42ae8ad3230e7876889a", - "value": 52 - } - }, - "e219e9aa16014593abbf1843125130e0": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_5fc767a015fa468ea30d2eb7b24b5a75", - "placeholder": "​", - "style": "IPY_MODEL_ea319de9c8254b59ae0d0e9209218e36", - "value": " 52.0/52.0 [00:00<00:00, 1.90kB/s]" - } - }, - "8222bd8a6e684f2abc9a4a033ef4c4d4": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "8c4d6a396c00443db3d17afb3b55ff35": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "42eef07ae276418fa02d6885401d5d5a": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "659df989d3c6491bacef23aca65a8e08": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "5740a110796e42ae8ad3230e7876889a": { - "model_module": "@jupyter-widgets/controls", - "model_name": "ProgressStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "ProgressStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "bar_color": null, - "description_width": "" - } - }, - "5fc767a015fa468ea30d2eb7b24b5a75": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "ea319de9c8254b59ae0d0e9209218e36": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "9bff5ae41d714e31b8472dfb163ff0d4": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HBoxModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HBoxModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HBoxView", - "box_style": "", - "children": [ - "IPY_MODEL_e1df1c91733c4108adee77846d11278e", - "IPY_MODEL_ebe50f5013774c9bbecc704dc9e6b3a1", - "IPY_MODEL_3951e3f34008406a86d69473e8beb32f" + "id": "TCZSwM6DVeDm" + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "17a978a2" + }, + "outputs": [], + "source": [ + "import hyperspace\n", + "from getpass import getpass\n", + "\n", + "username = \"USERNAME\"\n", + "host = \"HOST_URL\"\n", + "\n", + "hyperspace_client = hyperspace.HyperspaceClientApi(host=host, username=username, password=getpass())\n" ], - "layout": "IPY_MODEL_11ef22c9716d439a96f1896ef05a4470" - } - }, - "e1df1c91733c4108adee77846d11278e": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_129ab1a2f2d946ca9c70723ce46d0f5b", - "placeholder": "​", - "style": "IPY_MODEL_49ea66c4778343608641e04a0cb19637", - "value": "special_tokens_map.json: 100%" - } - }, - "ebe50f5013774c9bbecc704dc9e6b3a1": { - "model_module": "@jupyter-widgets/controls", - "model_name": "FloatProgressModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "FloatProgressModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "ProgressView", - "bar_style": "success", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_cb56178d93ab43bd9143eb01da0eef1f", - "max": 125, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_30d5690e1b014dccba847f2f68abba4f", - "value": 125 - } - }, - "3951e3f34008406a86d69473e8beb32f": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_70cfc3b2ddc146dd8bfb595c199ffe8a", - "placeholder": "​", - "style": "IPY_MODEL_6ac778f22cdd4e49b78d455e37491b6c", - "value": " 125/125 [00:00<00:00, 3.19kB/s]" - } - }, - "11ef22c9716d439a96f1896ef05a4470": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "129ab1a2f2d946ca9c70723ce46d0f5b": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "49ea66c4778343608641e04a0cb19637": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "cb56178d93ab43bd9143eb01da0eef1f": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "30d5690e1b014dccba847f2f68abba4f": { - "model_module": "@jupyter-widgets/controls", - "model_name": "ProgressStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "ProgressStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "bar_color": null, - "description_width": "" - } - }, - "70cfc3b2ddc146dd8bfb595c199ffe8a": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "6ac778f22cdd4e49b78d455e37491b6c": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "95d4316e8e5a4f92aae48d22824df3b9": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HBoxModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HBoxModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HBoxView", - "box_style": "", - "children": [ - "IPY_MODEL_ba49dc57a28c4f319b49211b0669b95a", - "IPY_MODEL_5af787f313364d54a95121512f030510", - "IPY_MODEL_e81b9e3dfd4b49a49a5c42feb5b65f04" + "id": "17a978a2" + }, + { + "cell_type": "markdown", + "metadata": { + "id": "HXmdh3YGVfQV" + }, + "source": [ + "## 3. Create a Data Schema File\n", + "\n", + "As other search databases, Hyper-Space database requires a configuration file that outlines the data schema. Attached below is a config file that corresponds to the fields of the given dataset.\n", + "\n", + "For vector fields, we also provide the index type to be used, and the metric. . Current options for index include \"**brute_force**\", \"**hnsw**\", \"**ivf**\", and \"**bin_ivf**\" for binary vectors, and \"**IP**\" ([inner product](https://en.wikipedia.org/wiki/Inner_product_space)) as a metric for floating point vectors and \"**Hamming**\" ([hamming distance](https://en.wikipedia.org/wiki/Hamming_distance)) for binary vectors.\n", + "Here, we use \"brute_force\" (exact KNN) with inner product." ], - "layout": "IPY_MODEL_41ce1cfa2e054d4daf95177682bbcf34" - } - }, - "ba49dc57a28c4f319b49211b0669b95a": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_dc89470ee36847a78880c997a0b9f63e", - "placeholder": "​", - "style": "IPY_MODEL_467c02d8f5f147908729d80de1f51f70", - "value": "tokenizer.json: 100%" - } - }, - "5af787f313364d54a95121512f030510": { - "model_module": "@jupyter-widgets/controls", - "model_name": "FloatProgressModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "FloatProgressModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "ProgressView", - "bar_style": "success", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_514eed6d562344f7866867ff4550dbcb", - "max": 711396, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_a4a139ce4cb94f91a78839a406e67f31", - "value": 711396 - } - }, - "e81b9e3dfd4b49a49a5c42feb5b65f04": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_d9b549be0e594b6a8105d77221ca40f0", - "placeholder": "​", - "style": "IPY_MODEL_d9306c2d52724a31b8d29a90c123f508", - "value": " 711k/711k [00:00<00:00, 11.8MB/s]" - } - }, - "41ce1cfa2e054d4daf95177682bbcf34": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "dc89470ee36847a78880c997a0b9f63e": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "467c02d8f5f147908729d80de1f51f70": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "514eed6d562344f7866867ff4550dbcb": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "a4a139ce4cb94f91a78839a406e67f31": { - "model_module": "@jupyter-widgets/controls", - "model_name": "ProgressStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "ProgressStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "bar_color": null, - "description_width": "" - } - }, - "d9b549be0e594b6a8105d77221ca40f0": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "d9306c2d52724a31b8d29a90c123f508": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "a2c457a03fb04ee9b155e65a082e58e5": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HBoxModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HBoxModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HBoxView", - "box_style": "", - "children": [ - "IPY_MODEL_a624d6afa6a2418592026f037c48e253", - "IPY_MODEL_1ee5fb825f114993b575795584f98301", - "IPY_MODEL_b0a2a43e44e047349248b9b94a0f58d0" + "id": "HXmdh3YGVfQV" + }, + { + "cell_type": "code", + "execution_count": null, + "id": "63ea0ce9-ce9a-45b2-9747-2f0e504c3514", + "metadata": { + "id": "63ea0ce9-ce9a-45b2-9747-2f0e504c3514" + }, + "outputs": [], + "source": [ + "import json\n", + "\n", + "config = {\n", + " \"configuration\": {\n", + " \"id\": {\n", + " \"type\": \"keyword\",\n", + " \"id\": True\n", + " },\n", + " \"title\":{\n", + " \"type\":\"keyword\"\n", + " },\n", + " \"bundle_id\": {\n", + " \"type\":\"keyword\"\n", + " },\n", + " \"ios\":{\n", + " \"type\":\"boolean\"\n", + " },\n", + " \"categories\": {\n", + " \"type\":\"keyword\",\n", + " \"struct_type\":\"list\"\n", + " },\n", + " \"content\": {\n", + " \"type\":\"keyword\"\n", + " },\n", + " \"embedded_app\": {\n", + " \"type\": \"dense_vector\",\n", + " \"dim\": 384,\n", + " \"index_type\": \"brute_force\",\n", + " \"metric\": \"IP\"\n", + " }\n", + " }\n", + "}\n", + "\n", + "with open('advec_config.json', 'w') as f:\n", + " f.write(json.dumps(config, indent=2))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "7RTDkUsr3ead" + }, + "source": [ + "## 4. Create Collection\n", + "The Hyerspace engine stroes data in Collections, where each collecction commonly hosts data of similar context, etc. Each search is then perfomed within a collection. We create a collection using the command \"**create_collection**(schema_filename, collection_name)\"." ], - "layout": "IPY_MODEL_113da0edbfb14ef0b1844020dc814c33" - } - }, - "a624d6afa6a2418592026f037c48e253": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_34b6b2cf879e4a87a66af87888ccd0b9", - "placeholder": "​", - "style": "IPY_MODEL_3c40e4d223b145bcb9ef881d8d5fb268", - "value": "tokenizer_config.json: 100%" - } - }, - "1ee5fb825f114993b575795584f98301": { - "model_module": "@jupyter-widgets/controls", - "model_name": "FloatProgressModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "FloatProgressModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "ProgressView", - "bar_style": "success", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_cf9182ed0fbd4e5bac5b5b0badfdc938", - "max": 366, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_a6b694a9ea964133bf085967984f1bf7", - "value": 366 - } - }, - "b0a2a43e44e047349248b9b94a0f58d0": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_99971a53f7194457bbc06e6458b340d6", - "placeholder": "​", - "style": "IPY_MODEL_22ddbb4eccf04e50b77e6f64df8f6cee", - "value": " 366/366 [00:00<00:00, 11.0kB/s]" - } - }, - "113da0edbfb14ef0b1844020dc814c33": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "34b6b2cf879e4a87a66af87888ccd0b9": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "3c40e4d223b145bcb9ef881d8d5fb268": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "cf9182ed0fbd4e5bac5b5b0badfdc938": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "a6b694a9ea964133bf085967984f1bf7": { - "model_module": "@jupyter-widgets/controls", - "model_name": "ProgressStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "ProgressStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "bar_color": null, - "description_width": "" - } - }, - "99971a53f7194457bbc06e6458b340d6": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "22ddbb4eccf04e50b77e6f64df8f6cee": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "d661e8d0f34241f98be969a3d0853f6e": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HBoxModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HBoxModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HBoxView", - "box_style": "", - "children": [ - "IPY_MODEL_7dbd603ea2e741cc808ba5f0798f70fb", - "IPY_MODEL_42ef47c7184e45649a3f2e0434e9ecc9", - "IPY_MODEL_3d1b70ed00d74d288198320225ef8bd4" + "id": "7RTDkUsr3ead" + }, + { + "cell_type": "code", + "execution_count": null, + "id": "092053ea-a4e2-4dbb-90c7-4adbfc953384", + "metadata": { + "id": "092053ea-a4e2-4dbb-90c7-4adbfc953384" + }, + "outputs": [], + "source": [ + "collection_name = 'advec'\n", + "if collection_name not in hyperspace_client.collections_info()[\"collections\"]:\n", + " hyperspace_client.create_collection('advec_config.json', collection_name)\n", + "\n", + "hyperspace_client.collections_info()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "lUpgHD2VWFXd" + }, + "source": [ + "# 5. Ingest Data\n", + "\n", + "In the next step, we ingest the dataset in batches. The number documents in each batch can be controlled by the user, and specifically, it can be increased to reduce ingestion time.\n", + "Batches of data are added using the add_batch(batch, collection_name) command" ], - "layout": "IPY_MODEL_7ae4b92b9e144702977befd7c0b45f91" - } - }, - "7dbd603ea2e741cc808ba5f0798f70fb": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_2bf03c2eeccc4572b8903c92cc8f30d1", - "placeholder": "​", - "style": "IPY_MODEL_80b3dec35c2f484fb05ae76518a44428", - "value": "vocab.txt: 100%" - } - }, - "42ef47c7184e45649a3f2e0434e9ecc9": { - "model_module": "@jupyter-widgets/controls", - "model_name": "FloatProgressModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "FloatProgressModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "ProgressView", - "bar_style": "success", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_043077e63bed45329811efc1e07aa35c", - "max": 231508, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_af04eee5a56840b384a1c5dbaa679cab", - "value": 231508 - } - }, - "3d1b70ed00d74d288198320225ef8bd4": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_8d25496b978f4df38ca2e5781b5a5472", - "placeholder": "​", - "style": "IPY_MODEL_ae2d2c1526fc476b8ddca3b71f520cd9", - "value": " 232k/232k [00:00<00:00, 4.53MB/s]" - } - }, - "7ae4b92b9e144702977befd7c0b45f91": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "2bf03c2eeccc4572b8903c92cc8f30d1": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "80b3dec35c2f484fb05ae76518a44428": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "043077e63bed45329811efc1e07aa35c": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "af04eee5a56840b384a1c5dbaa679cab": { - "model_module": "@jupyter-widgets/controls", - "model_name": "ProgressStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "ProgressStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "bar_color": null, - "description_width": "" - } - }, - "8d25496b978f4df38ca2e5781b5a5472": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "ae2d2c1526fc476b8ddca3b71f520cd9": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "e16139aa130d4b90af89e7b67c5a01ae": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HBoxModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HBoxModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HBoxView", - "box_style": "", - "children": [ - "IPY_MODEL_e86bf22fa4e943f8bc448a284385c531", - "IPY_MODEL_e9166ca449f04fb783e06baa9f8413b1", - "IPY_MODEL_d08e4837a5314677808b8dcb4d67162d" + "id": "lUpgHD2VWFXd" + }, + { + "cell_type": "code", + "source": [ + "import numpy as np\n", + "vectors_path = \"vectors.npy\"\n", + "data_file_path = \"context.jsonl\"\n", + "vecs = np.load(vectors_path)\n", + "with open(data_file_path, encoding='cp437') as metadata_file:\n", + " metadata= [json.loads(row) for row in metadata_file]\n" ], - "layout": "IPY_MODEL_c0bd65caef214882a25faa0ae5615c08" - } - }, - "e86bf22fa4e943f8bc448a284385c531": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_215d0f33bd8d4692a375e185d0fb4ece", - "placeholder": "​", - "style": "IPY_MODEL_7dc550ffd0fe4448aff53c73ed5bdb73", - "value": "modules.json: 100%" - } - }, - "e9166ca449f04fb783e06baa9f8413b1": { - "model_module": "@jupyter-widgets/controls", - "model_name": "FloatProgressModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "FloatProgressModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "ProgressView", - "bar_style": "success", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_bac733d0ec2344f7ab2c1a68dc6210ba", - "max": 349, - "min": 0, - "orientation": "horizontal", - "style": "IPY_MODEL_f2dda96c9ec84ef4a0880db78ae26206", - "value": 349 - } - }, - "d08e4837a5314677808b8dcb4d67162d": { - "model_module": "@jupyter-widgets/controls", - "model_name": "HTMLModel", - "model_module_version": "1.5.0", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "HTMLModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "HTMLView", - "description": "", - "description_tooltip": null, - "layout": "IPY_MODEL_bc13d9867f384020a5ffae6ee51a6c44", - "placeholder": "​", - "style": "IPY_MODEL_162b9b0e624445d286fff0e805a7c573", - "value": " 349/349 [00:00<00:00, 11.3kB/s]" - } - }, - "c0bd65caef214882a25faa0ae5615c08": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "215d0f33bd8d4692a375e185d0fb4ece": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "7dc550ffd0fe4448aff53c73ed5bdb73": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "bac733d0ec2344f7ab2c1a68dc6210ba": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "f2dda96c9ec84ef4a0880db78ae26206": { - "model_module": "@jupyter-widgets/controls", - "model_name": "ProgressStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "ProgressStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "bar_color": null, - "description_width": "" - } - }, - "bc13d9867f384020a5ffae6ee51a6c44": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "model_module_version": "1.2.0", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } + "metadata": { + "id": "TQsSPSqeTMXq" + }, + "id": "TQsSPSqeTMXq", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0904d325-495f-410d-8bc6-f84a30bac7af", + "metadata": { + "scrolled": true, + "id": "0904d325-495f-410d-8bc6-f84a30bac7af" + }, + "outputs": [], + "source": [ + "\n", + "BATCH_SIZE = 500\n", + "\n", + "batch = []\n", + "for i, (metadata_row, vec) in enumerate(zip(metadata, vecs)):\n", + " row = {key: value for key, value in metadata_row.items() if key in config[\"configuration\"].keys()}\n", + " row['embedded_app'] = np.ndarray.tolist(vec)\n", + " row[\"id\"] = str(i)\n", + " batch.append(row)\n", + "\n", + " if i % BATCH_SIZE == 0:\n", + " response = hyperspace_client.add_batch(batch, collection_name)\n", + " batch.clear()\n", + " print(i, response)\n", + "response = hyperspace_client.add_batch(batch, collection_name)\n", + "batch.clear()\n", + "print(i, response)\n", + "hyperspace_client.commit(collection_name)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8bac72a3-45c7-445e-8f00-e206608969f5", + "metadata": { + "id": "8bac72a3-45c7-445e-8f00-e206608969f5" + }, + "outputs": [], + "source": [ + "hyperspace_client.collections_info()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "8lRgTyKwWJ84" + }, + "source": [ + "# 6. Define Logic and Run a Query\n", + "In the last step we build a Hyperspace hybrid search query. We randomly select an App from the database and search for similar applications. The overall score is defined by the weights, provided under the \"boost\" fields. These weights allow to contorl the relative weights of the classic search and vector search scores." + ], + "id": "8lRgTyKwWJ84" + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5ff8391b-b679-43f7-bf79-00a14aef2981", + "metadata": { + "id": "5ff8391b-b679-43f7-bf79-00a14aef2981" + }, + "outputs": [], + "source": [ + "input_document = hyperspace_client.get_document(collection_name, 42)\n", + "print(input_document)" + ] + }, + { + "cell_type": "markdown", + "source": [ + "## Vector Search" + ], + "metadata": { + "id": "iawRCHKM_8Sj" + }, + "id": "iawRCHKM_8Sj" + }, + { + "cell_type": "markdown", + "source": [ + "Let us first perform a vector search over the embedded description. This step does not require a score function" + ], + "metadata": { + "id": "B_IsUeKYAB5W" + }, + "id": "B_IsUeKYAB5W" + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1ca689dd-b0f9-4ff4-aaea-c041b7135bb9", + "metadata": { + "id": "1ca689dd-b0f9-4ff4-aaea-c041b7135bb9" + }, + "outputs": [], + "source": [ + "results = hyperspace_client.search({'params': input_document,\n", + " 'knn' : [{'field': 'embedded_app',\"boost\": 0},\n", + " {'field': 'query',\"boost\": 1}]},\n", + " size=10,\n", + " collection_name=collection_name)\n", + "\n", + "for i,result in enumerate(results['similarity']):\n", + " vector_api_response = hyperspace_client.get_document(document_id=result['document_id'], collection_name=collection_name)\n", + " response = f\"{i+1} - {result['document_id']} : {result['score']} --- \"\n", + " keys_str = \" - \".join([str(vector_api_response[k]) for k in [\"title\",\"bundle_id\",\"categories\"]])\n", + " print(response+keys_str)" + ] + }, + { + "cell_type": "markdown", + "id": "5f29e4ba-6e8b-43f7-97ff-3037b705dff0", + "metadata": { + "jp-MarkdownHeadingCollapsed": true, + "id": "5f29e4ba-6e8b-43f7-97ff-3037b705dff0" + }, + "source": [ + "## Classic Search\n", + "We repeat the process with classic search, using pre-defined score function, that can be downloaded from [Hyperspace git](https://github.com/hyper-space-io/QuickStart/blob/main/DataSets/AdVec/classic_score.py)" + ] + }, + { + "cell_type": "code", + "source": [ + "import inspect\n", + "\n", + "def set_score_function(func, collection_name, score_function_name='func'):\n", + " source = inspect.getsource(func)\n", + " with open('sf.py', 'w') as f:\n", + " f.write(source)\n", + " return hyperspace_client.set_function('sf.py', collection_name, score_function_name)\n", + "" + ], + "metadata": { + "id": "G6acmbv1vnNq" + }, + "id": "G6acmbv1vnNq", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "def ios_score(params, doc):\n", + " if match(\"bundle_id\"):\n", + " return 0.0\n", + "\n", + " score = 0.0\n", + " if match(\"categories\"):\n", + " score += rarity_sum(\"categories\")\n", + "\n", + " if doc[\"ios\"]:\n", + " score *= 2\n", + "\n", + " return score\n", + "\n", + "hyperspace_client.set_function(ios_score, collection_name, \"ios_score\")" + ], + "metadata": { + "id": "g3PLGAF_t2eH" + }, + "id": "g3PLGAF_t2eH", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f5fa75ff-6559-462e-b5fb-60f8cfb268ce", + "metadata": { + "id": "f5fa75ff-6559-462e-b5fb-60f8cfb268ce" + }, + "outputs": [], + "source": [ + "query_with_knn = {\n", + " 'params': input_document,\n", + " 'knn' : [{'field': 'embedded_app',\"boost\": 0},\n", + " {'field': 'query',\"boost\": 1}]\n", + "}\n", + "\n", + "results = hyperspace_client.search(query_with_knn,\n", + " size=10,\n", + " function_name=\"ios_score\",\n", + " collection_name=collection_name)\n", + "\n", + "for i,result in enumerate(results['similarity']):\n", + " vector_api_response = hyperspace_client.get_document(document_id=result['document_id'], collection_name=collection_name)\n", + " response = f\"{i+1} - {result['document_id']} : {result['score']} --- \"\n", + " keys_str = \" - \".join([str(vector_api_response[k]) for k in [\"title\",\"bundle_id\",\"categories\"]])\n", + " print(response+keys_str)" + ] + }, + { + "cell_type": "markdown", + "id": "31b4bd2a-3fb0-432d-9f29-e556fd0cd870", + "metadata": { + "id": "31b4bd2a-3fb0-432d-9f29-e556fd0cd870" + }, + "source": [ + "## Embed User Query and Search\n", + "Let us now create a free text query, embed it using the [bge-small-en model](https://huggingface.co/BAAI/bge-small-en) and retrieve relevant apps" + ] + }, + { + "cell_type": "code", + "source": [ + "!pip install sentence_transformers" + ], + "metadata": { + "id": "gupjaQ57dt0j" + }, + "id": "gupjaQ57dt0j", + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "dfd1e3b2-3be5-42d2-ab8f-6aa68e708e75", + "metadata": { + "id": "dfd1e3b2-3be5-42d2-ab8f-6aa68e708e75" + }, + "outputs": [], + "source": [ + "import sentence_transformers\n", + "\n", + "from sentence_transformers import SentenceTransformer\n", + "embbeding_model = SentenceTransformer('BAAI/bge-small-en')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "sim_sentence = \"\"\"a great app for gaming with my friends \"\"\"\n", + "sim_embedding = embbeding_model.encode([sim_sentence], normalize_embeddings=True)[0]\n", + "\n", + "results = hyperspace_client.search({'params': {'embedded_app': sim_embedding.tolist()},\n", + " 'knn' : [{'field': 'embedded_app',\"boost\": 0},\n", + " {'field': 'query',\"boost\": 1}]},\n", + " size=10,\n", + " collection_name=collection_name)\n", + "\n", + "for i,result in enumerate(results['similarity']):\n", + " vector_api_response = hyperspace_client.get_document(document_id=result['document_id'], collection_name=collection_name)\n", + " response = f\"{i+1} - {result['document_id']} : {result['score']} --- \"\n", + " keys_str = \" - \".join([str(vector_api_response[k]) for k in [\"title\",\"bundle_id\",\"categories\"]])\n", + " print(response+keys_str)" + ], + "metadata": { + "id": "da81d11b390d1231" + }, + "id": "da81d11b390d1231" + }, + { + "cell_type": "markdown", + "id": "1d96433e-80fe-47b2-befb-9197e5ec75cf", + "metadata": { + "id": "1d96433e-80fe-47b2-befb-9197e5ec75cf" + }, + "source": [ + "## Hybrid Search\n", + "In the last step, we perform a hybrid search that combines KNN using the embedded app description with a classic score function." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b07eaf8c-2b68-4d9a-8d15-d5e1c24b2aa7", + "metadata": { + "id": "b07eaf8c-2b68-4d9a-8d15-d5e1c24b2aa7" + }, + "outputs": [], + "source": [ + "input_document = hyperspace_client.get_document(collection_name, 7960)\n", + "input_document['title'] + \"\\n\" + str(input_document['categories'])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5fff6916-3310-4653-98e9-6ec9dc68c1d1", + "metadata": { + "id": "5fff6916-3310-4653-98e9-6ec9dc68c1d1" + }, + "outputs": [], + "source": [ + "results = hyperspace_client.search({'params': input_document},\n", + " size=10,\n", + " function_name=\"ios_score\",\n", + " collection_name=collection_name)\n", + "\n", + "for i,result in enumerate(results['similarity']):\n", + " vector_api_response = hyperspace_client.get_document(document_id=result['document_id'], collection_name=collection_name)\n", + " response = f\"{i+1} - {result['document_id']} : {result['score']} --- \"\n", + " keys_str = \" - \".join([str(vector_api_response[k]) for k in [\"title\",\"bundle_id\",\"categories\"]])\n", + " print(response+keys_str)" + ] + }, + { + "cell_type": "markdown", + "source": [ + "This notebook demonstrated the use of Hyper search for classic, vector and hybrid search. For more info, visit us at [Hyper-space.io](https://www.hyper-space.io/)" + ], + "metadata": { + "id": "Sj6caGDZEHBz" + }, + "id": "Sj6caGDZEHBz" + } + ], + "metadata": { + "kernelspec": { + "name": "python3", + "language": "python", + "display_name": "Python 3 (ipykernel)" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.11" }, - "162b9b0e624445d286fff0e805a7c573": { - "model_module": "@jupyter-widgets/controls", - "model_name": "DescriptionStyleModel", - "model_module_version": "1.5.0", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } + "colab": { + "provenance": [] } - } - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} + }, + "nbformat": 4, + "nbformat_minor": 5 +} \ No newline at end of file