From edcec7eac416a34c3bbd468bd69384e69582fc41 Mon Sep 17 00:00:00 2001 From: blythed Date: Wed, 6 Dec 2023 17:32:06 +0100 Subject: [PATCH] Remove redundant arguments from components using `kw_only=True` --- .github/workflows/ci_code.yml | 2 +- CHANGELOG.md | 18 +- examples/question_the_docs.ipynb | 2821 +---------------- superduperdb/backends/ibis/query.py | 13 +- superduperdb/base/datalayer.py | 3 +- superduperdb/base/serializable.py | 10 +- superduperdb/cli/stack.py | 4 +- superduperdb/components/component.py | 14 +- superduperdb/components/dataset.py | 17 +- superduperdb/components/encoder.py | 15 +- superduperdb/components/listener.py | 30 +- superduperdb/components/metric.py | 13 +- superduperdb/components/model.py | 210 +- superduperdb/components/schema.py | 27 +- superduperdb/components/serializer.py | 16 +- superduperdb/components/stack.py | 12 +- superduperdb/components/vector_index.py | 14 +- superduperdb/ext/anthropic/model.py | 5 +- superduperdb/ext/cohere/model.py | 6 +- superduperdb/ext/openai/model.py | 68 +- superduperdb/ext/torch/model.py | 334 +- test/conftest.py | 21 +- .../ext/cohere/test_model_cohere.py | 16 +- .../ext/openai/test_model_openai.py | 55 +- test/unittest/backends/ibis/test_query.py | 4 +- test/unittest/base/test_datalayer.py | 44 +- test/unittest/component/test_model.py | 60 +- test/unittest/ext/test_openai.py | 2 +- test/unittest/test_quality.py | 2 +- 29 files changed, 550 insertions(+), 3306 deletions(-) diff --git a/.github/workflows/ci_code.yml b/.github/workflows/ci_code.yml index 4aac5eaa4b..aa98b4d603 100644 --- a/.github/workflows/ci_code.yml +++ b/.github/workflows/ci_code.yml @@ -24,7 +24,7 @@ jobs: fail-fast: false matrix: os: [ "ubuntu-latest" ] # TODO: add "windows-latest", "macos-latest" when Docker removed - python-version: ["3.8", "3.11"] # Due to cache limitations, check only the earliest and the latest. + python-version: ["3.10", "3.11"] # Due to cache limitations, check only the earliest and the latest. steps: - name: Check out repository diff --git a/CHANGELOG.md b/CHANGELOG.md index 8eb307ab6f..bab619c215 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,37 +24,26 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Update connection uris in `sql_examples.ipynb` to include snippets for Embedded, Cloud, and Distributed databases. -## [0.1.0](https://github.com/SuperDuperDB/superduperdb/compare/0.0.20...0.1.0]) (2023-Dec-05) +#### Refactorings -#### Changed defaults / behaviours +- Added `kw_only` to most `@dataclass` decorators to simplify -- ... +## [0.1.0](https://github.com/SuperDuperDB/superduperdb/compare/0.0.20...0.1.0]) (2023-Dec-05) #### New Features & Functionality - Introduced Chinese version of README - #### Bug Fixes - Updated paths for docker-compose. - ## [0.0.20](https://github.com/SuperDuperDB/superduperdb/compare/0.0.10...0.0.20]) (2023-Dec-04) #### Changed defaults / behaviours - Chop down large files from the history to reduce the size of the repo. -#### New Features & Functionality - -- ... - - -#### Bug Fixes - -- ... - ## [0.0.19](https://github.com/SuperDuperDB/superduperdb/compare/0.0.15...0.0.19]) (2023-Dec-04) @@ -74,7 +63,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Add a `Component.post_create` hook to enable logic to incorporate model versions - Fix multiple issues with `ibis`/ SQL code - #### New Features & Functionality - Add support for selecting whether logs will be redirected to the system output or directly to Loki diff --git a/examples/question_the_docs.ipynb b/examples/question_the_docs.ipynb index 9cdb33973a..7e78c34255 100644 --- a/examples/question_the_docs.ipynb +++ b/examples/question_the_docs.ipynb @@ -78,7 +78,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "id": "f5bcdade-f988-4464-bfcf-806245031bb3", "metadata": {}, "outputs": [], @@ -119,26 +119,16 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "id": "f42c42cc-af6a-4712-a993-d9c921693819", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u001b[32m 2023-Dec-02 15:43:51.83\u001b[0m| \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mDuncans-MacBook-Pro.local\u001b[0m| \u001b[36m88626ad4-e654-4d13-b738-655c215c9549\u001b[0m| \u001b[36msuperduperdb.base.build\u001b[0m:\u001b[36m50 \u001b[0m | \u001b[34m\u001b[1mParsing data connection URI:mongomock://test\u001b[0m\n", - "\u001b[32m 2023-Dec-02 15:43:51.84\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mDuncans-MacBook-Pro.local\u001b[0m| \u001b[36m88626ad4-e654-4d13-b738-655c215c9549\u001b[0m| \u001b[36msuperduperdb.base.build\u001b[0m:\u001b[36m133 \u001b[0m | \u001b[1mData Client is ready. mongomock.MongoClient('localhost', 27017)\u001b[0m\n", - "\u001b[32m 2023-Dec-02 15:43:51.84\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mDuncans-MacBook-Pro.local\u001b[0m| \u001b[36m88626ad4-e654-4d13-b738-655c215c9549\u001b[0m| \u001b[36msuperduperdb.base.datalayer\u001b[0m:\u001b[36m79 \u001b[0m | \u001b[1mBuilding Data Layer\u001b[0m\n" - ] - } - ], + "outputs": [], "source": [ "from superduperdb import superduper\n", "from superduperdb.backends.mongodb import Collection\n", "import os\n", "\n", - "mongodb_uri = os.getenv(\"MONGODB_URI\", \"mongomock://test\")\n", + "mongodb_uri = os.getenv(\"MONGODB_URI\", \"mongodb+srv://test-user:dgDzwSL7rQpzyOOr@cluster0.j28qm.mongodb.net/?retryWrites=true&w=majority/documentation\")\n", "\n", "# SuperDuperDB, now handles your MongoDB database\n", "# It just super dupers your database\n", @@ -166,7 +156,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "id": "d72a2a52-964f-456e-88b6-040965f5ed1e", "metadata": {}, "outputs": [], @@ -230,53 +220,15 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "id": "4a88ea46-ff2d-4d7f-8cce-707d73a0b53f", "metadata": {}, - "outputs": [ - { - "data": { - "text/markdown": [ - "# Anthropic\n", - "\n", - "`superduperdb` allows users to work with `anthropic` API models.\n", - "\n", - "Read more about this [here](/docs/docs/walkthrough/ai_models#anthropic).\n", - "# Cohere\n", - "\n", - "`superduperdb` allows users to work with `cohere` API models.\n", - "\n", - "Read more about this [here](/docs/docs/walkthrough/ai_models#cohere).\n", - "---\n", - "sidebar_position: 2\n", - "---\n", - "\n", - "# Custom\n", - "\n", - "`superduperdb` provides fully flexible support for AI models from across the \n", - "open-source ecosystem.\n", - "\n", - "Custom AI integrations may be achieved using the base `superduperdb.Model` class.\n", - "\n", - "Read more [here](/docs/docs/walkthrough/ai_models#vanilla)\n", - "# OpenAI\n", - "\n", - "`superduperdb` allows users to work with `openai` API models." - ], - "text/plain": [ - "" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "from IPython.display import *\n", "\n", "# Assuming 'chunks' is a list or iterable containing markdown content\n", - "Markdown(chunks[0])" + "Markdown(chunks[100])" ] }, { @@ -298,1017 +250,10 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "id": "a7208ef2-c035-43b9-a624-ade42a06ed09", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u001b[32m 2023-Dec-02 15:44:03.19\u001b[0m| \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mDuncans-MacBook-Pro.local\u001b[0m| \u001b[36m88626ad4-e654-4d13-b738-655c215c9549\u001b[0m| \u001b[36msuperduperdb.base.datalayer\u001b[0m:\u001b[36m716 \u001b[0m | \u001b[34m\u001b[1mBuilding task workflow graph. Query:\u001b[0m\n", - "\u001b[32m 2023-Dec-02 15:44:03.19\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mDuncans-MacBook-Pro.local\u001b[0m| \u001b[36m88626ad4-e654-4d13-b738-655c215c9549\u001b[0m| \u001b[36msuperduperdb.backends.local.compute\u001b[0m:\u001b[36m32 \u001b[0m | \u001b[1mSubmitting job. function:\u001b[0m\n", - "\u001b[32m 2023-Dec-02 15:44:03.20\u001b[0m| \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mDuncans-MacBook-Pro.local\u001b[0m| \u001b[36m88626ad4-e654-4d13-b738-655c215c9549\u001b[0m| \u001b[36msuperduperdb.misc.download\u001b[0m:\u001b[36m337 \u001b[0m | \u001b[34m\u001b[1m{'cls': 'MongoCompoundSelect', 'dict': {'table_or_collection': {'cls': 'Collection', 'dict': {'identifier': 'questiondocs'}, 'module': 'superduperdb.backends.mongodb.query'}, 'pre_like': None, 'post_like': None, 'query_linker': {'cls': 'MongoQueryLinker', 'dict': {'table_or_collection': {'cls': 'Collection', 'dict': {'identifier': 'questiondocs'}, 'module': 'superduperdb.backends.mongodb.query'}, 'members': [{'cls': 'Find', 'dict': {'name': 'find', 'type': , 'args': [{}, {}], 'kwargs': {}, 'output_fields': None}, 'module': 'superduperdb.backends.mongodb.query'}]}, 'module': 'superduperdb.backends.mongodb.query'}}, 'module': 'superduperdb.backends.mongodb.query'}\u001b[0m\n", - "\u001b[32m 2023-Dec-02 15:44:03.20\u001b[0m| \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mDuncans-MacBook-Pro.local\u001b[0m| \u001b[36m88626ad4-e654-4d13-b738-655c215c9549\u001b[0m| \u001b[36msuperduperdb.misc.download\u001b[0m:\u001b[36m338 \u001b[0m | \u001b[34m\u001b[1m[ObjectId('656b42b3f43aad980e83974c'), ObjectId('656b42b3f43aad980e83974d'), ObjectId('656b42b3f43aad980e83974e'), ObjectId('656b42b3f43aad980e83974f'), ObjectId('656b42b3f43aad980e839750'), ObjectId('656b42b3f43aad980e839751'), ObjectId('656b42b3f43aad980e839752'), ObjectId('656b42b3f43aad980e839753'), ObjectId('656b42b3f43aad980e839754'), ObjectId('656b42b3f43aad980e839755'), ObjectId('656b42b3f43aad980e839756'), ObjectId('656b42b3f43aad980e839757'), ObjectId('656b42b3f43aad980e839758'), ObjectId('656b42b3f43aad980e839759'), ObjectId('656b42b3f43aad980e83975a'), ObjectId('656b42b3f43aad980e83975b'), ObjectId('656b42b3f43aad980e83975c'), ObjectId('656b42b3f43aad980e83975d'), ObjectId('656b42b3f43aad980e83975e'), ObjectId('656b42b3f43aad980e83975f'), ObjectId('656b42b3f43aad980e839760'), ObjectId('656b42b3f43aad980e839761'), ObjectId('656b42b3f43aad980e839762'), ObjectId('656b42b3f43aad980e839763'), ObjectId('656b42b3f43aad980e839764'), ObjectId('656b42b3f43aad980e839765'), ObjectId('656b42b3f43aad980e839766'), ObjectId('656b42b3f43aad980e839767'), ObjectId('656b42b3f43aad980e839768'), ObjectId('656b42b3f43aad980e839769'), ObjectId('656b42b3f43aad980e83976a'), ObjectId('656b42b3f43aad980e83976b'), ObjectId('656b42b3f43aad980e83976c'), ObjectId('656b42b3f43aad980e83976d'), ObjectId('656b42b3f43aad980e83976e'), ObjectId('656b42b3f43aad980e83976f'), ObjectId('656b42b3f43aad980e839770'), ObjectId('656b42b3f43aad980e839771'), ObjectId('656b42b3f43aad980e839772'), ObjectId('656b42b3f43aad980e839773'), ObjectId('656b42b3f43aad980e839774'), ObjectId('656b42b3f43aad980e839775'), ObjectId('656b42b3f43aad980e839776'), ObjectId('656b42b3f43aad980e839777'), ObjectId('656b42b3f43aad980e839778'), ObjectId('656b42b3f43aad980e839779'), ObjectId('656b42b3f43aad980e83977a'), ObjectId('656b42b3f43aad980e83977b'), ObjectId('656b42b3f43aad980e83977c'), ObjectId('656b42b3f43aad980e83977d'), ObjectId('656b42b3f43aad980e83977e'), ObjectId('656b42b3f43aad980e83977f'), ObjectId('656b42b3f43aad980e839780'), ObjectId('656b42b3f43aad980e839781'), ObjectId('656b42b3f43aad980e839782'), ObjectId('656b42b3f43aad980e839783'), ObjectId('656b42b3f43aad980e839784'), ObjectId('656b42b3f43aad980e839785'), ObjectId('656b42b3f43aad980e839786'), ObjectId('656b42b3f43aad980e839787'), ObjectId('656b42b3f43aad980e839788'), ObjectId('656b42b3f43aad980e839789'), ObjectId('656b42b3f43aad980e83978a'), ObjectId('656b42b3f43aad980e83978b'), ObjectId('656b42b3f43aad980e83978c'), ObjectId('656b42b3f43aad980e83978d'), ObjectId('656b42b3f43aad980e83978e'), ObjectId('656b42b3f43aad980e83978f'), ObjectId('656b42b3f43aad980e839790'), ObjectId('656b42b3f43aad980e839791'), ObjectId('656b42b3f43aad980e839792'), ObjectId('656b42b3f43aad980e839793'), ObjectId('656b42b3f43aad980e839794'), ObjectId('656b42b3f43aad980e839795'), ObjectId('656b42b3f43aad980e839796'), ObjectId('656b42b3f43aad980e839797'), ObjectId('656b42b3f43aad980e839798'), ObjectId('656b42b3f43aad980e839799'), ObjectId('656b42b3f43aad980e83979a'), ObjectId('656b42b3f43aad980e83979b'), ObjectId('656b42b3f43aad980e83979c'), ObjectId('656b42b3f43aad980e83979d'), ObjectId('656b42b3f43aad980e83979e'), ObjectId('656b42b3f43aad980e83979f'), ObjectId('656b42b3f43aad980e8397a0'), ObjectId('656b42b3f43aad980e8397a1'), ObjectId('656b42b3f43aad980e8397a2'), ObjectId('656b42b3f43aad980e8397a3'), ObjectId('656b42b3f43aad980e8397a4'), ObjectId('656b42b3f43aad980e8397a5'), ObjectId('656b42b3f43aad980e8397a6'), ObjectId('656b42b3f43aad980e8397a7'), ObjectId('656b42b3f43aad980e8397a8'), ObjectId('656b42b3f43aad980e8397a9'), ObjectId('656b42b3f43aad980e8397aa'), ObjectId('656b42b3f43aad980e8397ab'), ObjectId('656b42b3f43aad980e8397ac'), ObjectId('656b42b3f43aad980e8397ad'), ObjectId('656b42b3f43aad980e8397ae'), ObjectId('656b42b3f43aad980e8397af'), ObjectId('656b42b3f43aad980e8397b0'), ObjectId('656b42b3f43aad980e8397b1'), ObjectId('656b42b3f43aad980e8397b2'), ObjectId('656b42b3f43aad980e8397b3'), ObjectId('656b42b3f43aad980e8397b4'), ObjectId('656b42b3f43aad980e8397b5'), ObjectId('656b42b3f43aad980e8397b6'), ObjectId('656b42b3f43aad980e8397b7'), ObjectId('656b42b3f43aad980e8397b8'), ObjectId('656b42b3f43aad980e8397b9'), ObjectId('656b42b3f43aad980e8397ba'), ObjectId('656b42b3f43aad980e8397bb'), ObjectId('656b42b3f43aad980e8397bc'), ObjectId('656b42b3f43aad980e8397bd'), ObjectId('656b42b3f43aad980e8397be'), ObjectId('656b42b3f43aad980e8397bf'), ObjectId('656b42b3f43aad980e8397c0'), ObjectId('656b42b3f43aad980e8397c1'), ObjectId('656b42b3f43aad980e8397c2'), ObjectId('656b42b3f43aad980e8397c3'), ObjectId('656b42b3f43aad980e8397c4'), ObjectId('656b42b3f43aad980e8397c5'), ObjectId('656b42b3f43aad980e8397c6'), ObjectId('656b42b3f43aad980e8397c7'), ObjectId('656b42b3f43aad980e8397c8'), ObjectId('656b42b3f43aad980e8397c9'), ObjectId('656b42b3f43aad980e8397ca'), ObjectId('656b42b3f43aad980e8397cb'), ObjectId('656b42b3f43aad980e8397cc'), ObjectId('656b42b3f43aad980e8397cd'), ObjectId('656b42b3f43aad980e8397ce'), ObjectId('656b42b3f43aad980e8397cf'), ObjectId('656b42b3f43aad980e8397d0'), ObjectId('656b42b3f43aad980e8397d1'), ObjectId('656b42b3f43aad980e8397d2'), ObjectId('656b42b3f43aad980e8397d3'), ObjectId('656b42b3f43aad980e8397d4'), ObjectId('656b42b3f43aad980e8397d5'), ObjectId('656b42b3f43aad980e8397d6'), ObjectId('656b42b3f43aad980e8397d7'), ObjectId('656b42b3f43aad980e8397d8'), ObjectId('656b42b3f43aad980e8397d9'), ObjectId('656b42b3f43aad980e8397da'), ObjectId('656b42b3f43aad980e8397db'), ObjectId('656b42b3f43aad980e8397dc'), ObjectId('656b42b3f43aad980e8397dd'), ObjectId('656b42b3f43aad980e8397de'), ObjectId('656b42b3f43aad980e8397df'), ObjectId('656b42b3f43aad980e8397e0'), ObjectId('656b42b3f43aad980e8397e1'), ObjectId('656b42b3f43aad980e8397e2'), ObjectId('656b42b3f43aad980e8397e3'), ObjectId('656b42b3f43aad980e8397e4'), ObjectId('656b42b3f43aad980e8397e5'), ObjectId('656b42b3f43aad980e8397e6'), ObjectId('656b42b3f43aad980e8397e7'), ObjectId('656b42b3f43aad980e8397e8'), ObjectId('656b42b3f43aad980e8397e9'), ObjectId('656b42b3f43aad980e8397ea'), ObjectId('656b42b3f43aad980e8397eb'), ObjectId('656b42b3f43aad980e8397ec'), ObjectId('656b42b3f43aad980e8397ed'), ObjectId('656b42b3f43aad980e8397ee'), ObjectId('656b42b3f43aad980e8397ef'), ObjectId('656b42b3f43aad980e8397f0'), ObjectId('656b42b3f43aad980e8397f1'), ObjectId('656b42b3f43aad980e8397f2'), ObjectId('656b42b3f43aad980e8397f3'), ObjectId('656b42b3f43aad980e8397f4'), ObjectId('656b42b3f43aad980e8397f5'), ObjectId('656b42b3f43aad980e8397f6'), ObjectId('656b42b3f43aad980e8397f7'), ObjectId('656b42b3f43aad980e8397f8'), ObjectId('656b42b3f43aad980e8397f9'), ObjectId('656b42b3f43aad980e8397fa'), ObjectId('656b42b3f43aad980e8397fb'), ObjectId('656b42b3f43aad980e8397fc'), ObjectId('656b42b3f43aad980e8397fd'), ObjectId('656b42b3f43aad980e8397fe'), ObjectId('656b42b3f43aad980e8397ff'), ObjectId('656b42b3f43aad980e839800'), ObjectId('656b42b3f43aad980e839801'), ObjectId('656b42b3f43aad980e839802'), ObjectId('656b42b3f43aad980e839803'), ObjectId('656b42b3f43aad980e839804'), ObjectId('656b42b3f43aad980e839805'), ObjectId('656b42b3f43aad980e839806'), ObjectId('656b42b3f43aad980e839807'), ObjectId('656b42b3f43aad980e839808'), ObjectId('656b42b3f43aad980e839809'), ObjectId('656b42b3f43aad980e83980a'), ObjectId('656b42b3f43aad980e83980b'), ObjectId('656b42b3f43aad980e83980c'), ObjectId('656b42b3f43aad980e83980d'), ObjectId('656b42b3f43aad980e83980e'), ObjectId('656b42b3f43aad980e83980f'), ObjectId('656b42b3f43aad980e839810'), ObjectId('656b42b3f43aad980e839811'), ObjectId('656b42b3f43aad980e839812'), ObjectId('656b42b3f43aad980e839813'), ObjectId('656b42b3f43aad980e839814'), ObjectId('656b42b3f43aad980e839815'), ObjectId('656b42b3f43aad980e839816'), ObjectId('656b42b3f43aad980e839817'), ObjectId('656b42b3f43aad980e839818'), ObjectId('656b42b3f43aad980e839819'), ObjectId('656b42b3f43aad980e83981a'), ObjectId('656b42b3f43aad980e83981b'), ObjectId('656b42b3f43aad980e83981c'), ObjectId('656b42b3f43aad980e83981d'), ObjectId('656b42b3f43aad980e83981e'), ObjectId('656b42b3f43aad980e83981f'), ObjectId('656b42b3f43aad980e839820'), ObjectId('656b42b3f43aad980e839821'), ObjectId('656b42b3f43aad980e839822'), ObjectId('656b42b3f43aad980e839823'), ObjectId('656b42b3f43aad980e839824'), ObjectId('656b42b3f43aad980e839825'), ObjectId('656b42b3f43aad980e839826'), ObjectId('656b42b3f43aad980e839827'), ObjectId('656b42b3f43aad980e839828'), ObjectId('656b42b3f43aad980e839829'), ObjectId('656b42b3f43aad980e83982a'), ObjectId('656b42b3f43aad980e83982b'), ObjectId('656b42b3f43aad980e83982c'), ObjectId('656b42b3f43aad980e83982d'), ObjectId('656b42b3f43aad980e83982e'), ObjectId('656b42b3f43aad980e83982f'), ObjectId('656b42b3f43aad980e839830'), ObjectId('656b42b3f43aad980e839831'), ObjectId('656b42b3f43aad980e839832'), ObjectId('656b42b3f43aad980e839833'), ObjectId('656b42b3f43aad980e839834'), ObjectId('656b42b3f43aad980e839835'), ObjectId('656b42b3f43aad980e839836'), ObjectId('656b42b3f43aad980e839837'), ObjectId('656b42b3f43aad980e839838'), ObjectId('656b42b3f43aad980e839839'), ObjectId('656b42b3f43aad980e83983a'), ObjectId('656b42b3f43aad980e83983b'), ObjectId('656b42b3f43aad980e83983c'), ObjectId('656b42b3f43aad980e83983d'), ObjectId('656b42b3f43aad980e83983e'), ObjectId('656b42b3f43aad980e83983f'), ObjectId('656b42b3f43aad980e839840'), ObjectId('656b42b3f43aad980e839841'), ObjectId('656b42b3f43aad980e839842'), ObjectId('656b42b3f43aad980e839843'), ObjectId('656b42b3f43aad980e839844'), ObjectId('656b42b3f43aad980e839845'), ObjectId('656b42b3f43aad980e839846'), ObjectId('656b42b3f43aad980e839847'), ObjectId('656b42b3f43aad980e839848'), ObjectId('656b42b3f43aad980e839849'), ObjectId('656b42b3f43aad980e83984a'), ObjectId('656b42b3f43aad980e83984b'), ObjectId('656b42b3f43aad980e83984c'), ObjectId('656b42b3f43aad980e83984d'), ObjectId('656b42b3f43aad980e83984e'), ObjectId('656b42b3f43aad980e83984f'), ObjectId('656b42b3f43aad980e839850'), ObjectId('656b42b3f43aad980e839851'), ObjectId('656b42b3f43aad980e839852'), ObjectId('656b42b3f43aad980e839853'), ObjectId('656b42b3f43aad980e839854'), ObjectId('656b42b3f43aad980e839855'), ObjectId('656b42b3f43aad980e839856'), ObjectId('656b42b3f43aad980e839857'), ObjectId('656b42b3f43aad980e839858'), ObjectId('656b42b3f43aad980e839859'), ObjectId('656b42b3f43aad980e83985a'), ObjectId('656b42b3f43aad980e83985b'), ObjectId('656b42b3f43aad980e83985c'), ObjectId('656b42b3f43aad980e83985d'), ObjectId('656b42b3f43aad980e83985e'), ObjectId('656b42b3f43aad980e83985f'), ObjectId('656b42b3f43aad980e839860'), ObjectId('656b42b3f43aad980e839861'), ObjectId('656b42b3f43aad980e839862'), ObjectId('656b42b3f43aad980e839863'), ObjectId('656b42b3f43aad980e839864'), ObjectId('656b42b3f43aad980e839865'), ObjectId('656b42b3f43aad980e839866'), ObjectId('656b42b3f43aad980e839867'), ObjectId('656b42b3f43aad980e839868'), ObjectId('656b42b3f43aad980e839869'), ObjectId('656b42b3f43aad980e83986a'), ObjectId('656b42b3f43aad980e83986b'), ObjectId('656b42b3f43aad980e83986c'), ObjectId('656b42b3f43aad980e83986d'), ObjectId('656b42b3f43aad980e83986e'), ObjectId('656b42b3f43aad980e83986f'), ObjectId('656b42b3f43aad980e839870'), ObjectId('656b42b3f43aad980e839871'), ObjectId('656b42b3f43aad980e839872'), ObjectId('656b42b3f43aad980e839873'), ObjectId('656b42b3f43aad980e839874'), ObjectId('656b42b3f43aad980e839875'), ObjectId('656b42b3f43aad980e839876'), ObjectId('656b42b3f43aad980e839877'), ObjectId('656b42b3f43aad980e839878'), ObjectId('656b42b3f43aad980e839879'), ObjectId('656b42b3f43aad980e83987a'), ObjectId('656b42b3f43aad980e83987b'), ObjectId('656b42b3f43aad980e83987c'), ObjectId('656b42b3f43aad980e83987d'), ObjectId('656b42b3f43aad980e83987e'), ObjectId('656b42b3f43aad980e83987f'), ObjectId('656b42b3f43aad980e839880'), ObjectId('656b42b3f43aad980e839881'), ObjectId('656b42b3f43aad980e839882'), ObjectId('656b42b3f43aad980e839883'), ObjectId('656b42b3f43aad980e839884'), ObjectId('656b42b3f43aad980e839885'), ObjectId('656b42b3f43aad980e839886'), ObjectId('656b42b3f43aad980e839887'), ObjectId('656b42b3f43aad980e839888'), ObjectId('656b42b3f43aad980e839889'), ObjectId('656b42b3f43aad980e83988a'), ObjectId('656b42b3f43aad980e83988b'), ObjectId('656b42b3f43aad980e83988c'), ObjectId('656b42b3f43aad980e83988d'), ObjectId('656b42b3f43aad980e83988e'), ObjectId('656b42b3f43aad980e83988f'), ObjectId('656b42b3f43aad980e839890'), ObjectId('656b42b3f43aad980e839891'), ObjectId('656b42b3f43aad980e839892'), ObjectId('656b42b3f43aad980e839893'), ObjectId('656b42b3f43aad980e839894'), ObjectId('656b42b3f43aad980e839895'), ObjectId('656b42b3f43aad980e839896'), ObjectId('656b42b3f43aad980e839897'), ObjectId('656b42b3f43aad980e839898'), ObjectId('656b42b3f43aad980e839899'), ObjectId('656b42b3f43aad980e83989a'), ObjectId('656b42b3f43aad980e83989b'), ObjectId('656b42b3f43aad980e83989c'), ObjectId('656b42b3f43aad980e83989d'), ObjectId('656b42b3f43aad980e83989e'), ObjectId('656b42b3f43aad980e83989f'), ObjectId('656b42b3f43aad980e8398a0'), ObjectId('656b42b3f43aad980e8398a1'), ObjectId('656b42b3f43aad980e8398a2'), ObjectId('656b42b3f43aad980e8398a3'), ObjectId('656b42b3f43aad980e8398a4'), ObjectId('656b42b3f43aad980e8398a5'), ObjectId('656b42b3f43aad980e8398a6'), ObjectId('656b42b3f43aad980e8398a7'), ObjectId('656b42b3f43aad980e8398a8'), ObjectId('656b42b3f43aad980e8398a9'), ObjectId('656b42b3f43aad980e8398aa'), ObjectId('656b42b3f43aad980e8398ab'), ObjectId('656b42b3f43aad980e8398ac'), ObjectId('656b42b3f43aad980e8398ad'), ObjectId('656b42b3f43aad980e8398ae'), ObjectId('656b42b3f43aad980e8398af'), ObjectId('656b42b3f43aad980e8398b0'), ObjectId('656b42b3f43aad980e8398b1'), ObjectId('656b42b3f43aad980e8398b2'), ObjectId('656b42b3f43aad980e8398b3'), ObjectId('656b42b3f43aad980e8398b4'), ObjectId('656b42b3f43aad980e8398b5'), ObjectId('656b42b3f43aad980e8398b6'), ObjectId('656b42b3f43aad980e8398b7'), ObjectId('656b42b3f43aad980e8398b8'), ObjectId('656b42b3f43aad980e8398b9'), ObjectId('656b42b3f43aad980e8398ba'), ObjectId('656b42b3f43aad980e8398bb'), ObjectId('656b42b3f43aad980e8398bc'), ObjectId('656b42b3f43aad980e8398bd'), ObjectId('656b42b3f43aad980e8398be'), ObjectId('656b42b3f43aad980e8398bf'), ObjectId('656b42b3f43aad980e8398c0'), ObjectId('656b42b3f43aad980e8398c1'), ObjectId('656b42b3f43aad980e8398c2'), ObjectId('656b42b3f43aad980e8398c3'), ObjectId('656b42b3f43aad980e8398c4'), ObjectId('656b42b3f43aad980e8398c5'), ObjectId('656b42b3f43aad980e8398c6'), ObjectId('656b42b3f43aad980e8398c7'), ObjectId('656b42b3f43aad980e8398c8'), ObjectId('656b42b3f43aad980e8398c9'), ObjectId('656b42b3f43aad980e8398ca'), ObjectId('656b42b3f43aad980e8398cb'), ObjectId('656b42b3f43aad980e8398cc'), ObjectId('656b42b3f43aad980e8398cd'), ObjectId('656b42b3f43aad980e8398ce'), ObjectId('656b42b3f43aad980e8398cf'), ObjectId('656b42b3f43aad980e8398d0'), ObjectId('656b42b3f43aad980e8398d1'), ObjectId('656b42b3f43aad980e8398d2'), ObjectId('656b42b3f43aad980e8398d3'), ObjectId('656b42b3f43aad980e8398d4'), ObjectId('656b42b3f43aad980e8398d5'), ObjectId('656b42b3f43aad980e8398d6'), ObjectId('656b42b3f43aad980e8398d7'), ObjectId('656b42b3f43aad980e8398d8'), ObjectId('656b42b3f43aad980e8398d9'), ObjectId('656b42b3f43aad980e8398da'), ObjectId('656b42b3f43aad980e8398db'), ObjectId('656b42b3f43aad980e8398dc'), ObjectId('656b42b3f43aad980e8398dd'), ObjectId('656b42b3f43aad980e8398de'), ObjectId('656b42b3f43aad980e8398df'), ObjectId('656b42b3f43aad980e8398e0'), ObjectId('656b42b3f43aad980e8398e1'), ObjectId('656b42b3f43aad980e8398e2'), ObjectId('656b42b3f43aad980e8398e3'), ObjectId('656b42b3f43aad980e8398e4'), ObjectId('656b42b3f43aad980e8398e5'), ObjectId('656b42b3f43aad980e8398e6'), ObjectId('656b42b3f43aad980e8398e7'), ObjectId('656b42b3f43aad980e8398e8'), ObjectId('656b42b3f43aad980e8398e9'), ObjectId('656b42b3f43aad980e8398ea'), ObjectId('656b42b3f43aad980e8398eb'), ObjectId('656b42b3f43aad980e8398ec'), ObjectId('656b42b3f43aad980e8398ed'), ObjectId('656b42b3f43aad980e8398ee'), ObjectId('656b42b3f43aad980e8398ef'), ObjectId('656b42b3f43aad980e8398f0'), ObjectId('656b42b3f43aad980e8398f1'), ObjectId('656b42b3f43aad980e8398f2'), ObjectId('656b42b3f43aad980e8398f3'), ObjectId('656b42b3f43aad980e8398f4'), ObjectId('656b42b3f43aad980e8398f5'), ObjectId('656b42b3f43aad980e8398f6'), ObjectId('656b42b3f43aad980e8398f7'), ObjectId('656b42b3f43aad980e8398f8'), ObjectId('656b42b3f43aad980e8398f9'), ObjectId('656b42b3f43aad980e8398fa'), ObjectId('656b42b3f43aad980e8398fb'), ObjectId('656b42b3f43aad980e8398fc'), ObjectId('656b42b3f43aad980e8398fd'), ObjectId('656b42b3f43aad980e8398fe'), ObjectId('656b42b3f43aad980e8398ff'), ObjectId('656b42b3f43aad980e839900'), ObjectId('656b42b3f43aad980e839901'), ObjectId('656b42b3f43aad980e839902'), ObjectId('656b42b3f43aad980e839903'), ObjectId('656b42b3f43aad980e839904'), ObjectId('656b42b3f43aad980e839905'), ObjectId('656b42b3f43aad980e839906'), ObjectId('656b42b3f43aad980e839907'), ObjectId('656b42b3f43aad980e839908'), ObjectId('656b42b3f43aad980e839909'), ObjectId('656b42b3f43aad980e83990a'), ObjectId('656b42b3f43aad980e83990b'), ObjectId('656b42b3f43aad980e83990c'), ObjectId('656b42b3f43aad980e83990d'), ObjectId('656b42b3f43aad980e83990e'), ObjectId('656b42b3f43aad980e83990f'), ObjectId('656b42b3f43aad980e839910'), ObjectId('656b42b3f43aad980e839911'), ObjectId('656b42b3f43aad980e839912'), ObjectId('656b42b3f43aad980e839913'), ObjectId('656b42b3f43aad980e839914'), ObjectId('656b42b3f43aad980e839915'), ObjectId('656b42b3f43aad980e839916'), ObjectId('656b42b3f43aad980e839917'), ObjectId('656b42b3f43aad980e839918'), ObjectId('656b42b3f43aad980e839919'), ObjectId('656b42b3f43aad980e83991a'), ObjectId('656b42b3f43aad980e83991b'), ObjectId('656b42b3f43aad980e83991c'), ObjectId('656b42b3f43aad980e83991d'), ObjectId('656b42b3f43aad980e83991e'), ObjectId('656b42b3f43aad980e83991f'), ObjectId('656b42b3f43aad980e839920'), ObjectId('656b42b3f43aad980e839921'), ObjectId('656b42b3f43aad980e839922'), ObjectId('656b42b3f43aad980e839923'), ObjectId('656b42b3f43aad980e839924'), ObjectId('656b42b3f43aad980e839925'), ObjectId('656b42b3f43aad980e839926'), ObjectId('656b42b3f43aad980e839927'), ObjectId('656b42b3f43aad980e839928'), ObjectId('656b42b3f43aad980e839929'), ObjectId('656b42b3f43aad980e83992a'), ObjectId('656b42b3f43aad980e83992b'), ObjectId('656b42b3f43aad980e83992c'), ObjectId('656b42b3f43aad980e83992d'), ObjectId('656b42b3f43aad980e83992e'), ObjectId('656b42b3f43aad980e83992f'), ObjectId('656b42b3f43aad980e839930'), ObjectId('656b42b3f43aad980e839931'), ObjectId('656b42b3f43aad980e839932'), ObjectId('656b42b3f43aad980e839933'), ObjectId('656b42b3f43aad980e839934'), ObjectId('656b42b3f43aad980e839935'), ObjectId('656b42b3f43aad980e839936'), ObjectId('656b42b3f43aad980e839937'), ObjectId('656b42b3f43aad980e839938'), ObjectId('656b42b3f43aad980e839939'), ObjectId('656b42b3f43aad980e83993a'), ObjectId('656b42b3f43aad980e83993b'), ObjectId('656b42b3f43aad980e83993c'), ObjectId('656b42b3f43aad980e83993d'), ObjectId('656b42b3f43aad980e83993e'), ObjectId('656b42b3f43aad980e83993f'), ObjectId('656b42b3f43aad980e839940'), ObjectId('656b42b3f43aad980e839941'), ObjectId('656b42b3f43aad980e839942'), ObjectId('656b42b3f43aad980e839943'), ObjectId('656b42b3f43aad980e839944'), ObjectId('656b42b3f43aad980e839945'), ObjectId('656b42b3f43aad980e839946'), ObjectId('656b42b3f43aad980e839947'), ObjectId('656b42b3f43aad980e839948'), ObjectId('656b42b3f43aad980e839949'), ObjectId('656b42b3f43aad980e83994a'), ObjectId('656b42b3f43aad980e83994b'), ObjectId('656b42b3f43aad980e83994c'), ObjectId('656b42b3f43aad980e83994d'), ObjectId('656b42b3f43aad980e83994e'), ObjectId('656b42b3f43aad980e83994f'), ObjectId('656b42b3f43aad980e839950'), ObjectId('656b42b3f43aad980e839951'), ObjectId('656b42b3f43aad980e839952'), ObjectId('656b42b3f43aad980e839953'), ObjectId('656b42b3f43aad980e839954'), ObjectId('656b42b3f43aad980e839955'), ObjectId('656b42b3f43aad980e839956'), ObjectId('656b42b3f43aad980e839957'), ObjectId('656b42b3f43aad980e839958'), ObjectId('656b42b3f43aad980e839959'), ObjectId('656b42b3f43aad980e83995a'), ObjectId('656b42b3f43aad980e83995b'), ObjectId('656b42b3f43aad980e83995c'), ObjectId('656b42b3f43aad980e83995d'), ObjectId('656b42b3f43aad980e83995e'), ObjectId('656b42b3f43aad980e83995f'), ObjectId('656b42b3f43aad980e839960'), ObjectId('656b42b3f43aad980e839961'), ObjectId('656b42b3f43aad980e839962'), ObjectId('656b42b3f43aad980e839963'), ObjectId('656b42b3f43aad980e839964'), ObjectId('656b42b3f43aad980e839965'), ObjectId('656b42b3f43aad980e839966'), ObjectId('656b42b3f43aad980e839967'), ObjectId('656b42b3f43aad980e839968'), ObjectId('656b42b3f43aad980e839969'), ObjectId('656b42b3f43aad980e83996a'), ObjectId('656b42b3f43aad980e83996b'), ObjectId('656b42b3f43aad980e83996c'), ObjectId('656b42b3f43aad980e83996d'), ObjectId('656b42b3f43aad980e83996e'), ObjectId('656b42b3f43aad980e83996f'), ObjectId('656b42b3f43aad980e839970'), ObjectId('656b42b3f43aad980e839971'), ObjectId('656b42b3f43aad980e839972'), ObjectId('656b42b3f43aad980e839973'), ObjectId('656b42b3f43aad980e839974'), ObjectId('656b42b3f43aad980e839975'), ObjectId('656b42b3f43aad980e839976'), ObjectId('656b42b3f43aad980e839977'), ObjectId('656b42b3f43aad980e839978'), ObjectId('656b42b3f43aad980e839979'), ObjectId('656b42b3f43aad980e83997a'), ObjectId('656b42b3f43aad980e83997b'), ObjectId('656b42b3f43aad980e83997c'), ObjectId('656b42b3f43aad980e83997d'), ObjectId('656b42b3f43aad980e83997e'), ObjectId('656b42b3f43aad980e83997f'), ObjectId('656b42b3f43aad980e839980'), ObjectId('656b42b3f43aad980e839981'), ObjectId('656b42b3f43aad980e839982'), ObjectId('656b42b3f43aad980e839983'), ObjectId('656b42b3f43aad980e839984'), ObjectId('656b42b3f43aad980e839985'), ObjectId('656b42b3f43aad980e839986'), ObjectId('656b42b3f43aad980e839987'), ObjectId('656b42b3f43aad980e839988'), ObjectId('656b42b3f43aad980e839989'), ObjectId('656b42b3f43aad980e83998a'), ObjectId('656b42b3f43aad980e83998b'), ObjectId('656b42b3f43aad980e83998c'), ObjectId('656b42b3f43aad980e83998d'), ObjectId('656b42b3f43aad980e83998e'), ObjectId('656b42b3f43aad980e83998f'), ObjectId('656b42b3f43aad980e839990'), ObjectId('656b42b3f43aad980e839991'), ObjectId('656b42b3f43aad980e839992'), ObjectId('656b42b3f43aad980e839993'), ObjectId('656b42b3f43aad980e839994'), ObjectId('656b42b3f43aad980e839995'), ObjectId('656b42b3f43aad980e839996'), ObjectId('656b42b3f43aad980e839997'), ObjectId('656b42b3f43aad980e839998'), ObjectId('656b42b3f43aad980e839999'), ObjectId('656b42b3f43aad980e83999a'), ObjectId('656b42b3f43aad980e83999b'), ObjectId('656b42b3f43aad980e83999c'), ObjectId('656b42b3f43aad980e83999d'), ObjectId('656b42b3f43aad980e83999e'), ObjectId('656b42b3f43aad980e83999f'), ObjectId('656b42b3f43aad980e8399a0'), ObjectId('656b42b3f43aad980e8399a1'), ObjectId('656b42b3f43aad980e8399a2'), ObjectId('656b42b3f43aad980e8399a3'), ObjectId('656b42b3f43aad980e8399a4'), ObjectId('656b42b3f43aad980e8399a5'), ObjectId('656b42b3f43aad980e8399a6'), ObjectId('656b42b3f43aad980e8399a7'), ObjectId('656b42b3f43aad980e8399a8'), ObjectId('656b42b3f43aad980e8399a9'), ObjectId('656b42b3f43aad980e8399aa'), ObjectId('656b42b3f43aad980e8399ab'), ObjectId('656b42b3f43aad980e8399ac'), ObjectId('656b42b3f43aad980e8399ad'), ObjectId('656b42b3f43aad980e8399ae'), ObjectId('656b42b3f43aad980e8399af'), ObjectId('656b42b3f43aad980e8399b0'), ObjectId('656b42b3f43aad980e8399b1'), ObjectId('656b42b3f43aad980e8399b2'), ObjectId('656b42b3f43aad980e8399b3'), ObjectId('656b42b3f43aad980e8399b4'), ObjectId('656b42b3f43aad980e8399b5'), ObjectId('656b42b3f43aad980e8399b6'), ObjectId('656b42b3f43aad980e8399b7'), ObjectId('656b42b3f43aad980e8399b8'), ObjectId('656b42b3f43aad980e8399b9'), ObjectId('656b42b3f43aad980e8399ba'), ObjectId('656b42b3f43aad980e8399bb'), ObjectId('656b42b3f43aad980e8399bc'), ObjectId('656b42b3f43aad980e8399bd'), ObjectId('656b42b3f43aad980e8399be'), ObjectId('656b42b3f43aad980e8399bf'), ObjectId('656b42b3f43aad980e8399c0'), ObjectId('656b42b3f43aad980e8399c1'), ObjectId('656b42b3f43aad980e8399c2'), ObjectId('656b42b3f43aad980e8399c3'), ObjectId('656b42b3f43aad980e8399c4'), ObjectId('656b42b3f43aad980e8399c5'), ObjectId('656b42b3f43aad980e8399c6'), ObjectId('656b42b3f43aad980e8399c7'), ObjectId('656b42b3f43aad980e8399c8'), ObjectId('656b42b3f43aad980e8399c9'), ObjectId('656b42b3f43aad980e8399ca'), ObjectId('656b42b3f43aad980e8399cb'), ObjectId('656b42b3f43aad980e8399cc'), ObjectId('656b42b3f43aad980e8399cd'), ObjectId('656b42b3f43aad980e8399ce'), ObjectId('656b42b3f43aad980e8399cf'), ObjectId('656b42b3f43aad980e8399d0'), ObjectId('656b42b3f43aad980e8399d1'), ObjectId('656b42b3f43aad980e8399d2'), ObjectId('656b42b3f43aad980e8399d3'), ObjectId('656b42b3f43aad980e8399d4'), ObjectId('656b42b3f43aad980e8399d5'), ObjectId('656b42b3f43aad980e8399d6'), ObjectId('656b42b3f43aad980e8399d7'), ObjectId('656b42b3f43aad980e8399d8'), ObjectId('656b42b3f43aad980e8399d9'), ObjectId('656b42b3f43aad980e8399da'), ObjectId('656b42b3f43aad980e8399db'), ObjectId('656b42b3f43aad980e8399dc'), ObjectId('656b42b3f43aad980e8399dd'), ObjectId('656b42b3f43aad980e8399de'), ObjectId('656b42b3f43aad980e8399df'), ObjectId('656b42b3f43aad980e8399e0'), ObjectId('656b42b3f43aad980e8399e1'), ObjectId('656b42b3f43aad980e8399e2'), ObjectId('656b42b3f43aad980e8399e3'), ObjectId('656b42b3f43aad980e8399e4'), ObjectId('656b42b3f43aad980e8399e5'), ObjectId('656b42b3f43aad980e8399e6'), ObjectId('656b42b3f43aad980e8399e7'), ObjectId('656b42b3f43aad980e8399e8'), ObjectId('656b42b3f43aad980e8399e9'), ObjectId('656b42b3f43aad980e8399ea'), ObjectId('656b42b3f43aad980e8399eb'), ObjectId('656b42b3f43aad980e8399ec'), ObjectId('656b42b3f43aad980e8399ed'), ObjectId('656b42b3f43aad980e8399ee'), ObjectId('656b42b3f43aad980e8399ef'), ObjectId('656b42b3f43aad980e8399f0'), ObjectId('656b42b3f43aad980e8399f1'), ObjectId('656b42b3f43aad980e8399f2'), ObjectId('656b42b3f43aad980e8399f3'), ObjectId('656b42b3f43aad980e8399f4'), ObjectId('656b42b3f43aad980e8399f5'), ObjectId('656b42b3f43aad980e8399f6'), ObjectId('656b42b3f43aad980e8399f7'), ObjectId('656b42b3f43aad980e8399f8'), ObjectId('656b42b3f43aad980e8399f9'), ObjectId('656b42b3f43aad980e8399fa'), ObjectId('656b42b3f43aad980e8399fb'), ObjectId('656b42b3f43aad980e8399fc'), ObjectId('656b42b3f43aad980e8399fd'), ObjectId('656b42b3f43aad980e8399fe'), ObjectId('656b42b3f43aad980e8399ff'), ObjectId('656b42b3f43aad980e839a00'), ObjectId('656b42b3f43aad980e839a01'), ObjectId('656b42b3f43aad980e839a02'), ObjectId('656b42b3f43aad980e839a03'), ObjectId('656b42b3f43aad980e839a04'), ObjectId('656b42b3f43aad980e839a05'), ObjectId('656b42b3f43aad980e839a06'), ObjectId('656b42b3f43aad980e839a07'), ObjectId('656b42b3f43aad980e839a08'), ObjectId('656b42b3f43aad980e839a09'), ObjectId('656b42b3f43aad980e839a0a'), ObjectId('656b42b3f43aad980e839a0b'), ObjectId('656b42b3f43aad980e839a0c'), ObjectId('656b42b3f43aad980e839a0d'), ObjectId('656b42b3f43aad980e839a0e'), ObjectId('656b42b3f43aad980e839a0f'), ObjectId('656b42b3f43aad980e839a10'), ObjectId('656b42b3f43aad980e839a11'), ObjectId('656b42b3f43aad980e839a12'), ObjectId('656b42b3f43aad980e839a13'), ObjectId('656b42b3f43aad980e839a14'), ObjectId('656b42b3f43aad980e839a15'), ObjectId('656b42b3f43aad980e839a16'), ObjectId('656b42b3f43aad980e839a17'), ObjectId('656b42b3f43aad980e839a18'), ObjectId('656b42b3f43aad980e839a19'), ObjectId('656b42b3f43aad980e839a1a'), ObjectId('656b42b3f43aad980e839a1b'), ObjectId('656b42b3f43aad980e839a1c'), ObjectId('656b42b3f43aad980e839a1d'), ObjectId('656b42b3f43aad980e839a1e'), ObjectId('656b42b3f43aad980e839a1f'), ObjectId('656b42b3f43aad980e839a20'), ObjectId('656b42b3f43aad980e839a21'), ObjectId('656b42b3f43aad980e839a22'), ObjectId('656b42b3f43aad980e839a23'), ObjectId('656b42b3f43aad980e839a24'), ObjectId('656b42b3f43aad980e839a25'), ObjectId('656b42b3f43aad980e839a26'), ObjectId('656b42b3f43aad980e839a27'), ObjectId('656b42b3f43aad980e839a28'), ObjectId('656b42b3f43aad980e839a29'), ObjectId('656b42b3f43aad980e839a2a'), ObjectId('656b42b3f43aad980e839a2b'), ObjectId('656b42b3f43aad980e839a2c'), ObjectId('656b42b3f43aad980e839a2d'), ObjectId('656b42b3f43aad980e839a2e'), ObjectId('656b42b3f43aad980e839a2f'), ObjectId('656b42b3f43aad980e839a30'), ObjectId('656b42b3f43aad980e839a31'), ObjectId('656b42b3f43aad980e839a32'), ObjectId('656b42b3f43aad980e839a33'), ObjectId('656b42b3f43aad980e839a34'), ObjectId('656b42b3f43aad980e839a35'), ObjectId('656b42b3f43aad980e839a36'), ObjectId('656b42b3f43aad980e839a37'), ObjectId('656b42b3f43aad980e839a38'), ObjectId('656b42b3f43aad980e839a39'), ObjectId('656b42b3f43aad980e839a3a'), ObjectId('656b42b3f43aad980e839a3b'), ObjectId('656b42b3f43aad980e839a3c'), ObjectId('656b42b3f43aad980e839a3d'), ObjectId('656b42b3f43aad980e839a3e'), ObjectId('656b42b3f43aad980e839a3f'), ObjectId('656b42b3f43aad980e839a40'), ObjectId('656b42b3f43aad980e839a41'), ObjectId('656b42b3f43aad980e839a42'), ObjectId('656b42b3f43aad980e839a43'), ObjectId('656b42b3f43aad980e839a44'), ObjectId('656b42b3f43aad980e839a45'), ObjectId('656b42b3f43aad980e839a46'), ObjectId('656b42b3f43aad980e839a47'), ObjectId('656b42b3f43aad980e839a48'), ObjectId('656b42b3f43aad980e839a49'), ObjectId('656b42b3f43aad980e839a4a'), ObjectId('656b42b3f43aad980e839a4b'), ObjectId('656b42b3f43aad980e839a4c'), ObjectId('656b42b3f43aad980e839a4d'), ObjectId('656b42b3f43aad980e839a4e'), ObjectId('656b42b3f43aad980e839a4f'), ObjectId('656b42b3f43aad980e839a50'), ObjectId('656b42b3f43aad980e839a51'), ObjectId('656b42b3f43aad980e839a52'), ObjectId('656b42b3f43aad980e839a53'), ObjectId('656b42b3f43aad980e839a54'), ObjectId('656b42b3f43aad980e839a55'), ObjectId('656b42b3f43aad980e839a56'), ObjectId('656b42b3f43aad980e839a57'), ObjectId('656b42b3f43aad980e839a58'), ObjectId('656b42b3f43aad980e839a59'), ObjectId('656b42b3f43aad980e839a5a'), ObjectId('656b42b3f43aad980e839a5b'), ObjectId('656b42b3f43aad980e839a5c'), ObjectId('656b42b3f43aad980e839a5d'), ObjectId('656b42b3f43aad980e839a5e'), ObjectId('656b42b3f43aad980e839a5f'), ObjectId('656b42b3f43aad980e839a60'), ObjectId('656b42b3f43aad980e839a61'), ObjectId('656b42b3f43aad980e839a62'), ObjectId('656b42b3f43aad980e839a63'), ObjectId('656b42b3f43aad980e839a64'), ObjectId('656b42b3f43aad980e839a65'), ObjectId('656b42b3f43aad980e839a66'), ObjectId('656b42b3f43aad980e839a67'), ObjectId('656b42b3f43aad980e839a68'), ObjectId('656b42b3f43aad980e839a69'), ObjectId('656b42b3f43aad980e839a6a'), ObjectId('656b42b3f43aad980e839a6b'), ObjectId('656b42b3f43aad980e839a6c'), ObjectId('656b42b3f43aad980e839a6d'), ObjectId('656b42b3f43aad980e839a6e'), ObjectId('656b42b3f43aad980e839a6f'), ObjectId('656b42b3f43aad980e839a70'), ObjectId('656b42b3f43aad980e839a71'), ObjectId('656b42b3f43aad980e839a72'), ObjectId('656b42b3f43aad980e839a73'), ObjectId('656b42b3f43aad980e839a74'), ObjectId('656b42b3f43aad980e839a75'), ObjectId('656b42b3f43aad980e839a76'), ObjectId('656b42b3f43aad980e839a77'), ObjectId('656b42b3f43aad980e839a78'), ObjectId('656b42b3f43aad980e839a79'), ObjectId('656b42b3f43aad980e839a7a'), ObjectId('656b42b3f43aad980e839a7b'), ObjectId('656b42b3f43aad980e839a7c'), ObjectId('656b42b3f43aad980e839a7d'), ObjectId('656b42b3f43aad980e839a7e'), ObjectId('656b42b3f43aad980e839a7f'), ObjectId('656b42b3f43aad980e839a80'), ObjectId('656b42b3f43aad980e839a81'), ObjectId('656b42b3f43aad980e839a82'), ObjectId('656b42b3f43aad980e839a83'), ObjectId('656b42b3f43aad980e839a84'), ObjectId('656b42b3f43aad980e839a85'), ObjectId('656b42b3f43aad980e839a86'), ObjectId('656b42b3f43aad980e839a87'), ObjectId('656b42b3f43aad980e839a88'), ObjectId('656b42b3f43aad980e839a89'), ObjectId('656b42b3f43aad980e839a8a'), ObjectId('656b42b3f43aad980e839a8b'), ObjectId('656b42b3f43aad980e839a8c'), ObjectId('656b42b3f43aad980e839a8d'), ObjectId('656b42b3f43aad980e839a8e'), ObjectId('656b42b3f43aad980e839a8f'), ObjectId('656b42b3f43aad980e839a90'), ObjectId('656b42b3f43aad980e839a91'), ObjectId('656b42b3f43aad980e839a92'), ObjectId('656b42b3f43aad980e839a93'), ObjectId('656b42b3f43aad980e839a94'), ObjectId('656b42b3f43aad980e839a95'), ObjectId('656b42b3f43aad980e839a96'), ObjectId('656b42b3f43aad980e839a97'), ObjectId('656b42b3f43aad980e839a98'), ObjectId('656b42b3f43aad980e839a99'), ObjectId('656b42b3f43aad980e839a9a'), ObjectId('656b42b3f43aad980e839a9b'), ObjectId('656b42b3f43aad980e839a9c'), ObjectId('656b42b3f43aad980e839a9d'), ObjectId('656b42b3f43aad980e839a9e'), ObjectId('656b42b3f43aad980e839a9f'), ObjectId('656b42b3f43aad980e839aa0'), ObjectId('656b42b3f43aad980e839aa1'), ObjectId('656b42b3f43aad980e839aa2'), ObjectId('656b42b3f43aad980e839aa3'), ObjectId('656b42b3f43aad980e839aa4'), ObjectId('656b42b3f43aad980e839aa5'), ObjectId('656b42b3f43aad980e839aa6'), ObjectId('656b42b3f43aad980e839aa7'), ObjectId('656b42b3f43aad980e839aa8'), ObjectId('656b42b3f43aad980e839aa9'), ObjectId('656b42b3f43aad980e839aaa'), ObjectId('656b42b3f43aad980e839aab'), ObjectId('656b42b3f43aad980e839aac'), ObjectId('656b42b3f43aad980e839aad'), ObjectId('656b42b3f43aad980e839aae'), ObjectId('656b42b3f43aad980e839aaf'), ObjectId('656b42b3f43aad980e839ab0'), ObjectId('656b42b3f43aad980e839ab1'), ObjectId('656b42b3f43aad980e839ab2'), ObjectId('656b42b3f43aad980e839ab3'), ObjectId('656b42b3f43aad980e839ab4'), ObjectId('656b42b3f43aad980e839ab5'), ObjectId('656b42b3f43aad980e839ab6'), ObjectId('656b42b3f43aad980e839ab7'), ObjectId('656b42b3f43aad980e839ab8'), ObjectId('656b42b3f43aad980e839ab9'), ObjectId('656b42b3f43aad980e839aba'), ObjectId('656b42b3f43aad980e839abb'), ObjectId('656b42b3f43aad980e839abc'), ObjectId('656b42b3f43aad980e839abd'), ObjectId('656b42b3f43aad980e839abe'), ObjectId('656b42b3f43aad980e839abf'), ObjectId('656b42b3f43aad980e839ac0'), ObjectId('656b42b3f43aad980e839ac1'), ObjectId('656b42b3f43aad980e839ac2'), ObjectId('656b42b3f43aad980e839ac3'), ObjectId('656b42b3f43aad980e839ac4'), ObjectId('656b42b3f43aad980e839ac5'), ObjectId('656b42b3f43aad980e839ac6'), ObjectId('656b42b3f43aad980e839ac7'), ObjectId('656b42b3f43aad980e839ac8'), ObjectId('656b42b3f43aad980e839ac9'), ObjectId('656b42b3f43aad980e839aca'), ObjectId('656b42b3f43aad980e839acb'), ObjectId('656b42b3f43aad980e839acc'), ObjectId('656b42b3f43aad980e839acd'), ObjectId('656b42b3f43aad980e839ace'), ObjectId('656b42b3f43aad980e839acf'), ObjectId('656b42b3f43aad980e839ad0'), ObjectId('656b42b3f43aad980e839ad1'), ObjectId('656b42b3f43aad980e839ad2'), ObjectId('656b42b3f43aad980e839ad3'), ObjectId('656b42b3f43aad980e839ad4'), ObjectId('656b42b3f43aad980e839ad5'), ObjectId('656b42b3f43aad980e839ad6'), ObjectId('656b42b3f43aad980e839ad7'), ObjectId('656b42b3f43aad980e839ad8'), ObjectId('656b42b3f43aad980e839ad9'), ObjectId('656b42b3f43aad980e839ada'), ObjectId('656b42b3f43aad980e839adb'), ObjectId('656b42b3f43aad980e839adc'), ObjectId('656b42b3f43aad980e839add'), ObjectId('656b42b3f43aad980e839ade'), ObjectId('656b42b3f43aad980e839adf'), ObjectId('656b42b3f43aad980e839ae0'), ObjectId('656b42b3f43aad980e839ae1'), ObjectId('656b42b3f43aad980e839ae2'), ObjectId('656b42b3f43aad980e839ae3'), ObjectId('656b42b3f43aad980e839ae4'), ObjectId('656b42b3f43aad980e839ae5'), ObjectId('656b42b3f43aad980e839ae6'), ObjectId('656b42b3f43aad980e839ae7'), ObjectId('656b42b3f43aad980e839ae8'), ObjectId('656b42b3f43aad980e839ae9'), ObjectId('656b42b3f43aad980e839aea'), ObjectId('656b42b3f43aad980e839aeb'), ObjectId('656b42b3f43aad980e839aec'), ObjectId('656b42b3f43aad980e839aed'), ObjectId('656b42b3f43aad980e839aee'), ObjectId('656b42b3f43aad980e839aef'), ObjectId('656b42b3f43aad980e839af0'), ObjectId('656b42b3f43aad980e839af1'), ObjectId('656b42b3f43aad980e839af2'), ObjectId('656b42b3f43aad980e839af3'), ObjectId('656b42b3f43aad980e839af4'), ObjectId('656b42b3f43aad980e839af5'), ObjectId('656b42b3f43aad980e839af6'), ObjectId('656b42b3f43aad980e839af7'), ObjectId('656b42b3f43aad980e839af8'), ObjectId('656b42b3f43aad980e839af9'), ObjectId('656b42b3f43aad980e839afa'), ObjectId('656b42b3f43aad980e839afb'), ObjectId('656b42b3f43aad980e839afc'), ObjectId('656b42b3f43aad980e839afd'), ObjectId('656b42b3f43aad980e839afe'), ObjectId('656b42b3f43aad980e839aff'), ObjectId('656b42b3f43aad980e839b00'), ObjectId('656b42b3f43aad980e839b01'), ObjectId('656b42b3f43aad980e839b02'), ObjectId('656b42b3f43aad980e839b03'), ObjectId('656b42b3f43aad980e839b04'), ObjectId('656b42b3f43aad980e839b05'), ObjectId('656b42b3f43aad980e839b06'), ObjectId('656b42b3f43aad980e839b07'), ObjectId('656b42b3f43aad980e839b08'), ObjectId('656b42b3f43aad980e839b09'), ObjectId('656b42b3f43aad980e839b0a'), ObjectId('656b42b3f43aad980e839b0b'), ObjectId('656b42b3f43aad980e839b0c'), ObjectId('656b42b3f43aad980e839b0d'), ObjectId('656b42b3f43aad980e839b0e'), ObjectId('656b42b3f43aad980e839b0f'), ObjectId('656b42b3f43aad980e839b10'), ObjectId('656b42b3f43aad980e839b11'), ObjectId('656b42b3f43aad980e839b12'), ObjectId('656b42b3f43aad980e839b13'), ObjectId('656b42b3f43aad980e839b14'), ObjectId('656b42b3f43aad980e839b15'), ObjectId('656b42b3f43aad980e839b16'), ObjectId('656b42b3f43aad980e839b17'), ObjectId('656b42b3f43aad980e839b18'), ObjectId('656b42b3f43aad980e839b19'), ObjectId('656b42b3f43aad980e839b1a'), ObjectId('656b42b3f43aad980e839b1b'), ObjectId('656b42b3f43aad980e839b1c'), ObjectId('656b42b3f43aad980e839b1d'), ObjectId('656b42b3f43aad980e839b1e'), ObjectId('656b42b3f43aad980e839b1f'), ObjectId('656b42b3f43aad980e839b20'), ObjectId('656b42b3f43aad980e839b21'), ObjectId('656b42b3f43aad980e839b22')]\u001b[0m\n", - "\u001b[32m 2023-Dec-02 15:44:03.37\u001b[0m| \u001b[32m\u001b[1mSUCCESS \u001b[0m | \u001b[36mDuncans-MacBook-Pro.local\u001b[0m| \u001b[36m88626ad4-e654-4d13-b738-655c215c9549\u001b[0m| \u001b[36msuperduperdb.backends.local.compute\u001b[0m:\u001b[36m38 \u001b[0m | \u001b[32m\u001b[1mJob submitted. function: future:f0c30b72-3f4f-401e-88c2-2369121c54aa\u001b[0m\n" - ] - }, - { - "data": { - "text/plain": [ - "([ObjectId('656b42b3f43aad980e83974c'),\n", - " ObjectId('656b42b3f43aad980e83974d'),\n", - " ObjectId('656b42b3f43aad980e83974e'),\n", - " ObjectId('656b42b3f43aad980e83974f'),\n", - " ObjectId('656b42b3f43aad980e839750'),\n", - " ObjectId('656b42b3f43aad980e839751'),\n", - " ObjectId('656b42b3f43aad980e839752'),\n", - " ObjectId('656b42b3f43aad980e839753'),\n", - " ObjectId('656b42b3f43aad980e839754'),\n", - " ObjectId('656b42b3f43aad980e839755'),\n", - " ObjectId('656b42b3f43aad980e839756'),\n", - " ObjectId('656b42b3f43aad980e839757'),\n", - " ObjectId('656b42b3f43aad980e839758'),\n", - " ObjectId('656b42b3f43aad980e839759'),\n", - " ObjectId('656b42b3f43aad980e83975a'),\n", - " ObjectId('656b42b3f43aad980e83975b'),\n", - " ObjectId('656b42b3f43aad980e83975c'),\n", - " ObjectId('656b42b3f43aad980e83975d'),\n", - " ObjectId('656b42b3f43aad980e83975e'),\n", - " ObjectId('656b42b3f43aad980e83975f'),\n", - " ObjectId('656b42b3f43aad980e839760'),\n", - " ObjectId('656b42b3f43aad980e839761'),\n", - " ObjectId('656b42b3f43aad980e839762'),\n", - " ObjectId('656b42b3f43aad980e839763'),\n", - " ObjectId('656b42b3f43aad980e839764'),\n", - " ObjectId('656b42b3f43aad980e839765'),\n", - " ObjectId('656b42b3f43aad980e839766'),\n", - " ObjectId('656b42b3f43aad980e839767'),\n", - " ObjectId('656b42b3f43aad980e839768'),\n", - " ObjectId('656b42b3f43aad980e839769'),\n", - " ObjectId('656b42b3f43aad980e83976a'),\n", - " ObjectId('656b42b3f43aad980e83976b'),\n", - " ObjectId('656b42b3f43aad980e83976c'),\n", - " ObjectId('656b42b3f43aad980e83976d'),\n", - " ObjectId('656b42b3f43aad980e83976e'),\n", - " ObjectId('656b42b3f43aad980e83976f'),\n", - " ObjectId('656b42b3f43aad980e839770'),\n", - " ObjectId('656b42b3f43aad980e839771'),\n", - " ObjectId('656b42b3f43aad980e839772'),\n", - " ObjectId('656b42b3f43aad980e839773'),\n", - " ObjectId('656b42b3f43aad980e839774'),\n", - " ObjectId('656b42b3f43aad980e839775'),\n", - " ObjectId('656b42b3f43aad980e839776'),\n", - " ObjectId('656b42b3f43aad980e839777'),\n", - " ObjectId('656b42b3f43aad980e839778'),\n", - " ObjectId('656b42b3f43aad980e839779'),\n", - " ObjectId('656b42b3f43aad980e83977a'),\n", - " ObjectId('656b42b3f43aad980e83977b'),\n", - " ObjectId('656b42b3f43aad980e83977c'),\n", - " ObjectId('656b42b3f43aad980e83977d'),\n", - " ObjectId('656b42b3f43aad980e83977e'),\n", - " ObjectId('656b42b3f43aad980e83977f'),\n", - " ObjectId('656b42b3f43aad980e839780'),\n", - " ObjectId('656b42b3f43aad980e839781'),\n", - " ObjectId('656b42b3f43aad980e839782'),\n", - " ObjectId('656b42b3f43aad980e839783'),\n", - " ObjectId('656b42b3f43aad980e839784'),\n", - " ObjectId('656b42b3f43aad980e839785'),\n", - " ObjectId('656b42b3f43aad980e839786'),\n", - " ObjectId('656b42b3f43aad980e839787'),\n", - " ObjectId('656b42b3f43aad980e839788'),\n", - " ObjectId('656b42b3f43aad980e839789'),\n", - " ObjectId('656b42b3f43aad980e83978a'),\n", - " ObjectId('656b42b3f43aad980e83978b'),\n", - " ObjectId('656b42b3f43aad980e83978c'),\n", - " ObjectId('656b42b3f43aad980e83978d'),\n", - " ObjectId('656b42b3f43aad980e83978e'),\n", - " ObjectId('656b42b3f43aad980e83978f'),\n", - " ObjectId('656b42b3f43aad980e839790'),\n", - " ObjectId('656b42b3f43aad980e839791'),\n", - " ObjectId('656b42b3f43aad980e839792'),\n", - " ObjectId('656b42b3f43aad980e839793'),\n", - " ObjectId('656b42b3f43aad980e839794'),\n", - " ObjectId('656b42b3f43aad980e839795'),\n", - " ObjectId('656b42b3f43aad980e839796'),\n", - " ObjectId('656b42b3f43aad980e839797'),\n", - " ObjectId('656b42b3f43aad980e839798'),\n", - " ObjectId('656b42b3f43aad980e839799'),\n", - " ObjectId('656b42b3f43aad980e83979a'),\n", - " ObjectId('656b42b3f43aad980e83979b'),\n", - " ObjectId('656b42b3f43aad980e83979c'),\n", - " ObjectId('656b42b3f43aad980e83979d'),\n", - " ObjectId('656b42b3f43aad980e83979e'),\n", - " ObjectId('656b42b3f43aad980e83979f'),\n", - " ObjectId('656b42b3f43aad980e8397a0'),\n", - " ObjectId('656b42b3f43aad980e8397a1'),\n", - " ObjectId('656b42b3f43aad980e8397a2'),\n", - " ObjectId('656b42b3f43aad980e8397a3'),\n", - " ObjectId('656b42b3f43aad980e8397a4'),\n", - " ObjectId('656b42b3f43aad980e8397a5'),\n", - " ObjectId('656b42b3f43aad980e8397a6'),\n", - " ObjectId('656b42b3f43aad980e8397a7'),\n", - " ObjectId('656b42b3f43aad980e8397a8'),\n", - " ObjectId('656b42b3f43aad980e8397a9'),\n", - " ObjectId('656b42b3f43aad980e8397aa'),\n", - " ObjectId('656b42b3f43aad980e8397ab'),\n", - " ObjectId('656b42b3f43aad980e8397ac'),\n", - " ObjectId('656b42b3f43aad980e8397ad'),\n", - " ObjectId('656b42b3f43aad980e8397ae'),\n", - " ObjectId('656b42b3f43aad980e8397af'),\n", - " ObjectId('656b42b3f43aad980e8397b0'),\n", - " ObjectId('656b42b3f43aad980e8397b1'),\n", - " ObjectId('656b42b3f43aad980e8397b2'),\n", - " ObjectId('656b42b3f43aad980e8397b3'),\n", - " ObjectId('656b42b3f43aad980e8397b4'),\n", - " ObjectId('656b42b3f43aad980e8397b5'),\n", - " ObjectId('656b42b3f43aad980e8397b6'),\n", - " ObjectId('656b42b3f43aad980e8397b7'),\n", - " ObjectId('656b42b3f43aad980e8397b8'),\n", - " ObjectId('656b42b3f43aad980e8397b9'),\n", - " ObjectId('656b42b3f43aad980e8397ba'),\n", - " ObjectId('656b42b3f43aad980e8397bb'),\n", - " ObjectId('656b42b3f43aad980e8397bc'),\n", - " ObjectId('656b42b3f43aad980e8397bd'),\n", - " ObjectId('656b42b3f43aad980e8397be'),\n", - " ObjectId('656b42b3f43aad980e8397bf'),\n", - " ObjectId('656b42b3f43aad980e8397c0'),\n", - " ObjectId('656b42b3f43aad980e8397c1'),\n", - " ObjectId('656b42b3f43aad980e8397c2'),\n", - " ObjectId('656b42b3f43aad980e8397c3'),\n", - " ObjectId('656b42b3f43aad980e8397c4'),\n", - " ObjectId('656b42b3f43aad980e8397c5'),\n", - " ObjectId('656b42b3f43aad980e8397c6'),\n", - " ObjectId('656b42b3f43aad980e8397c7'),\n", - " ObjectId('656b42b3f43aad980e8397c8'),\n", - " ObjectId('656b42b3f43aad980e8397c9'),\n", - " ObjectId('656b42b3f43aad980e8397ca'),\n", - " ObjectId('656b42b3f43aad980e8397cb'),\n", - " ObjectId('656b42b3f43aad980e8397cc'),\n", - " ObjectId('656b42b3f43aad980e8397cd'),\n", - " ObjectId('656b42b3f43aad980e8397ce'),\n", - " ObjectId('656b42b3f43aad980e8397cf'),\n", - " ObjectId('656b42b3f43aad980e8397d0'),\n", - " ObjectId('656b42b3f43aad980e8397d1'),\n", - " ObjectId('656b42b3f43aad980e8397d2'),\n", - " ObjectId('656b42b3f43aad980e8397d3'),\n", - " ObjectId('656b42b3f43aad980e8397d4'),\n", - " ObjectId('656b42b3f43aad980e8397d5'),\n", - " ObjectId('656b42b3f43aad980e8397d6'),\n", - " ObjectId('656b42b3f43aad980e8397d7'),\n", - " ObjectId('656b42b3f43aad980e8397d8'),\n", - " ObjectId('656b42b3f43aad980e8397d9'),\n", - " ObjectId('656b42b3f43aad980e8397da'),\n", - " ObjectId('656b42b3f43aad980e8397db'),\n", - " ObjectId('656b42b3f43aad980e8397dc'),\n", - " ObjectId('656b42b3f43aad980e8397dd'),\n", - " ObjectId('656b42b3f43aad980e8397de'),\n", - " ObjectId('656b42b3f43aad980e8397df'),\n", - " ObjectId('656b42b3f43aad980e8397e0'),\n", - " ObjectId('656b42b3f43aad980e8397e1'),\n", - " ObjectId('656b42b3f43aad980e8397e2'),\n", - " ObjectId('656b42b3f43aad980e8397e3'),\n", - " ObjectId('656b42b3f43aad980e8397e4'),\n", - " ObjectId('656b42b3f43aad980e8397e5'),\n", - " ObjectId('656b42b3f43aad980e8397e6'),\n", - " ObjectId('656b42b3f43aad980e8397e7'),\n", - " ObjectId('656b42b3f43aad980e8397e8'),\n", - " ObjectId('656b42b3f43aad980e8397e9'),\n", - " ObjectId('656b42b3f43aad980e8397ea'),\n", - " ObjectId('656b42b3f43aad980e8397eb'),\n", - " ObjectId('656b42b3f43aad980e8397ec'),\n", - " ObjectId('656b42b3f43aad980e8397ed'),\n", - " ObjectId('656b42b3f43aad980e8397ee'),\n", - " ObjectId('656b42b3f43aad980e8397ef'),\n", - " ObjectId('656b42b3f43aad980e8397f0'),\n", - " ObjectId('656b42b3f43aad980e8397f1'),\n", - " ObjectId('656b42b3f43aad980e8397f2'),\n", - " ObjectId('656b42b3f43aad980e8397f3'),\n", - " ObjectId('656b42b3f43aad980e8397f4'),\n", - " ObjectId('656b42b3f43aad980e8397f5'),\n", - " ObjectId('656b42b3f43aad980e8397f6'),\n", - " ObjectId('656b42b3f43aad980e8397f7'),\n", - " ObjectId('656b42b3f43aad980e8397f8'),\n", - " ObjectId('656b42b3f43aad980e8397f9'),\n", - " ObjectId('656b42b3f43aad980e8397fa'),\n", - " ObjectId('656b42b3f43aad980e8397fb'),\n", - " ObjectId('656b42b3f43aad980e8397fc'),\n", - " ObjectId('656b42b3f43aad980e8397fd'),\n", - " ObjectId('656b42b3f43aad980e8397fe'),\n", - " ObjectId('656b42b3f43aad980e8397ff'),\n", - " ObjectId('656b42b3f43aad980e839800'),\n", - " ObjectId('656b42b3f43aad980e839801'),\n", - " ObjectId('656b42b3f43aad980e839802'),\n", - " ObjectId('656b42b3f43aad980e839803'),\n", - " ObjectId('656b42b3f43aad980e839804'),\n", - " ObjectId('656b42b3f43aad980e839805'),\n", - " ObjectId('656b42b3f43aad980e839806'),\n", - " ObjectId('656b42b3f43aad980e839807'),\n", - " ObjectId('656b42b3f43aad980e839808'),\n", - " ObjectId('656b42b3f43aad980e839809'),\n", - " ObjectId('656b42b3f43aad980e83980a'),\n", - " ObjectId('656b42b3f43aad980e83980b'),\n", - " ObjectId('656b42b3f43aad980e83980c'),\n", - " ObjectId('656b42b3f43aad980e83980d'),\n", - " ObjectId('656b42b3f43aad980e83980e'),\n", - " ObjectId('656b42b3f43aad980e83980f'),\n", - " ObjectId('656b42b3f43aad980e839810'),\n", - " ObjectId('656b42b3f43aad980e839811'),\n", - " ObjectId('656b42b3f43aad980e839812'),\n", - " ObjectId('656b42b3f43aad980e839813'),\n", - " ObjectId('656b42b3f43aad980e839814'),\n", - " ObjectId('656b42b3f43aad980e839815'),\n", - " ObjectId('656b42b3f43aad980e839816'),\n", - " ObjectId('656b42b3f43aad980e839817'),\n", - " ObjectId('656b42b3f43aad980e839818'),\n", - " ObjectId('656b42b3f43aad980e839819'),\n", - " ObjectId('656b42b3f43aad980e83981a'),\n", - " ObjectId('656b42b3f43aad980e83981b'),\n", - " ObjectId('656b42b3f43aad980e83981c'),\n", - " ObjectId('656b42b3f43aad980e83981d'),\n", - " ObjectId('656b42b3f43aad980e83981e'),\n", - " ObjectId('656b42b3f43aad980e83981f'),\n", - " ObjectId('656b42b3f43aad980e839820'),\n", - " ObjectId('656b42b3f43aad980e839821'),\n", - " ObjectId('656b42b3f43aad980e839822'),\n", - " ObjectId('656b42b3f43aad980e839823'),\n", - " ObjectId('656b42b3f43aad980e839824'),\n", - " ObjectId('656b42b3f43aad980e839825'),\n", - " ObjectId('656b42b3f43aad980e839826'),\n", - " ObjectId('656b42b3f43aad980e839827'),\n", - " ObjectId('656b42b3f43aad980e839828'),\n", - " ObjectId('656b42b3f43aad980e839829'),\n", - " ObjectId('656b42b3f43aad980e83982a'),\n", - " ObjectId('656b42b3f43aad980e83982b'),\n", - " ObjectId('656b42b3f43aad980e83982c'),\n", - " ObjectId('656b42b3f43aad980e83982d'),\n", - " ObjectId('656b42b3f43aad980e83982e'),\n", - " ObjectId('656b42b3f43aad980e83982f'),\n", - " ObjectId('656b42b3f43aad980e839830'),\n", - " ObjectId('656b42b3f43aad980e839831'),\n", - " ObjectId('656b42b3f43aad980e839832'),\n", - " ObjectId('656b42b3f43aad980e839833'),\n", - " ObjectId('656b42b3f43aad980e839834'),\n", - " ObjectId('656b42b3f43aad980e839835'),\n", - " ObjectId('656b42b3f43aad980e839836'),\n", - " ObjectId('656b42b3f43aad980e839837'),\n", - " ObjectId('656b42b3f43aad980e839838'),\n", - " ObjectId('656b42b3f43aad980e839839'),\n", - " ObjectId('656b42b3f43aad980e83983a'),\n", - " ObjectId('656b42b3f43aad980e83983b'),\n", - " ObjectId('656b42b3f43aad980e83983c'),\n", - " ObjectId('656b42b3f43aad980e83983d'),\n", - " ObjectId('656b42b3f43aad980e83983e'),\n", - " ObjectId('656b42b3f43aad980e83983f'),\n", - " ObjectId('656b42b3f43aad980e839840'),\n", - " ObjectId('656b42b3f43aad980e839841'),\n", - " ObjectId('656b42b3f43aad980e839842'),\n", - " ObjectId('656b42b3f43aad980e839843'),\n", - " ObjectId('656b42b3f43aad980e839844'),\n", - " ObjectId('656b42b3f43aad980e839845'),\n", - " ObjectId('656b42b3f43aad980e839846'),\n", - " ObjectId('656b42b3f43aad980e839847'),\n", - " ObjectId('656b42b3f43aad980e839848'),\n", - " ObjectId('656b42b3f43aad980e839849'),\n", - " ObjectId('656b42b3f43aad980e83984a'),\n", - " ObjectId('656b42b3f43aad980e83984b'),\n", - " ObjectId('656b42b3f43aad980e83984c'),\n", - " ObjectId('656b42b3f43aad980e83984d'),\n", - " ObjectId('656b42b3f43aad980e83984e'),\n", - " ObjectId('656b42b3f43aad980e83984f'),\n", - " ObjectId('656b42b3f43aad980e839850'),\n", - " ObjectId('656b42b3f43aad980e839851'),\n", - " ObjectId('656b42b3f43aad980e839852'),\n", - " ObjectId('656b42b3f43aad980e839853'),\n", - " ObjectId('656b42b3f43aad980e839854'),\n", - " ObjectId('656b42b3f43aad980e839855'),\n", - " ObjectId('656b42b3f43aad980e839856'),\n", - " ObjectId('656b42b3f43aad980e839857'),\n", - " ObjectId('656b42b3f43aad980e839858'),\n", - " ObjectId('656b42b3f43aad980e839859'),\n", - " ObjectId('656b42b3f43aad980e83985a'),\n", - " ObjectId('656b42b3f43aad980e83985b'),\n", - " ObjectId('656b42b3f43aad980e83985c'),\n", - " ObjectId('656b42b3f43aad980e83985d'),\n", - " ObjectId('656b42b3f43aad980e83985e'),\n", - " ObjectId('656b42b3f43aad980e83985f'),\n", - " ObjectId('656b42b3f43aad980e839860'),\n", - " ObjectId('656b42b3f43aad980e839861'),\n", - " ObjectId('656b42b3f43aad980e839862'),\n", - " ObjectId('656b42b3f43aad980e839863'),\n", - " ObjectId('656b42b3f43aad980e839864'),\n", - " ObjectId('656b42b3f43aad980e839865'),\n", - " ObjectId('656b42b3f43aad980e839866'),\n", - " ObjectId('656b42b3f43aad980e839867'),\n", - " ObjectId('656b42b3f43aad980e839868'),\n", - " ObjectId('656b42b3f43aad980e839869'),\n", - " ObjectId('656b42b3f43aad980e83986a'),\n", - " ObjectId('656b42b3f43aad980e83986b'),\n", - " ObjectId('656b42b3f43aad980e83986c'),\n", - " ObjectId('656b42b3f43aad980e83986d'),\n", - " ObjectId('656b42b3f43aad980e83986e'),\n", - " ObjectId('656b42b3f43aad980e83986f'),\n", - " ObjectId('656b42b3f43aad980e839870'),\n", - " ObjectId('656b42b3f43aad980e839871'),\n", - " ObjectId('656b42b3f43aad980e839872'),\n", - " ObjectId('656b42b3f43aad980e839873'),\n", - " ObjectId('656b42b3f43aad980e839874'),\n", - " ObjectId('656b42b3f43aad980e839875'),\n", - " ObjectId('656b42b3f43aad980e839876'),\n", - " ObjectId('656b42b3f43aad980e839877'),\n", - " ObjectId('656b42b3f43aad980e839878'),\n", - " ObjectId('656b42b3f43aad980e839879'),\n", - " ObjectId('656b42b3f43aad980e83987a'),\n", - " ObjectId('656b42b3f43aad980e83987b'),\n", - " ObjectId('656b42b3f43aad980e83987c'),\n", - " ObjectId('656b42b3f43aad980e83987d'),\n", - " ObjectId('656b42b3f43aad980e83987e'),\n", - " ObjectId('656b42b3f43aad980e83987f'),\n", - " ObjectId('656b42b3f43aad980e839880'),\n", - " ObjectId('656b42b3f43aad980e839881'),\n", - " ObjectId('656b42b3f43aad980e839882'),\n", - " ObjectId('656b42b3f43aad980e839883'),\n", - " ObjectId('656b42b3f43aad980e839884'),\n", - " ObjectId('656b42b3f43aad980e839885'),\n", - " ObjectId('656b42b3f43aad980e839886'),\n", - " ObjectId('656b42b3f43aad980e839887'),\n", - " ObjectId('656b42b3f43aad980e839888'),\n", - " ObjectId('656b42b3f43aad980e839889'),\n", - " ObjectId('656b42b3f43aad980e83988a'),\n", - " ObjectId('656b42b3f43aad980e83988b'),\n", - " ObjectId('656b42b3f43aad980e83988c'),\n", - " ObjectId('656b42b3f43aad980e83988d'),\n", - " ObjectId('656b42b3f43aad980e83988e'),\n", - " ObjectId('656b42b3f43aad980e83988f'),\n", - " ObjectId('656b42b3f43aad980e839890'),\n", - " ObjectId('656b42b3f43aad980e839891'),\n", - " ObjectId('656b42b3f43aad980e839892'),\n", - " ObjectId('656b42b3f43aad980e839893'),\n", - " ObjectId('656b42b3f43aad980e839894'),\n", - " ObjectId('656b42b3f43aad980e839895'),\n", - " ObjectId('656b42b3f43aad980e839896'),\n", - " ObjectId('656b42b3f43aad980e839897'),\n", - " ObjectId('656b42b3f43aad980e839898'),\n", - " ObjectId('656b42b3f43aad980e839899'),\n", - " ObjectId('656b42b3f43aad980e83989a'),\n", - " ObjectId('656b42b3f43aad980e83989b'),\n", - " ObjectId('656b42b3f43aad980e83989c'),\n", - " ObjectId('656b42b3f43aad980e83989d'),\n", - " ObjectId('656b42b3f43aad980e83989e'),\n", - " ObjectId('656b42b3f43aad980e83989f'),\n", - " ObjectId('656b42b3f43aad980e8398a0'),\n", - " ObjectId('656b42b3f43aad980e8398a1'),\n", - " ObjectId('656b42b3f43aad980e8398a2'),\n", - " ObjectId('656b42b3f43aad980e8398a3'),\n", - " ObjectId('656b42b3f43aad980e8398a4'),\n", - " ObjectId('656b42b3f43aad980e8398a5'),\n", - " ObjectId('656b42b3f43aad980e8398a6'),\n", - " ObjectId('656b42b3f43aad980e8398a7'),\n", - " ObjectId('656b42b3f43aad980e8398a8'),\n", - " ObjectId('656b42b3f43aad980e8398a9'),\n", - " ObjectId('656b42b3f43aad980e8398aa'),\n", - " ObjectId('656b42b3f43aad980e8398ab'),\n", - " ObjectId('656b42b3f43aad980e8398ac'),\n", - " ObjectId('656b42b3f43aad980e8398ad'),\n", - " ObjectId('656b42b3f43aad980e8398ae'),\n", - " ObjectId('656b42b3f43aad980e8398af'),\n", - " ObjectId('656b42b3f43aad980e8398b0'),\n", - " ObjectId('656b42b3f43aad980e8398b1'),\n", - " ObjectId('656b42b3f43aad980e8398b2'),\n", - " ObjectId('656b42b3f43aad980e8398b3'),\n", - " ObjectId('656b42b3f43aad980e8398b4'),\n", - " ObjectId('656b42b3f43aad980e8398b5'),\n", - " ObjectId('656b42b3f43aad980e8398b6'),\n", - " ObjectId('656b42b3f43aad980e8398b7'),\n", - " ObjectId('656b42b3f43aad980e8398b8'),\n", - " ObjectId('656b42b3f43aad980e8398b9'),\n", - " ObjectId('656b42b3f43aad980e8398ba'),\n", - " ObjectId('656b42b3f43aad980e8398bb'),\n", - " ObjectId('656b42b3f43aad980e8398bc'),\n", - " ObjectId('656b42b3f43aad980e8398bd'),\n", - " ObjectId('656b42b3f43aad980e8398be'),\n", - " ObjectId('656b42b3f43aad980e8398bf'),\n", - " ObjectId('656b42b3f43aad980e8398c0'),\n", - " ObjectId('656b42b3f43aad980e8398c1'),\n", - " ObjectId('656b42b3f43aad980e8398c2'),\n", - " ObjectId('656b42b3f43aad980e8398c3'),\n", - " ObjectId('656b42b3f43aad980e8398c4'),\n", - " ObjectId('656b42b3f43aad980e8398c5'),\n", - " ObjectId('656b42b3f43aad980e8398c6'),\n", - " ObjectId('656b42b3f43aad980e8398c7'),\n", - " ObjectId('656b42b3f43aad980e8398c8'),\n", - " ObjectId('656b42b3f43aad980e8398c9'),\n", - " ObjectId('656b42b3f43aad980e8398ca'),\n", - " ObjectId('656b42b3f43aad980e8398cb'),\n", - " ObjectId('656b42b3f43aad980e8398cc'),\n", - " ObjectId('656b42b3f43aad980e8398cd'),\n", - " ObjectId('656b42b3f43aad980e8398ce'),\n", - " ObjectId('656b42b3f43aad980e8398cf'),\n", - " ObjectId('656b42b3f43aad980e8398d0'),\n", - " ObjectId('656b42b3f43aad980e8398d1'),\n", - " ObjectId('656b42b3f43aad980e8398d2'),\n", - " ObjectId('656b42b3f43aad980e8398d3'),\n", - " ObjectId('656b42b3f43aad980e8398d4'),\n", - " ObjectId('656b42b3f43aad980e8398d5'),\n", - " ObjectId('656b42b3f43aad980e8398d6'),\n", - " ObjectId('656b42b3f43aad980e8398d7'),\n", - " ObjectId('656b42b3f43aad980e8398d8'),\n", - " ObjectId('656b42b3f43aad980e8398d9'),\n", - " ObjectId('656b42b3f43aad980e8398da'),\n", - " ObjectId('656b42b3f43aad980e8398db'),\n", - " ObjectId('656b42b3f43aad980e8398dc'),\n", - " ObjectId('656b42b3f43aad980e8398dd'),\n", - " ObjectId('656b42b3f43aad980e8398de'),\n", - " ObjectId('656b42b3f43aad980e8398df'),\n", - " ObjectId('656b42b3f43aad980e8398e0'),\n", - " ObjectId('656b42b3f43aad980e8398e1'),\n", - " ObjectId('656b42b3f43aad980e8398e2'),\n", - " ObjectId('656b42b3f43aad980e8398e3'),\n", - " ObjectId('656b42b3f43aad980e8398e4'),\n", - " ObjectId('656b42b3f43aad980e8398e5'),\n", - " ObjectId('656b42b3f43aad980e8398e6'),\n", - " ObjectId('656b42b3f43aad980e8398e7'),\n", - " ObjectId('656b42b3f43aad980e8398e8'),\n", - " ObjectId('656b42b3f43aad980e8398e9'),\n", - " ObjectId('656b42b3f43aad980e8398ea'),\n", - " ObjectId('656b42b3f43aad980e8398eb'),\n", - " ObjectId('656b42b3f43aad980e8398ec'),\n", - " ObjectId('656b42b3f43aad980e8398ed'),\n", - " ObjectId('656b42b3f43aad980e8398ee'),\n", - " ObjectId('656b42b3f43aad980e8398ef'),\n", - " ObjectId('656b42b3f43aad980e8398f0'),\n", - " ObjectId('656b42b3f43aad980e8398f1'),\n", - " ObjectId('656b42b3f43aad980e8398f2'),\n", - " ObjectId('656b42b3f43aad980e8398f3'),\n", - " ObjectId('656b42b3f43aad980e8398f4'),\n", - " ObjectId('656b42b3f43aad980e8398f5'),\n", - " ObjectId('656b42b3f43aad980e8398f6'),\n", - " ObjectId('656b42b3f43aad980e8398f7'),\n", - " ObjectId('656b42b3f43aad980e8398f8'),\n", - " ObjectId('656b42b3f43aad980e8398f9'),\n", - " ObjectId('656b42b3f43aad980e8398fa'),\n", - " ObjectId('656b42b3f43aad980e8398fb'),\n", - " ObjectId('656b42b3f43aad980e8398fc'),\n", - " ObjectId('656b42b3f43aad980e8398fd'),\n", - " ObjectId('656b42b3f43aad980e8398fe'),\n", - " ObjectId('656b42b3f43aad980e8398ff'),\n", - " ObjectId('656b42b3f43aad980e839900'),\n", - " ObjectId('656b42b3f43aad980e839901'),\n", - " ObjectId('656b42b3f43aad980e839902'),\n", - " ObjectId('656b42b3f43aad980e839903'),\n", - " ObjectId('656b42b3f43aad980e839904'),\n", - " ObjectId('656b42b3f43aad980e839905'),\n", - " ObjectId('656b42b3f43aad980e839906'),\n", - " ObjectId('656b42b3f43aad980e839907'),\n", - " ObjectId('656b42b3f43aad980e839908'),\n", - " ObjectId('656b42b3f43aad980e839909'),\n", - " ObjectId('656b42b3f43aad980e83990a'),\n", - " ObjectId('656b42b3f43aad980e83990b'),\n", - " ObjectId('656b42b3f43aad980e83990c'),\n", - " ObjectId('656b42b3f43aad980e83990d'),\n", - " ObjectId('656b42b3f43aad980e83990e'),\n", - " ObjectId('656b42b3f43aad980e83990f'),\n", - " ObjectId('656b42b3f43aad980e839910'),\n", - " ObjectId('656b42b3f43aad980e839911'),\n", - " ObjectId('656b42b3f43aad980e839912'),\n", - " ObjectId('656b42b3f43aad980e839913'),\n", - " ObjectId('656b42b3f43aad980e839914'),\n", - " ObjectId('656b42b3f43aad980e839915'),\n", - " ObjectId('656b42b3f43aad980e839916'),\n", - " ObjectId('656b42b3f43aad980e839917'),\n", - " ObjectId('656b42b3f43aad980e839918'),\n", - " ObjectId('656b42b3f43aad980e839919'),\n", - " ObjectId('656b42b3f43aad980e83991a'),\n", - " ObjectId('656b42b3f43aad980e83991b'),\n", - " ObjectId('656b42b3f43aad980e83991c'),\n", - " ObjectId('656b42b3f43aad980e83991d'),\n", - " ObjectId('656b42b3f43aad980e83991e'),\n", - " ObjectId('656b42b3f43aad980e83991f'),\n", - " ObjectId('656b42b3f43aad980e839920'),\n", - " ObjectId('656b42b3f43aad980e839921'),\n", - " ObjectId('656b42b3f43aad980e839922'),\n", - " ObjectId('656b42b3f43aad980e839923'),\n", - " ObjectId('656b42b3f43aad980e839924'),\n", - " ObjectId('656b42b3f43aad980e839925'),\n", - " ObjectId('656b42b3f43aad980e839926'),\n", - " ObjectId('656b42b3f43aad980e839927'),\n", - " ObjectId('656b42b3f43aad980e839928'),\n", - " ObjectId('656b42b3f43aad980e839929'),\n", - " ObjectId('656b42b3f43aad980e83992a'),\n", - " ObjectId('656b42b3f43aad980e83992b'),\n", - " ObjectId('656b42b3f43aad980e83992c'),\n", - " ObjectId('656b42b3f43aad980e83992d'),\n", - " ObjectId('656b42b3f43aad980e83992e'),\n", - " ObjectId('656b42b3f43aad980e83992f'),\n", - " ObjectId('656b42b3f43aad980e839930'),\n", - " ObjectId('656b42b3f43aad980e839931'),\n", - " ObjectId('656b42b3f43aad980e839932'),\n", - " ObjectId('656b42b3f43aad980e839933'),\n", - " ObjectId('656b42b3f43aad980e839934'),\n", - " ObjectId('656b42b3f43aad980e839935'),\n", - " ObjectId('656b42b3f43aad980e839936'),\n", - " ObjectId('656b42b3f43aad980e839937'),\n", - " ObjectId('656b42b3f43aad980e839938'),\n", - " ObjectId('656b42b3f43aad980e839939'),\n", - " ObjectId('656b42b3f43aad980e83993a'),\n", - " ObjectId('656b42b3f43aad980e83993b'),\n", - " ObjectId('656b42b3f43aad980e83993c'),\n", - " ObjectId('656b42b3f43aad980e83993d'),\n", - " ObjectId('656b42b3f43aad980e83993e'),\n", - " ObjectId('656b42b3f43aad980e83993f'),\n", - " ObjectId('656b42b3f43aad980e839940'),\n", - " ObjectId('656b42b3f43aad980e839941'),\n", - " ObjectId('656b42b3f43aad980e839942'),\n", - " ObjectId('656b42b3f43aad980e839943'),\n", - " ObjectId('656b42b3f43aad980e839944'),\n", - " ObjectId('656b42b3f43aad980e839945'),\n", - " ObjectId('656b42b3f43aad980e839946'),\n", - " ObjectId('656b42b3f43aad980e839947'),\n", - " ObjectId('656b42b3f43aad980e839948'),\n", - " ObjectId('656b42b3f43aad980e839949'),\n", - " ObjectId('656b42b3f43aad980e83994a'),\n", - " ObjectId('656b42b3f43aad980e83994b'),\n", - " ObjectId('656b42b3f43aad980e83994c'),\n", - " ObjectId('656b42b3f43aad980e83994d'),\n", - " ObjectId('656b42b3f43aad980e83994e'),\n", - " ObjectId('656b42b3f43aad980e83994f'),\n", - " ObjectId('656b42b3f43aad980e839950'),\n", - " ObjectId('656b42b3f43aad980e839951'),\n", - " ObjectId('656b42b3f43aad980e839952'),\n", - " ObjectId('656b42b3f43aad980e839953'),\n", - " ObjectId('656b42b3f43aad980e839954'),\n", - " ObjectId('656b42b3f43aad980e839955'),\n", - " ObjectId('656b42b3f43aad980e839956'),\n", - " ObjectId('656b42b3f43aad980e839957'),\n", - " ObjectId('656b42b3f43aad980e839958'),\n", - " ObjectId('656b42b3f43aad980e839959'),\n", - " ObjectId('656b42b3f43aad980e83995a'),\n", - " ObjectId('656b42b3f43aad980e83995b'),\n", - " ObjectId('656b42b3f43aad980e83995c'),\n", - " ObjectId('656b42b3f43aad980e83995d'),\n", - " ObjectId('656b42b3f43aad980e83995e'),\n", - " ObjectId('656b42b3f43aad980e83995f'),\n", - " ObjectId('656b42b3f43aad980e839960'),\n", - " ObjectId('656b42b3f43aad980e839961'),\n", - " ObjectId('656b42b3f43aad980e839962'),\n", - " ObjectId('656b42b3f43aad980e839963'),\n", - " ObjectId('656b42b3f43aad980e839964'),\n", - " ObjectId('656b42b3f43aad980e839965'),\n", - " ObjectId('656b42b3f43aad980e839966'),\n", - " ObjectId('656b42b3f43aad980e839967'),\n", - " ObjectId('656b42b3f43aad980e839968'),\n", - " ObjectId('656b42b3f43aad980e839969'),\n", - " ObjectId('656b42b3f43aad980e83996a'),\n", - " ObjectId('656b42b3f43aad980e83996b'),\n", - " ObjectId('656b42b3f43aad980e83996c'),\n", - " ObjectId('656b42b3f43aad980e83996d'),\n", - " ObjectId('656b42b3f43aad980e83996e'),\n", - " ObjectId('656b42b3f43aad980e83996f'),\n", - " ObjectId('656b42b3f43aad980e839970'),\n", - " ObjectId('656b42b3f43aad980e839971'),\n", - " ObjectId('656b42b3f43aad980e839972'),\n", - " ObjectId('656b42b3f43aad980e839973'),\n", - " ObjectId('656b42b3f43aad980e839974'),\n", - " ObjectId('656b42b3f43aad980e839975'),\n", - " ObjectId('656b42b3f43aad980e839976'),\n", - " ObjectId('656b42b3f43aad980e839977'),\n", - " ObjectId('656b42b3f43aad980e839978'),\n", - " ObjectId('656b42b3f43aad980e839979'),\n", - " ObjectId('656b42b3f43aad980e83997a'),\n", - " ObjectId('656b42b3f43aad980e83997b'),\n", - " ObjectId('656b42b3f43aad980e83997c'),\n", - " ObjectId('656b42b3f43aad980e83997d'),\n", - " ObjectId('656b42b3f43aad980e83997e'),\n", - " ObjectId('656b42b3f43aad980e83997f'),\n", - " ObjectId('656b42b3f43aad980e839980'),\n", - " ObjectId('656b42b3f43aad980e839981'),\n", - " ObjectId('656b42b3f43aad980e839982'),\n", - " ObjectId('656b42b3f43aad980e839983'),\n", - " ObjectId('656b42b3f43aad980e839984'),\n", - " ObjectId('656b42b3f43aad980e839985'),\n", - " ObjectId('656b42b3f43aad980e839986'),\n", - " ObjectId('656b42b3f43aad980e839987'),\n", - " ObjectId('656b42b3f43aad980e839988'),\n", - " ObjectId('656b42b3f43aad980e839989'),\n", - " ObjectId('656b42b3f43aad980e83998a'),\n", - " ObjectId('656b42b3f43aad980e83998b'),\n", - " ObjectId('656b42b3f43aad980e83998c'),\n", - " ObjectId('656b42b3f43aad980e83998d'),\n", - " ObjectId('656b42b3f43aad980e83998e'),\n", - " ObjectId('656b42b3f43aad980e83998f'),\n", - " ObjectId('656b42b3f43aad980e839990'),\n", - " ObjectId('656b42b3f43aad980e839991'),\n", - " ObjectId('656b42b3f43aad980e839992'),\n", - " ObjectId('656b42b3f43aad980e839993'),\n", - " ObjectId('656b42b3f43aad980e839994'),\n", - " ObjectId('656b42b3f43aad980e839995'),\n", - " ObjectId('656b42b3f43aad980e839996'),\n", - " ObjectId('656b42b3f43aad980e839997'),\n", - " ObjectId('656b42b3f43aad980e839998'),\n", - " ObjectId('656b42b3f43aad980e839999'),\n", - " ObjectId('656b42b3f43aad980e83999a'),\n", - " ObjectId('656b42b3f43aad980e83999b'),\n", - " ObjectId('656b42b3f43aad980e83999c'),\n", - " ObjectId('656b42b3f43aad980e83999d'),\n", - " ObjectId('656b42b3f43aad980e83999e'),\n", - " ObjectId('656b42b3f43aad980e83999f'),\n", - " ObjectId('656b42b3f43aad980e8399a0'),\n", - " ObjectId('656b42b3f43aad980e8399a1'),\n", - " ObjectId('656b42b3f43aad980e8399a2'),\n", - " ObjectId('656b42b3f43aad980e8399a3'),\n", - " ObjectId('656b42b3f43aad980e8399a4'),\n", - " ObjectId('656b42b3f43aad980e8399a5'),\n", - " ObjectId('656b42b3f43aad980e8399a6'),\n", - " ObjectId('656b42b3f43aad980e8399a7'),\n", - " ObjectId('656b42b3f43aad980e8399a8'),\n", - " ObjectId('656b42b3f43aad980e8399a9'),\n", - " ObjectId('656b42b3f43aad980e8399aa'),\n", - " ObjectId('656b42b3f43aad980e8399ab'),\n", - " ObjectId('656b42b3f43aad980e8399ac'),\n", - " ObjectId('656b42b3f43aad980e8399ad'),\n", - " ObjectId('656b42b3f43aad980e8399ae'),\n", - " ObjectId('656b42b3f43aad980e8399af'),\n", - " ObjectId('656b42b3f43aad980e8399b0'),\n", - " ObjectId('656b42b3f43aad980e8399b1'),\n", - " ObjectId('656b42b3f43aad980e8399b2'),\n", - " ObjectId('656b42b3f43aad980e8399b3'),\n", - " ObjectId('656b42b3f43aad980e8399b4'),\n", - " ObjectId('656b42b3f43aad980e8399b5'),\n", - " ObjectId('656b42b3f43aad980e8399b6'),\n", - " ObjectId('656b42b3f43aad980e8399b7'),\n", - " ObjectId('656b42b3f43aad980e8399b8'),\n", - " ObjectId('656b42b3f43aad980e8399b9'),\n", - " ObjectId('656b42b3f43aad980e8399ba'),\n", - " ObjectId('656b42b3f43aad980e8399bb'),\n", - " ObjectId('656b42b3f43aad980e8399bc'),\n", - " ObjectId('656b42b3f43aad980e8399bd'),\n", - " ObjectId('656b42b3f43aad980e8399be'),\n", - " ObjectId('656b42b3f43aad980e8399bf'),\n", - " ObjectId('656b42b3f43aad980e8399c0'),\n", - " ObjectId('656b42b3f43aad980e8399c1'),\n", - " ObjectId('656b42b3f43aad980e8399c2'),\n", - " ObjectId('656b42b3f43aad980e8399c3'),\n", - " ObjectId('656b42b3f43aad980e8399c4'),\n", - " ObjectId('656b42b3f43aad980e8399c5'),\n", - " ObjectId('656b42b3f43aad980e8399c6'),\n", - " ObjectId('656b42b3f43aad980e8399c7'),\n", - " ObjectId('656b42b3f43aad980e8399c8'),\n", - " ObjectId('656b42b3f43aad980e8399c9'),\n", - " ObjectId('656b42b3f43aad980e8399ca'),\n", - " ObjectId('656b42b3f43aad980e8399cb'),\n", - " ObjectId('656b42b3f43aad980e8399cc'),\n", - " ObjectId('656b42b3f43aad980e8399cd'),\n", - " ObjectId('656b42b3f43aad980e8399ce'),\n", - " ObjectId('656b42b3f43aad980e8399cf'),\n", - " ObjectId('656b42b3f43aad980e8399d0'),\n", - " ObjectId('656b42b3f43aad980e8399d1'),\n", - " ObjectId('656b42b3f43aad980e8399d2'),\n", - " ObjectId('656b42b3f43aad980e8399d3'),\n", - " ObjectId('656b42b3f43aad980e8399d4'),\n", - " ObjectId('656b42b3f43aad980e8399d5'),\n", - " ObjectId('656b42b3f43aad980e8399d6'),\n", - " ObjectId('656b42b3f43aad980e8399d7'),\n", - " ObjectId('656b42b3f43aad980e8399d8'),\n", - " ObjectId('656b42b3f43aad980e8399d9'),\n", - " ObjectId('656b42b3f43aad980e8399da'),\n", - " ObjectId('656b42b3f43aad980e8399db'),\n", - " ObjectId('656b42b3f43aad980e8399dc'),\n", - " ObjectId('656b42b3f43aad980e8399dd'),\n", - " ObjectId('656b42b3f43aad980e8399de'),\n", - " ObjectId('656b42b3f43aad980e8399df'),\n", - " ObjectId('656b42b3f43aad980e8399e0'),\n", - " ObjectId('656b42b3f43aad980e8399e1'),\n", - " ObjectId('656b42b3f43aad980e8399e2'),\n", - " ObjectId('656b42b3f43aad980e8399e3'),\n", - " ObjectId('656b42b3f43aad980e8399e4'),\n", - " ObjectId('656b42b3f43aad980e8399e5'),\n", - " ObjectId('656b42b3f43aad980e8399e6'),\n", - " ObjectId('656b42b3f43aad980e8399e7'),\n", - " ObjectId('656b42b3f43aad980e8399e8'),\n", - " ObjectId('656b42b3f43aad980e8399e9'),\n", - " ObjectId('656b42b3f43aad980e8399ea'),\n", - " ObjectId('656b42b3f43aad980e8399eb'),\n", - " ObjectId('656b42b3f43aad980e8399ec'),\n", - " ObjectId('656b42b3f43aad980e8399ed'),\n", - " ObjectId('656b42b3f43aad980e8399ee'),\n", - " ObjectId('656b42b3f43aad980e8399ef'),\n", - " ObjectId('656b42b3f43aad980e8399f0'),\n", - " ObjectId('656b42b3f43aad980e8399f1'),\n", - " ObjectId('656b42b3f43aad980e8399f2'),\n", - " ObjectId('656b42b3f43aad980e8399f3'),\n", - " ObjectId('656b42b3f43aad980e8399f4'),\n", - " ObjectId('656b42b3f43aad980e8399f5'),\n", - " ObjectId('656b42b3f43aad980e8399f6'),\n", - " ObjectId('656b42b3f43aad980e8399f7'),\n", - " ObjectId('656b42b3f43aad980e8399f8'),\n", - " ObjectId('656b42b3f43aad980e8399f9'),\n", - " ObjectId('656b42b3f43aad980e8399fa'),\n", - " ObjectId('656b42b3f43aad980e8399fb'),\n", - " ObjectId('656b42b3f43aad980e8399fc'),\n", - " ObjectId('656b42b3f43aad980e8399fd'),\n", - " ObjectId('656b42b3f43aad980e8399fe'),\n", - " ObjectId('656b42b3f43aad980e8399ff'),\n", - " ObjectId('656b42b3f43aad980e839a00'),\n", - " ObjectId('656b42b3f43aad980e839a01'),\n", - " ObjectId('656b42b3f43aad980e839a02'),\n", - " ObjectId('656b42b3f43aad980e839a03'),\n", - " ObjectId('656b42b3f43aad980e839a04'),\n", - " ObjectId('656b42b3f43aad980e839a05'),\n", - " ObjectId('656b42b3f43aad980e839a06'),\n", - " ObjectId('656b42b3f43aad980e839a07'),\n", - " ObjectId('656b42b3f43aad980e839a08'),\n", - " ObjectId('656b42b3f43aad980e839a09'),\n", - " ObjectId('656b42b3f43aad980e839a0a'),\n", - " ObjectId('656b42b3f43aad980e839a0b'),\n", - " ObjectId('656b42b3f43aad980e839a0c'),\n", - " ObjectId('656b42b3f43aad980e839a0d'),\n", - " ObjectId('656b42b3f43aad980e839a0e'),\n", - " ObjectId('656b42b3f43aad980e839a0f'),\n", - " ObjectId('656b42b3f43aad980e839a10'),\n", - " ObjectId('656b42b3f43aad980e839a11'),\n", - " ObjectId('656b42b3f43aad980e839a12'),\n", - " ObjectId('656b42b3f43aad980e839a13'),\n", - " ObjectId('656b42b3f43aad980e839a14'),\n", - " ObjectId('656b42b3f43aad980e839a15'),\n", - " ObjectId('656b42b3f43aad980e839a16'),\n", - " ObjectId('656b42b3f43aad980e839a17'),\n", - " ObjectId('656b42b3f43aad980e839a18'),\n", - " ObjectId('656b42b3f43aad980e839a19'),\n", - " ObjectId('656b42b3f43aad980e839a1a'),\n", - " ObjectId('656b42b3f43aad980e839a1b'),\n", - " ObjectId('656b42b3f43aad980e839a1c'),\n", - " ObjectId('656b42b3f43aad980e839a1d'),\n", - " ObjectId('656b42b3f43aad980e839a1e'),\n", - " ObjectId('656b42b3f43aad980e839a1f'),\n", - " ObjectId('656b42b3f43aad980e839a20'),\n", - " ObjectId('656b42b3f43aad980e839a21'),\n", - " ObjectId('656b42b3f43aad980e839a22'),\n", - " ObjectId('656b42b3f43aad980e839a23'),\n", - " ObjectId('656b42b3f43aad980e839a24'),\n", - " ObjectId('656b42b3f43aad980e839a25'),\n", - " ObjectId('656b42b3f43aad980e839a26'),\n", - " ObjectId('656b42b3f43aad980e839a27'),\n", - " ObjectId('656b42b3f43aad980e839a28'),\n", - " ObjectId('656b42b3f43aad980e839a29'),\n", - " ObjectId('656b42b3f43aad980e839a2a'),\n", - " ObjectId('656b42b3f43aad980e839a2b'),\n", - " ObjectId('656b42b3f43aad980e839a2c'),\n", - " ObjectId('656b42b3f43aad980e839a2d'),\n", - " ObjectId('656b42b3f43aad980e839a2e'),\n", - " ObjectId('656b42b3f43aad980e839a2f'),\n", - " ObjectId('656b42b3f43aad980e839a30'),\n", - " ObjectId('656b42b3f43aad980e839a31'),\n", - " ObjectId('656b42b3f43aad980e839a32'),\n", - " ObjectId('656b42b3f43aad980e839a33'),\n", - " ObjectId('656b42b3f43aad980e839a34'),\n", - " ObjectId('656b42b3f43aad980e839a35'),\n", - " ObjectId('656b42b3f43aad980e839a36'),\n", - " ObjectId('656b42b3f43aad980e839a37'),\n", - " ObjectId('656b42b3f43aad980e839a38'),\n", - " ObjectId('656b42b3f43aad980e839a39'),\n", - " ObjectId('656b42b3f43aad980e839a3a'),\n", - " ObjectId('656b42b3f43aad980e839a3b'),\n", - " ObjectId('656b42b3f43aad980e839a3c'),\n", - " ObjectId('656b42b3f43aad980e839a3d'),\n", - " ObjectId('656b42b3f43aad980e839a3e'),\n", - " ObjectId('656b42b3f43aad980e839a3f'),\n", - " ObjectId('656b42b3f43aad980e839a40'),\n", - " ObjectId('656b42b3f43aad980e839a41'),\n", - " ObjectId('656b42b3f43aad980e839a42'),\n", - " ObjectId('656b42b3f43aad980e839a43'),\n", - " ObjectId('656b42b3f43aad980e839a44'),\n", - " ObjectId('656b42b3f43aad980e839a45'),\n", - " ObjectId('656b42b3f43aad980e839a46'),\n", - " ObjectId('656b42b3f43aad980e839a47'),\n", - " ObjectId('656b42b3f43aad980e839a48'),\n", - " ObjectId('656b42b3f43aad980e839a49'),\n", - " ObjectId('656b42b3f43aad980e839a4a'),\n", - " ObjectId('656b42b3f43aad980e839a4b'),\n", - " ObjectId('656b42b3f43aad980e839a4c'),\n", - " ObjectId('656b42b3f43aad980e839a4d'),\n", - " ObjectId('656b42b3f43aad980e839a4e'),\n", - " ObjectId('656b42b3f43aad980e839a4f'),\n", - " ObjectId('656b42b3f43aad980e839a50'),\n", - " ObjectId('656b42b3f43aad980e839a51'),\n", - " ObjectId('656b42b3f43aad980e839a52'),\n", - " ObjectId('656b42b3f43aad980e839a53'),\n", - " ObjectId('656b42b3f43aad980e839a54'),\n", - " ObjectId('656b42b3f43aad980e839a55'),\n", - " ObjectId('656b42b3f43aad980e839a56'),\n", - " ObjectId('656b42b3f43aad980e839a57'),\n", - " ObjectId('656b42b3f43aad980e839a58'),\n", - " ObjectId('656b42b3f43aad980e839a59'),\n", - " ObjectId('656b42b3f43aad980e839a5a'),\n", - " ObjectId('656b42b3f43aad980e839a5b'),\n", - " ObjectId('656b42b3f43aad980e839a5c'),\n", - " ObjectId('656b42b3f43aad980e839a5d'),\n", - " ObjectId('656b42b3f43aad980e839a5e'),\n", - " ObjectId('656b42b3f43aad980e839a5f'),\n", - " ObjectId('656b42b3f43aad980e839a60'),\n", - " ObjectId('656b42b3f43aad980e839a61'),\n", - " ObjectId('656b42b3f43aad980e839a62'),\n", - " ObjectId('656b42b3f43aad980e839a63'),\n", - " ObjectId('656b42b3f43aad980e839a64'),\n", - " ObjectId('656b42b3f43aad980e839a65'),\n", - " ObjectId('656b42b3f43aad980e839a66'),\n", - " ObjectId('656b42b3f43aad980e839a67'),\n", - " ObjectId('656b42b3f43aad980e839a68'),\n", - " ObjectId('656b42b3f43aad980e839a69'),\n", - " ObjectId('656b42b3f43aad980e839a6a'),\n", - " ObjectId('656b42b3f43aad980e839a6b'),\n", - " ObjectId('656b42b3f43aad980e839a6c'),\n", - " ObjectId('656b42b3f43aad980e839a6d'),\n", - " ObjectId('656b42b3f43aad980e839a6e'),\n", - " ObjectId('656b42b3f43aad980e839a6f'),\n", - " ObjectId('656b42b3f43aad980e839a70'),\n", - " ObjectId('656b42b3f43aad980e839a71'),\n", - " ObjectId('656b42b3f43aad980e839a72'),\n", - " ObjectId('656b42b3f43aad980e839a73'),\n", - " ObjectId('656b42b3f43aad980e839a74'),\n", - " ObjectId('656b42b3f43aad980e839a75'),\n", - " ObjectId('656b42b3f43aad980e839a76'),\n", - " ObjectId('656b42b3f43aad980e839a77'),\n", - " ObjectId('656b42b3f43aad980e839a78'),\n", - " ObjectId('656b42b3f43aad980e839a79'),\n", - " ObjectId('656b42b3f43aad980e839a7a'),\n", - " ObjectId('656b42b3f43aad980e839a7b'),\n", - " ObjectId('656b42b3f43aad980e839a7c'),\n", - " ObjectId('656b42b3f43aad980e839a7d'),\n", - " ObjectId('656b42b3f43aad980e839a7e'),\n", - " ObjectId('656b42b3f43aad980e839a7f'),\n", - " ObjectId('656b42b3f43aad980e839a80'),\n", - " ObjectId('656b42b3f43aad980e839a81'),\n", - " ObjectId('656b42b3f43aad980e839a82'),\n", - " ObjectId('656b42b3f43aad980e839a83'),\n", - " ObjectId('656b42b3f43aad980e839a84'),\n", - " ObjectId('656b42b3f43aad980e839a85'),\n", - " ObjectId('656b42b3f43aad980e839a86'),\n", - " ObjectId('656b42b3f43aad980e839a87'),\n", - " ObjectId('656b42b3f43aad980e839a88'),\n", - " ObjectId('656b42b3f43aad980e839a89'),\n", - " ObjectId('656b42b3f43aad980e839a8a'),\n", - " ObjectId('656b42b3f43aad980e839a8b'),\n", - " ObjectId('656b42b3f43aad980e839a8c'),\n", - " ObjectId('656b42b3f43aad980e839a8d'),\n", - " ObjectId('656b42b3f43aad980e839a8e'),\n", - " ObjectId('656b42b3f43aad980e839a8f'),\n", - " ObjectId('656b42b3f43aad980e839a90'),\n", - " ObjectId('656b42b3f43aad980e839a91'),\n", - " ObjectId('656b42b3f43aad980e839a92'),\n", - " ObjectId('656b42b3f43aad980e839a93'),\n", - " ObjectId('656b42b3f43aad980e839a94'),\n", - " ObjectId('656b42b3f43aad980e839a95'),\n", - " ObjectId('656b42b3f43aad980e839a96'),\n", - " ObjectId('656b42b3f43aad980e839a97'),\n", - " ObjectId('656b42b3f43aad980e839a98'),\n", - " ObjectId('656b42b3f43aad980e839a99'),\n", - " ObjectId('656b42b3f43aad980e839a9a'),\n", - " ObjectId('656b42b3f43aad980e839a9b'),\n", - " ObjectId('656b42b3f43aad980e839a9c'),\n", - " ObjectId('656b42b3f43aad980e839a9d'),\n", - " ObjectId('656b42b3f43aad980e839a9e'),\n", - " ObjectId('656b42b3f43aad980e839a9f'),\n", - " ObjectId('656b42b3f43aad980e839aa0'),\n", - " ObjectId('656b42b3f43aad980e839aa1'),\n", - " ObjectId('656b42b3f43aad980e839aa2'),\n", - " ObjectId('656b42b3f43aad980e839aa3'),\n", - " ObjectId('656b42b3f43aad980e839aa4'),\n", - " ObjectId('656b42b3f43aad980e839aa5'),\n", - " ObjectId('656b42b3f43aad980e839aa6'),\n", - " ObjectId('656b42b3f43aad980e839aa7'),\n", - " ObjectId('656b42b3f43aad980e839aa8'),\n", - " ObjectId('656b42b3f43aad980e839aa9'),\n", - " ObjectId('656b42b3f43aad980e839aaa'),\n", - " ObjectId('656b42b3f43aad980e839aab'),\n", - " ObjectId('656b42b3f43aad980e839aac'),\n", - " ObjectId('656b42b3f43aad980e839aad'),\n", - " ObjectId('656b42b3f43aad980e839aae'),\n", - " ObjectId('656b42b3f43aad980e839aaf'),\n", - " ObjectId('656b42b3f43aad980e839ab0'),\n", - " ObjectId('656b42b3f43aad980e839ab1'),\n", - " ObjectId('656b42b3f43aad980e839ab2'),\n", - " ObjectId('656b42b3f43aad980e839ab3'),\n", - " ObjectId('656b42b3f43aad980e839ab4'),\n", - " ObjectId('656b42b3f43aad980e839ab5'),\n", - " ObjectId('656b42b3f43aad980e839ab6'),\n", - " ObjectId('656b42b3f43aad980e839ab7'),\n", - " ObjectId('656b42b3f43aad980e839ab8'),\n", - " ObjectId('656b42b3f43aad980e839ab9'),\n", - " ObjectId('656b42b3f43aad980e839aba'),\n", - " ObjectId('656b42b3f43aad980e839abb'),\n", - " ObjectId('656b42b3f43aad980e839abc'),\n", - " ObjectId('656b42b3f43aad980e839abd'),\n", - " ObjectId('656b42b3f43aad980e839abe'),\n", - " ObjectId('656b42b3f43aad980e839abf'),\n", - " ObjectId('656b42b3f43aad980e839ac0'),\n", - " ObjectId('656b42b3f43aad980e839ac1'),\n", - " ObjectId('656b42b3f43aad980e839ac2'),\n", - " ObjectId('656b42b3f43aad980e839ac3'),\n", - " ObjectId('656b42b3f43aad980e839ac4'),\n", - " ObjectId('656b42b3f43aad980e839ac5'),\n", - " ObjectId('656b42b3f43aad980e839ac6'),\n", - " ObjectId('656b42b3f43aad980e839ac7'),\n", - " ObjectId('656b42b3f43aad980e839ac8'),\n", - " ObjectId('656b42b3f43aad980e839ac9'),\n", - " ObjectId('656b42b3f43aad980e839aca'),\n", - " ObjectId('656b42b3f43aad980e839acb'),\n", - " ObjectId('656b42b3f43aad980e839acc'),\n", - " ObjectId('656b42b3f43aad980e839acd'),\n", - " ObjectId('656b42b3f43aad980e839ace'),\n", - " ObjectId('656b42b3f43aad980e839acf'),\n", - " ObjectId('656b42b3f43aad980e839ad0'),\n", - " ObjectId('656b42b3f43aad980e839ad1'),\n", - " ObjectId('656b42b3f43aad980e839ad2'),\n", - " ObjectId('656b42b3f43aad980e839ad3'),\n", - " ObjectId('656b42b3f43aad980e839ad4'),\n", - " ObjectId('656b42b3f43aad980e839ad5'),\n", - " ObjectId('656b42b3f43aad980e839ad6'),\n", - " ObjectId('656b42b3f43aad980e839ad7'),\n", - " ObjectId('656b42b3f43aad980e839ad8'),\n", - " ObjectId('656b42b3f43aad980e839ad9'),\n", - " ObjectId('656b42b3f43aad980e839ada'),\n", - " ObjectId('656b42b3f43aad980e839adb'),\n", - " ObjectId('656b42b3f43aad980e839adc'),\n", - " ObjectId('656b42b3f43aad980e839add'),\n", - " ObjectId('656b42b3f43aad980e839ade'),\n", - " ObjectId('656b42b3f43aad980e839adf'),\n", - " ObjectId('656b42b3f43aad980e839ae0'),\n", - " ObjectId('656b42b3f43aad980e839ae1'),\n", - " ObjectId('656b42b3f43aad980e839ae2'),\n", - " ObjectId('656b42b3f43aad980e839ae3'),\n", - " ObjectId('656b42b3f43aad980e839ae4'),\n", - " ObjectId('656b42b3f43aad980e839ae5'),\n", - " ObjectId('656b42b3f43aad980e839ae6'),\n", - " ObjectId('656b42b3f43aad980e839ae7'),\n", - " ObjectId('656b42b3f43aad980e839ae8'),\n", - " ObjectId('656b42b3f43aad980e839ae9'),\n", - " ObjectId('656b42b3f43aad980e839aea'),\n", - " ObjectId('656b42b3f43aad980e839aeb'),\n", - " ObjectId('656b42b3f43aad980e839aec'),\n", - " ObjectId('656b42b3f43aad980e839aed'),\n", - " ObjectId('656b42b3f43aad980e839aee'),\n", - " ObjectId('656b42b3f43aad980e839aef'),\n", - " ObjectId('656b42b3f43aad980e839af0'),\n", - " ObjectId('656b42b3f43aad980e839af1'),\n", - " ObjectId('656b42b3f43aad980e839af2'),\n", - " ObjectId('656b42b3f43aad980e839af3'),\n", - " ObjectId('656b42b3f43aad980e839af4'),\n", - " ObjectId('656b42b3f43aad980e839af5'),\n", - " ObjectId('656b42b3f43aad980e839af6'),\n", - " ObjectId('656b42b3f43aad980e839af7'),\n", - " ObjectId('656b42b3f43aad980e839af8'),\n", - " ObjectId('656b42b3f43aad980e839af9'),\n", - " ObjectId('656b42b3f43aad980e839afa'),\n", - " ObjectId('656b42b3f43aad980e839afb'),\n", - " ObjectId('656b42b3f43aad980e839afc'),\n", - " ObjectId('656b42b3f43aad980e839afd'),\n", - " ObjectId('656b42b3f43aad980e839afe'),\n", - " ObjectId('656b42b3f43aad980e839aff'),\n", - " ObjectId('656b42b3f43aad980e839b00'),\n", - " ObjectId('656b42b3f43aad980e839b01'),\n", - " ObjectId('656b42b3f43aad980e839b02'),\n", - " ObjectId('656b42b3f43aad980e839b03'),\n", - " ObjectId('656b42b3f43aad980e839b04'),\n", - " ObjectId('656b42b3f43aad980e839b05'),\n", - " ObjectId('656b42b3f43aad980e839b06'),\n", - " ObjectId('656b42b3f43aad980e839b07'),\n", - " ObjectId('656b42b3f43aad980e839b08'),\n", - " ObjectId('656b42b3f43aad980e839b09'),\n", - " ObjectId('656b42b3f43aad980e839b0a'),\n", - " ObjectId('656b42b3f43aad980e839b0b'),\n", - " ObjectId('656b42b3f43aad980e839b0c'),\n", - " ObjectId('656b42b3f43aad980e839b0d'),\n", - " ObjectId('656b42b3f43aad980e839b0e'),\n", - " ObjectId('656b42b3f43aad980e839b0f'),\n", - " ObjectId('656b42b3f43aad980e839b10'),\n", - " ObjectId('656b42b3f43aad980e839b11'),\n", - " ObjectId('656b42b3f43aad980e839b12'),\n", - " ObjectId('656b42b3f43aad980e839b13'),\n", - " ObjectId('656b42b3f43aad980e839b14'),\n", - " ObjectId('656b42b3f43aad980e839b15'),\n", - " ObjectId('656b42b3f43aad980e839b16'),\n", - " ObjectId('656b42b3f43aad980e839b17'),\n", - " ObjectId('656b42b3f43aad980e839b18'),\n", - " ObjectId('656b42b3f43aad980e839b19'),\n", - " ObjectId('656b42b3f43aad980e839b1a'),\n", - " ObjectId('656b42b3f43aad980e839b1b'),\n", - " ObjectId('656b42b3f43aad980e839b1c'),\n", - " ObjectId('656b42b3f43aad980e839b1d'),\n", - " ObjectId('656b42b3f43aad980e839b1e'),\n", - " ObjectId('656b42b3f43aad980e839b1f'),\n", - " ObjectId('656b42b3f43aad980e839b20'),\n", - " ObjectId('656b42b3f43aad980e839b21'),\n", - " ObjectId('656b42b3f43aad980e839b22')],\n", - " TaskWorkflow(database=, G=))" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "from superduperdb import Document\n", "\n", @@ -1336,7 +281,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "id": "56905f2e-485e-4179-8585-34eac26c0751", "metadata": {}, "outputs": [], @@ -1349,1021 +294,10 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "id": "6bb05a78-263e-4e6f-b429-8e51dbb932b8", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[-0.008059182204306126,\n", - " -0.003603511257097125,\n", - " -0.000528058095369488,\n", - " -0.005753727629780769,\n", - " -0.024468205869197845,\n", - " 0.016131576150655746,\n", - " -0.014929304830729961,\n", - " -0.004634029697626829,\n", - " -0.0009636337636038661,\n", - " -0.03445630520582199,\n", - " 0.015920188277959824,\n", - " 0.01726778782904148,\n", - " -0.008997217752039433,\n", - " 0.0022311382927000523,\n", - " 0.008713165298104286,\n", - " 1.3005340406380128e-05,\n", - " 0.02448141761124134,\n", - " 0.0005771893775090575,\n", - " 0.008336629718542099,\n", - " -0.007444834802299738,\n", - " 0.005446553695946932,\n", - " 0.0075637404806911945,\n", - " -0.011547090485692024,\n", - " 0.02483813464641571,\n", - " -0.028352467343211174,\n", - " -0.02319987490773201,\n", - " 0.0035044229589402676,\n", - " -0.03522258996963501,\n", - " 0.019421307370066643,\n", - " -0.009941860102117062,\n", - " 0.021878696978092194,\n", - " -0.0173470601439476,\n", - " 0.001747257076203823,\n", - " -0.0363323800265789,\n", - " 0.0007807332440279424,\n", - " -0.012676697224378586,\n", - " -0.010609054937958717,\n", - " -0.01729421131312847,\n", - " 0.00801954697817564,\n", - " -0.010886501520872116,\n", - " 0.009162365458905697,\n", - " 0.016686471179127693,\n", - " 0.007147569674998522,\n", - " -0.02133701555430889,\n", - " -0.004822297487407923,\n", - " -0.00045456760562956333,\n", - " 0.00429052347317338,\n", - " -0.018205825239419937,\n", - " -0.00986258964985609,\n", - " 0.022182568907737732,\n", - " 0.02054430916905403,\n", - " -0.010899713262915611,\n", - " -0.032315999269485474,\n", - " -0.0008860146044753492,\n", - " -0.006856910884380341,\n", - " 0.004941203631460667,\n", - " 0.005961813032627106,\n", - " 0.02874881960451603,\n", - " 0.009988101199269295,\n", - " -0.003999864682555199,\n", - " -0.032527387142181396,\n", - " 0.008217723108828068,\n", - " -0.012683303095400333,\n", - " 0.006823881063610315,\n", - " 0.021442709490656853,\n", - " 0.002125444123521447,\n", - " 0.020676426589488983,\n", - " 0.00702205765992403,\n", - " 0.006837093271315098,\n", - " 0.007431623060256243,\n", - " 0.018985319882631302,\n", - " 0.009380359202623367,\n", - " -8.536044333595783e-05,\n", - " -0.0028190622106194496,\n", - " 0.01158672571182251,\n", - " -0.006480375304818153,\n", - " -0.021773003041744232,\n", - " 0.004323552828282118,\n", - " 0.008891523815691471,\n", - " -0.005165803711861372,\n", - " 0.013462797738611698,\n", - " -0.025089159607887268,\n", - " -0.020187590271234512,\n", - " 0.02079533226788044,\n", - " 0.00010037851461675018,\n", - " -0.007074905093759298,\n", - " 0.0014012737665325403,\n", - " 0.0289602093398571,\n", - " -0.013489221222698689,\n", - " -0.014136598445475101,\n", - " -0.007339140400290489,\n", - " 0.01915707252919674,\n", - " 0.011989684775471687,\n", - " 0.01527281105518341,\n", - " -0.015695586800575256,\n", - " 0.017915165051817894,\n", - " 0.00185295136179775,\n", - " 0.03292373940348625,\n", - " -0.008713165298104286,\n", - " -0.026357488706707954,\n", - " -0.005796665791422129,\n", - " -0.0034416671842336655,\n", - " 0.006394498515874147,\n", - " -0.003388819983229041,\n", - " -0.012921115383505821,\n", - " -0.011930231936275959,\n", - " -0.002234441228210926,\n", - " 0.004330158699303865,\n", - " 0.027401220053434372,\n", - " 0.00284218299202621,\n", - " -0.009842772036790848,\n", - " 0.013845939189195633,\n", - " -0.005912268999963999,\n", - " -0.03588317707180977,\n", - " 0.01005415990948677,\n", - " -9.305011190008372e-05,\n", - " -0.001806710148230195,\n", - " -0.021218109875917435,\n", - " -0.022526074200868607,\n", - " -0.016052305698394775,\n", - " 0.010694931261241436,\n", - " 0.015391716733574867,\n", - " 0.01614478789269924,\n", - " -0.01362133864313364,\n", - " 0.02729552425444126,\n", - " 0.005241771228611469,\n", - " -0.02109920233488083,\n", - " -0.03273877501487732,\n", - " -0.009076489135622978,\n", - " -0.0036200261674821377,\n", - " 0.029964303597807884,\n", - " 0.003646449651569128,\n", - " 0.014585798606276512,\n", - " 0.022962063550949097,\n", - " -0.024970252066850662,\n", - " 0.024296453222632408,\n", - " -0.00883867684751749,\n", - " 0.031523291021585464,\n", - " -0.03450915217399597,\n", - " -0.015854129567742348,\n", - " -0.004640635568648577,\n", - " 0.026661360636353493,\n", - " -0.009624777361750603,\n", - " -0.015259599313139915,\n", - " -0.009895619004964828,\n", - " 0.021085990592837334,\n", - " 0.020597156137228012,\n", - " -0.022935640066862106,\n", - " 0.01163957267999649,\n", - " -0.024230392649769783,\n", - " 0.0036827819421887398,\n", - " 0.000374264782294631,\n", - " 0.020346131175756454,\n", - " -0.0005598489078693092,\n", - " 0.020214013755321503,\n", - " 0.03445630520582199,\n", - " 0.0015672467416152358,\n", - " -7.395497232209891e-05,\n", - " -0.010853472165763378,\n", - " -0.019381672143936157,\n", - " 0.00389417028054595,\n", - " 0.0045481533743441105,\n", - " -0.0033805626444518566,\n", - " -0.01895889639854431,\n", - " 0.024203969165682793,\n", - " 0.03263308107852936,\n", - " 0.020557520911097527,\n", - " 0.01142157893627882,\n", - " -0.0006548085366375744,\n", - " -0.006364772096276283,\n", - " -0.022578921169042587,\n", - " 0.027533337473869324,\n", - " -0.038842614740133286,\n", - " 0.02478528767824173,\n", - " -0.017584871500730515,\n", - " 0.0029247563797980547,\n", - " -0.007570346351712942,\n", - " -0.002918150508776307,\n", - " -0.014400833286345005,\n", - " -0.0055852774530649185,\n", - " -0.03353148326277733,\n", - " 0.01677895337343216,\n", - " 0.01593340002000332,\n", - " 0.017016764730215073,\n", - " 0.001558163552545011,\n", - " -0.0033359730150550604,\n", - " 0.02866954915225506,\n", - " -0.010760989971458912,\n", - " 0.0013129200087860227,\n", - " -0.005264891777187586,\n", - " 0.021773003041744232,\n", - " 0.02240716852247715,\n", - " 0.001459900988265872,\n", - " 0.0023764679208397865,\n", - " -0.6920855641365051,\n", - " 0.00015833484940230846,\n", - " 0.029277291148900986,\n", - " 0.006612492725253105,\n", - " 0.024217180907726288,\n", - " 0.04259476065635681,\n", - " 0.030202114954590797,\n", - " 0.006909757852554321,\n", - " 0.004931294824928045,\n", - " 0.012861661612987518,\n", - " -0.010318395681679249,\n", - " 0.008376264944672585,\n", - " -0.00807239394634962,\n", - " -0.012782391160726547,\n", - " -0.007524105254560709,\n", - " -0.01795480027794838,\n", - " -0.008078999817371368,\n", - " -0.01997620239853859,\n", - " 0.004558062180876732,\n", - " 0.018245460465550423,\n", - " 0.005245074164122343,\n", - " 0.021033143624663353,\n", - " 0.005390403792262077,\n", - " -0.005615003872662783,\n", - " -0.011481031775474548,\n", - " 0.0012584214564412832,\n", - " 0.021878696978092194,\n", - " 0.0065266164019703865,\n", - " 0.011084678582847118,\n", - " 0.0029247563797980547,\n", - " -0.014836822636425495,\n", - " 0.017003552988171577,\n", - " -0.0003740583488252014,\n", - " 0.01163957267999649,\n", - " 0.028220349922776222,\n", - " -0.011005408130586147,\n", - " -0.007107934448868036,\n", - " -0.007735493592917919,\n", - " 0.013165532611310482,\n", - " 0.016105152666568756,\n", - " -0.013522250577807426,\n", - " 0.007094722706824541,\n", - " 0.027031289413571358,\n", - " 0.012683303095400333,\n", - " -0.014255504123866558,\n", - " 0.0014912789920344949,\n", - " 0.008330023847520351,\n", - " -0.00886510033160448,\n", - " 0.005945298355072737,\n", - " 0.003084949217736721,\n", - " -0.006407710257917643,\n", - " -0.0030750404112040997,\n", - " -0.0048421151004731655,\n", - " 0.0006519184680655599,\n", - " -0.00410555861890316,\n", - " -0.008475353009998798,\n", - " 0.014955728314816952,\n", - " 0.027586184442043304,\n", - " 0.0047628446482121944,\n", - " 0.012729544192552567,\n", - " -0.013832727447152138,\n", - " 0.015193539671599865,\n", - " -0.00641431612893939,\n", - " -0.007709070108830929,\n", - " -0.021548403427004814,\n", - " 0.008462141267955303,\n", - " -0.025406241416931152,\n", - " 0.03583033010363579,\n", - " 0.003025496145710349,\n", - " -0.005294618662446737,\n", - " 0.006397801451385021,\n", - " 0.005654639098793268,\n", - " -0.007894035428762436,\n", - " -0.009340723976492882,\n", - " 0.028616702184081078,\n", - " 0.0236358642578125,\n", - " 0.007583558093756437,\n", - " -0.004181526601314545,\n", - " -0.00538379792124033,\n", - " 0.019606271758675575,\n", - " -0.00021943930187262595,\n", - " 0.00015988311497494578,\n", - " -0.012531368061900139,\n", - " -0.01342976838350296,\n", - " 0.011263037100434303,\n", - " -0.02191833220422268,\n", - " -0.0269123837351799,\n", - " 0.0031526596285402775,\n", - " 0.0020742486231029034,\n", - " 0.01806049421429634,\n", - " 0.02598755992949009,\n", - " 0.010040948167443275,\n", - " -0.019368460401892662,\n", - " -0.00762319378554821,\n", - " 0.012815420515835285,\n", - " -0.006536525208503008,\n", - " -0.0070881168358027935,\n", - " 0.016514716669917107,\n", - " 0.02808823063969612,\n", - " 0.013238197192549706,\n", - " -0.005000656470656395,\n", - " -0.0031510081607848406,\n", - " 0.001975160324946046,\n", - " 0.020451826974749565,\n", - " 0.004670361988246441,\n", - " 0.014110174961388111,\n", - " 0.0070881168358027935,\n", - " 0.02647639438509941,\n", - " 0.016950706019997597,\n", - " -0.024573899805545807,\n", - " 0.003207158064469695,\n", - " -0.014096963219344616,\n", - " -0.027559760957956314,\n", - " 0.00027889228658750653,\n", - " 0.013317468576133251,\n", - " -0.03926539048552513,\n", - " -0.00568436598405242,\n", - " 0.01136873196810484,\n", - " 0.008501776494085789,\n", - " -0.018628600984811783,\n", - " 0.024851346388459206,\n", - " 0.0027876843232661486,\n", - " 0.029224444180727005,\n", - " 0.020042261108756065,\n", - " 0.002569690113887191,\n", - " 0.0007274732924997807,\n", - " -0.0007035269518382847,\n", - " -0.019381672143936157,\n", - " -0.01163957267999649,\n", - " 0.005165803711861372,\n", - " -0.0023599532432854176,\n", - " -0.003907382022589445,\n", - " 0.019024955108761787,\n", - " -0.006837093271315098,\n", - " 0.011606543324887753,\n", - " 0.0039701382629573345,\n", - " 0.015193539671599865,\n", - " 0.006222745403647423,\n", - " 0.014506528154015541,\n", - " -0.010120218619704247,\n", - " -0.017584871500730515,\n", - " 0.024111486971378326,\n", - " -0.014612222090363503,\n", - " 0.013205167837440968,\n", - " 0.004574576858431101,\n", - " -0.01565595157444477,\n", - " -0.0219976045191288,\n", - " -0.01800764724612236,\n", - " -0.00026650624931789935,\n", - " -0.00102638965472579,\n", - " -0.02317345142364502,\n", - " 0.00045332900481298566,\n", - " -0.008990611881017685,\n", - " 0.008112029172480106,\n", - " -0.016765741631388664,\n", - " -0.004706694278866053,\n", - " -0.006949393078684807,\n", - " -0.02530054748058319,\n", - " -0.019143860787153244,\n", - " -0.014295139349997044,\n", - " -0.0014863245887681842,\n", - " 0.006457254756242037,\n", - " -0.008666924200952053,\n", - " 0.0009355587535537779,\n", - " -0.017835894599556923,\n", - " -0.007114540319889784,\n", - " -0.019910143688321114,\n", - " 0.012993779964745045,\n", - " -0.018404001370072365,\n", - " -0.03028138540685177,\n", - " -0.021376650780439377,\n", - " 0.002975952113047242,\n", - " -0.021627673879265785,\n", - " 0.013409950770437717,\n", - " 0.010278760455548763,\n", - " -0.002553175436332822,\n", - " -0.01305983867496252,\n", - " -0.003195597790181637,\n", - " -0.008204511366784573,\n", - " -0.012399249710142612,\n", - " 0.007292899303138256,\n", - " 0.0013657670933753252,\n", - " 0.006381286773830652,\n", - " 0.017796259373426437,\n", - " 0.0023467412684112787,\n", - " 0.01882677711546421,\n", - " 0.020478250458836555,\n", - " 0.019381672143936157,\n", - " -0.00739198736846447,\n", - " 0.006718187127262354,\n", - " -0.007662829011678696,\n", - " 0.0019355248659849167,\n", - " -0.015087845735251904,\n", - " 0.010985590517520905,\n", - " -0.01034481916576624,\n", - " -0.0022245324216783047,\n", - " -0.011084678582847118,\n", - " 0.003973441198468208,\n", - " 0.0005986585165373981,\n", - " 0.02046503871679306,\n", - " 0.03268592804670334,\n", - " 0.012940932996571064,\n", - " 0.02284315787255764,\n", - " -0.016382599249482155,\n", - " 0.009492659941315651,\n", - " -0.033267248421907425,\n", - " -0.004792571067810059,\n", - " -0.007358958013355732,\n", - " 0.01478397473692894,\n", - " 0.011923626065254211,\n", - " 0.01245870254933834,\n", - " -0.02598755992949009,\n", - " -0.03617383539676666,\n", - " 0.018100131303071976,\n", - " 0.024217180907726288,\n", - " 0.018456848338246346,\n", - " -0.013634550385177135,\n", - " 0.010926136747002602,\n", - " -0.011679207906126976,\n", - " 0.007405199110507965,\n", - " -0.009175577200949192,\n", - " 0.011018619872629642,\n", - " 0.009684230200946331,\n", - " -0.017624506726861,\n", - " -0.02345089800655842,\n", - " 0.012068955227732658,\n", - " 0.029462255537509918,\n", - " 0.033980682492256165,\n", - " 0.018192613497376442,\n", - " -0.02967364527285099,\n", - " -0.014519739896059036,\n", - " 0.013476009480655193,\n", - " 0.00019827982760034502,\n", - " -0.0022129721473902464,\n", - " 0.0004479617055039853,\n", - " 0.007973305881023407,\n", - " 0.010595843195915222,\n", - " 0.0021667310502380133,\n", - " 0.0346941202878952,\n", - " 0.008224328979849815,\n", - " 0.008997217752039433,\n", - " 0.012703120708465576,\n", - " 0.0390804260969162,\n", - " -0.0061302632093429565,\n", - " 0.02360944077372551,\n", - " 0.01716209389269352,\n", - " 0.025749746710062027,\n", - " -0.007940276525914669,\n", - " -0.006427527870982885,\n", - " 0.033082280308008194,\n", - " -0.0036695702001452446,\n", - " 0.005119562614709139,\n", - " -0.005390403792262077,\n", - " 0.0030899036210030317,\n", - " 0.019778026267886162,\n", - " -0.018351154401898384,\n", - " -0.025802595540881157,\n", - " -0.0013418208109214902,\n", - " 0.01317213848233223,\n", - " 0.03051919862627983,\n", - " 0.011137525551021099,\n", - " 0.01187077909708023,\n", - " 0.005654639098793268,\n", - " -0.021019931882619858,\n", - " 0.011091284453868866,\n", - " -0.0037455379497259855,\n", - " -0.00028467245283536613,\n", - " 0.00866031739860773,\n", - " -0.010827048681676388,\n", - " -0.01614478789269924,\n", - " -0.01792837679386139,\n", - " -0.00940017681568861,\n", - " 0.022644979879260063,\n", - " -0.0018413909710943699,\n", - " 0.03123263455927372,\n", - " 0.012253920547664165,\n", - " 0.029092326760292053,\n", - " 0.010325001552700996,\n", - " 0.02194475568830967,\n", - " 0.015404928475618362,\n", - " 0.0033095492981374264,\n", - " -0.02880166657269001,\n", - " 0.0089509766548872,\n", - " 0.0056017921306192875,\n", - " 0.0016184423584491014,\n", - " -0.024547476321458817,\n", - " -0.021403074264526367,\n", - " 0.015087845735251904,\n", - " -0.003603511257097125,\n", - " 0.0031559625640511513,\n", - " -0.004307038150727749,\n", - " -0.003317806636914611,\n", - " 0.006047689355909824,\n", - " -0.029937880113720894,\n", - " 0.006206230726093054,\n", - " 0.024745652452111244,\n", - " 0.007425017189234495,\n", - " 0.006113748531788588,\n", - " -0.008310206234455109,\n", - " -0.016303328797221184,\n", - " 0.014321562834084034,\n", - " 0.004521729424595833,\n", - " 0.017056399956345558,\n", - " -0.013026809319853783,\n", - " 0.002840531524270773,\n", - " -0.010311789810657501,\n", - " -0.005902360193431377,\n", - " -0.02194475568830967,\n", - " -0.001824876293540001,\n", - " 0.0028058504685759544,\n", - " 0.016514716669917107,\n", - " 0.02251286245882511,\n", - " -0.0020461734384298325,\n", - " -0.0073655638843774796,\n", - " 0.02054430916905403,\n", - " 0.0018050586804747581,\n", - " -0.008508382365107536,\n", - " 0.00977010652422905,\n", - " 0.026740631088614464,\n", - " 0.018205825239419937,\n", - " -0.015101057477295399,\n", - " -0.009419994428753853,\n", - " -0.018575754016637802,\n", - " 0.005641427356749773,\n", - " 0.04616193845868111,\n", - " 0.02737479656934738,\n", - " 0.01200950238853693,\n", - " -0.006077416241168976,\n", - " -0.008805647492408752,\n", - " -0.01729421131312847,\n", - " -0.04301753640174866,\n", - " -0.00900382362306118,\n", - " 0.008336629718542099,\n", - " 0.0048256004229187965,\n", - " 0.002262516412883997,\n", - " 0.0065431310795247555,\n", - " 0.015814494341611862,\n", - " -0.0012386038433760405,\n", - " 0.013211773708462715,\n", - " 0.009664412587881088,\n", - " -0.003976744133979082,\n", - " -0.010939348489046097,\n", - " 0.005017171148210764,\n", - " -0.003192294854670763,\n", - " 0.0016374342376366258,\n", - " 0.004458973649889231,\n", - " 0.0016679865075275302,\n", - " 0.007742099463939667,\n", - " 0.017056399956345558,\n", - " -0.005397009663283825,\n", - " 0.0006378809921443462,\n", - " -0.0036695702001452446,\n", - " -0.0011073118075728416,\n", - " -0.018258672207593918,\n", - " -0.00977010652422905,\n", - " 0.016739318147301674,\n", - " 0.0026225370820611715,\n", - " 0.007048481609672308,\n", - " -0.003814899828284979,\n", - " 0.020729273557662964,\n", - " -0.01732063479721546,\n", - " 0.006764428224414587,\n", - " 0.011335701681673527,\n", - " -0.0025003282353281975,\n", - " 0.011976473033428192,\n", - " -0.005496098194271326,\n", - " -0.01195665542036295,\n", - " -0.01708282344043255,\n", - " 0.009083095006644726,\n", - " -0.003874352667480707,\n", - " -0.00903024710714817,\n", - " 0.009419994428753853,\n", - " -0.0021518676076084375,\n", - " -0.00855462346225977,\n", - " 0.021165261045098305,\n", - " -0.005727304145693779,\n", - " -0.0086735300719738,\n", - " -0.016514716669917107,\n", - " 0.017756624147295952,\n", - " 0.01570879854261875,\n", - " -0.016435446217656136,\n", - " -0.009618171490728855,\n", - " -0.010952560231089592,\n", - " -0.043651700019836426,\n", - " -0.04420659691095352,\n", - " -0.015880553051829338,\n", - " -0.006843699142336845,\n", - " -0.01084686629474163,\n", - " -0.017069611698389053,\n", - " -0.030704163014888763,\n", - " -0.020121531561017036,\n", - " -0.018655024468898773,\n", - " -0.023847252130508423,\n", - " -0.013925209641456604,\n", - " -0.0012575957225635648,\n", - " -0.017915165051817894,\n", - " -0.022882793098688126,\n", - " -0.016712894663214684,\n", - " 0.016673259437084198,\n", - " -0.00010378468141425401,\n", - " -0.014889669604599476,\n", - " 0.0007097199559211731,\n", - " -0.010457118973135948,\n", - " 0.008732982911169529,\n", - " 0.0037752643693238497,\n", - " -0.026568878442049026,\n", - " -0.0007060041534714401,\n", - " -0.014691492542624474,\n", - " -0.004429247230291367,\n", - " 0.02790326625108719,\n", - " 0.018324730917811394,\n", - " 0.016897859051823616,\n", - " 0.008964188396930695,\n", - " 0.009195394814014435,\n", - " 0.00986258964985609,\n", - " -0.012921115383505821,\n", - " 0.006539828144013882,\n", - " -0.028590278699994087,\n", - " 0.014717916026711464,\n", - " -0.01866823621094227,\n", - " 0.01295414473861456,\n", - " -0.009122730232775211,\n", - " -0.010800625197589397,\n", - " 0.0014144855085760355,\n", - " -0.005241771228611469,\n", - " -0.020293284207582474,\n", - " -0.009869195520877838,\n", - " 0.008164876140654087,\n", - " 0.012511549517512321,\n", - " -0.00526819471269846,\n", - " -0.004422641359269619,\n", - " 0.012795602902770042,\n", - " -0.019117437303066254,\n", - " -0.006004751194268465,\n", - " -0.0023616047110408545,\n", - " -0.029409408569335938,\n", - " 0.01082044281065464,\n", - " -0.01787552982568741,\n", - " 0.004739724099636078,\n", - " 0.011751873418688774,\n", - " 0.007114540319889784,\n", - " 0.03136475011706352,\n", - " -0.013581703417003155,\n", - " -0.015325658023357391,\n", - " -0.00012024778698105365,\n", - " -0.023952946066856384,\n", - " 0.004389612004160881,\n", - " 0.011692419648170471,\n", - " 0.01240585558116436,\n", - " 0.013423162512481213,\n", - " -0.002184897195547819,\n", - " -0.023411262780427933,\n", - " -0.021376650780439377,\n", - " 0.0020643395837396383,\n", - " -0.018615389242768288,\n", - " 0.013442980125546455,\n", - " -0.012531368061900139,\n", - " -0.01515390444546938,\n", - " -0.031470444053411484,\n", - " -0.01808691769838333,\n", - " -0.0027117165736854076,\n", - " 0.03136475011706352,\n", - " 0.004607606213539839,\n", - " -0.014995363540947437,\n", - " -0.023926522582769394,\n", - " 0.012861661612987518,\n", - " -0.005443250760436058,\n", - " -0.014281927607953548,\n", - " -0.012769179418683052,\n", - " -0.03773282840847969,\n", - " -0.008429111912846565,\n", - " 0.013753456994891167,\n", - " -0.022750675678253174,\n", - " 0.010708143003284931,\n", - " 0.011963261291384697,\n", - " -0.005017171148210764,\n", - " -0.024494629353284836,\n", - " -0.010919530875980854,\n", - " -0.004994050599634647,\n", - " -0.02811465598642826,\n", - " -0.012504943646490574,\n", - " -0.003250096458941698,\n", - " 0.03472054377198219,\n", - " 0.04217198118567467,\n", - " 0.033187977969646454,\n", - " -0.0012831935891881585,\n", - " 0.006850305013358593,\n", - " 0.009109518490731716,\n", - " -0.010331607423722744,\n", - " -0.009902224875986576,\n", - " -0.02279031090438366,\n", - " -0.010490148328244686,\n", - " -0.010708143003284931,\n", - " 0.001511922338977456,\n", - " 0.002430966356769204,\n", - " 0.015774857252836227,\n", - " -0.004990747664123774,\n", - " 0.010021130554378033,\n", - " 0.002738140057772398,\n", - " 0.011097890324890614,\n", - " -0.015470987185835838,\n", - " 0.004620817955583334,\n", - " -0.013978056609630585,\n", - " -0.01601267047226429,\n", - " -0.009241635911166668,\n", - " 0.002644006162881851,\n", - " -0.013066444545984268,\n", - " 0.012392643839120865,\n", - " -0.012782391160726547,\n", - " -0.013152320869266987,\n", - " 0.025762958452105522,\n", - " 0.011877384968101978,\n", - " 0.005529127549380064,\n", - " 0.009195394814014435,\n", - " 0.016871435567736626,\n", - " -0.015748433768749237,\n", - " -0.009651200845837593,\n", - " 0.01282863225787878,\n", - " 0.002736488590016961,\n", - " -0.010840260423719883,\n", - " 0.006143474951386452,\n", - " -0.014281927607953548,\n", - " -0.017584871500730515,\n", - " 0.022671403363347054,\n", - " -0.010417483747005463,\n", - " 0.026331065222620964,\n", - " -0.005796665791422129,\n", - " 0.010093795135617256,\n", - " 0.012544579803943634,\n", - " 0.009968283586204052,\n", - " -0.007127752061933279,\n", - " 0.007590163964778185,\n", - " 0.014902881346642971,\n", - " 0.002977603580802679,\n", - " -0.00221627508290112,\n", - " -0.033954259008169174,\n", - " -0.007880822755396366,\n", - " -0.020253648981451988,\n", - " 0.013158926740288734,\n", - " 0.033082280308008194,\n", - " -0.015008575282990932,\n", - " 0.020372554659843445,\n", - " -0.012822026386857033,\n", - " -0.025472300127148628,\n", - " -0.0038215056993067265,\n", - " 0.0024260119535028934,\n", - " 0.049227070063352585,\n", - " 0.014400833286345005,\n", - " 0.013231591321527958,\n", - " 0.017056399956345558,\n", - " -0.002006538212299347,\n", - " -0.024085063487291336,\n", - " 0.023107392713427544,\n", - " -0.024058640003204346,\n", - " -0.0031344934832304716,\n", - " 0.03049277514219284,\n", - " 0.035513248294591904,\n", - " -0.017069611698389053,\n", - " -0.006955998949706554,\n", - " 0.0012790649197995663,\n", - " 0.02962079644203186,\n", - " 0.0016845011850818992,\n", - " -0.024877769872546196,\n", - " -0.0005635647103190422,\n", - " 0.011672602035105228,\n", - " 0.000843076326418668,\n", - " -0.01359491515904665,\n", - " -0.00047273378004319966,\n", - " -0.0461883619427681,\n", - " 0.0019057984463870525,\n", - " -0.005476280115544796,\n", - " -0.017716988921165466,\n", - " -0.020068684592843056,\n", - " -0.002660521073266864,\n", - " -0.02000262588262558,\n", - " 0.013423162512481213,\n", - " -0.03503762558102608,\n", - " 0.016250481829047203,\n", - " 0.01688464730978012,\n", - " -0.016620412468910217,\n", - " -0.012769179418683052,\n", - " -0.0007460523629561067,\n", - " -0.026000771671533585,\n", - " -0.002645657630637288,\n", - " 0.010840260423719883,\n", - " 0.0415378175675869,\n", - " -0.004822297487407923,\n", - " 0.004171617794781923,\n", - " 0.015087845735251904,\n", - " 0.0006932052783668041,\n", - " -0.022565709426999092,\n", - " 0.010714748874306679,\n", - " -0.01132909581065178,\n", - " 0.029145173728466034,\n", - " -0.017360271885991096,\n", - " -0.008171482011675835,\n", - " -0.006777639966458082,\n", - " 0.006863516755402088,\n", - " 0.005482885986566544,\n", - " -0.0054366448894143105,\n", - " -0.011038437485694885,\n", - " -0.00823754072189331,\n", - " -0.01601267047226429,\n", - " 0.010120218619704247,\n", - " 0.018100131303071976,\n", - " 0.010410877875983715,\n", - " -0.008541411720216274,\n", - " -0.004908173810690641,\n", - " -0.014110174961388111,\n", - " -0.0014334775041788816,\n", - " -0.0144140450283885,\n", - " -0.007636405527591705,\n", - " -0.010093795135617256,\n", - " -0.02279031090438366,\n", - " -0.019500577822327614,\n", - " -0.0013476009480655193,\n", - " -0.006586069241166115,\n", - " 0.01808691769838333,\n", - " 0.00599153945222497,\n", - " -0.018549330532550812,\n", - " 0.01880035363137722,\n", - " 0.012498337775468826,\n", - " -0.03384856507182121,\n", - " 0.008970794267952442,\n", - " -0.0007320148288272321,\n", - " 0.002690247492864728,\n", - " -0.002746397629380226,\n", - " 0.008382870815694332,\n", - " 0.00559518625959754,\n", - " -0.024151122197508812,\n", - " 0.03503762558102608,\n", - " -0.013700610026717186,\n", - " -0.029937880113720894,\n", - " -0.021403074264526367,\n", - " 0.0014475149801000953,\n", - " 0.018324730917811394,\n", - " -0.0025548269040882587,\n", - " -0.005661244969815016,\n", - " 0.0012427325127646327,\n", - " 0.017756624147295952,\n", - " 0.007728887721896172,\n", - " 0.013509038835763931,\n", - " -0.013337286189198494,\n", - " 0.012372826226055622,\n", - " 0.0011510758195072412,\n", - " 0.0013211773475632071,\n", - " -0.0005920526455156505,\n", - " -0.020940661430358887,\n", - " -0.0023962855339050293,\n", - " 0.005017171148210764,\n", - " -0.0012873222585767508,\n", - " 0.011751873418688774,\n", - " -0.023543382063508034,\n", - " -0.014347986318171024,\n", - " 0.008396082557737827,\n", - " 0.020372554659843445,\n", - " -0.004095649812370539,\n", - " -0.012835238128900528,\n", - " -0.02475886419415474,\n", - " -0.0014260458992794156,\n", - " -0.014295139349997044,\n", - " -0.00013779467553831637,\n", - " -0.00650349585339427,\n", - " -0.009776712395250797,\n", - " -0.02189190872013569,\n", - " -0.007147569674998522,\n", - " -0.014308351092040539,\n", - " 0.012101984582841396,\n", - " -0.019817661494016647,\n", - " -1.1566753528313711e-05,\n", - " -0.02866954915225506,\n", - " -0.00589575432240963,\n", - " -0.03992598131299019,\n", - " -0.024587111547589302,\n", - " -0.006757822353392839,\n", - " 0.005984933581203222,\n", - " 0.020623579621315002,\n", - " -0.012861661612987518,\n", - " -0.019962990656495094,\n", - " 0.002384725259616971,\n", - " -0.03691369667649269,\n", - " -0.02631785348057747,\n", - " -0.024203969165682793,\n", - " -0.0127757852897048,\n", - " -0.005786756984889507,\n", - " 0.006074113305658102,\n", - " -0.01920991949737072,\n", - " 0.025868654251098633,\n", - " 0.004260797053575516,\n", - " 0.025789381936192513,\n", - " -0.00704187573865056,\n", - " -0.018430424854159355,\n", - " 0.01062887255102396,\n", - " -0.013073050417006016,\n", - " 0.012333190999925137,\n", - " 0.001604404766112566,\n", - " -0.02644997090101242,\n", - " -0.023767981678247452,\n", - " 0.023781193420290947,\n", - " 0.005882542580366135,\n", - " 0.013859150931239128,\n", - " 0.013165532611310482,\n", - " -0.004409429617226124,\n", - " -0.019249554723501205,\n", - " -0.005581974517554045,\n", - " 0.0027331856545060873,\n", - " 0.0016737666446715593,\n", - " 0.0050568063743412495,\n", - " -0.002402891404926777,\n", - " -0.016924282535910606,\n", - " -0.01335049793124199,\n", - " 0.005258285906165838,\n", - " -0.003464787732809782,\n", - " 0.008059182204306126,\n", - " -0.012934327125549316,\n", - " 0.005264891777187586,\n", - " -0.009928648360073566,\n", - " 0.005572065711021423,\n", - " -0.03659661486744881,\n", - " -0.003907382022589445,\n", - " -0.01770377717912197,\n", - " -0.00844232365489006,\n", - " 0.012412461452186108,\n", - " -0.011454608291387558,\n", - " -0.008422506041824818,\n", - " 0.01675252988934517,\n", - " 0.004330158699303865,\n", - " -0.02035934291779995,\n", - " -0.007074905093759298,\n", - " 0.022909216582775116,\n", - " 0.0005371411680243909,\n", - " 0.0035275437403470278,\n", - " -0.0025944621302187443,\n", - " -0.0052384682931005955,\n", - " 0.006285501644015312,\n", - " -0.01675252988934517,\n", - " -0.018179401755332947,\n", - " -0.029065903276205063,\n", - " -0.0008236715220846236,\n", - " -0.012260526418685913,\n", - " -0.017280999571084976,\n", - " -0.00739198736846447,\n", - " 0.012504943646490574,\n", - " 0.0033508362248539925,\n", - " -0.01880035363137722,\n", - " -0.0046274238266050816,\n", - " -0.0188532005995512,\n", - " 0.007927064783871174,\n", - " 0.01176508516073227,\n", - " -0.004042802844196558,\n", - " 0.0008001380483619869,\n", - " -0.007927064783871174,\n", - " 0.02057073265314102,\n", - " 0.029118750244379044,\n", - " -0.02437572367489338,\n", - " -0.004594394471496344,\n", - " 0.011936837807297707,\n", - " 0.021218109875917435,\n", - " 0.001289799460209906,\n", - " 0.013178744353353977,\n", - " 0.23654359579086304,\n", - " -0.0018166189547628164,\n", - " -0.00647707236930728,\n", - " 0.018100131303071976,\n", - " 0.01816619001328945,\n", - " 0.03680800274014473,\n", - " 0.00216838251799345,\n", - " -0.006120354402810335,\n", - " 0.0022608647122979164,\n", - " 0.01816619001328945,\n", - " 0.03923896700143814,\n", - " 0.005935389548540115,\n", - " 0.001139515545219183,\n", - " 0.0017687262734398246,\n", - " -0.008369659073650837,\n", - " -0.010496754199266434,\n", - " -0.005350768566131592,\n", - " -0.023952946066856384,\n", - " -0.02811465598642826,\n", - " -0.03263308107852936,\n", - " 0.002236092695966363,\n", - " -0.023847252130508423,\n", - " 0.01751881279051304,\n", - " -0.008263964205980301,\n", - " 0.01433477457612753,\n", - " -0.011831143870949745,\n", - " -0.018787141889333725,\n", - " 0.006556342821568251,\n", - " 0.01677895337343216,\n", - " 0.014136598445475101,\n", - " -0.02604040689766407,\n", - " -0.008719771169126034,\n", - " 0.017743412405252457,\n", - " 0.006077416241168976,\n", - " -0.022314686328172684,\n", - " -0.014585798606276512,\n", - " 0.011758479289710522,\n", - " -0.016567565500736237,\n", - " 0.020214013755321503,\n", - " -0.006602583918720484,\n", - " 0.01340334489941597,\n", - " -0.0005726478411816061,\n", - " 0.006506798788905144,\n", - " -0.008422506041824818,\n", - " 0.00531443627551198,\n", - " 0.00838947668671608,\n", - " ...]" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "model.predict('This is a test', one=True)" ] @@ -2378,7 +312,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "id": "c1625dab-6438-494b-b74d-efb58bfc8610", "metadata": {}, "outputs": [], @@ -2404,40 +338,10 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "id": "1aa132d0-e6a2-46f6-9eb8-13fbce90ff11", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u001b[32m 2023-Dec-02 15:44:16.73\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mDuncans-MacBook-Pro.local\u001b[0m| \u001b[36m88626ad4-e654-4d13-b738-655c215c9549\u001b[0m| \u001b[36msuperduperdb.components.model\u001b[0m:\u001b[36m220 \u001b[0m | \u001b[1mAdding model text-embedding-ada-002 to db\u001b[0m\n", - "\u001b[32m 2023-Dec-02 15:44:16.73\u001b[0m| \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mDuncans-MacBook-Pro.local\u001b[0m| \u001b[36m88626ad4-e654-4d13-b738-655c215c9549\u001b[0m| \u001b[36msuperduperdb.base.datalayer\u001b[0m:\u001b[36m873 \u001b[0m | \u001b[34m\u001b[1mmodel/text-embedding-ada-002/0 already exists - doing nothing\u001b[0m\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "983it [00:00, 21795.56it/s]\n", - "100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:14<00:00, 1.47s/it]\n" - ] - }, - { - "data": { - "text/plain": [ - "([None],\n", - " VectorIndex(identifier='my-index', indexing_listener=Listener(key='txt', model=OpenAIEmbedding(model='text-embedding-ada-002', identifier='text-embedding-ada-002', version=0, takes_context=False, encoder=Encoder(identifier='vector[1536]', decoder=None, encoder=None, shape=(1536,), load_hybrid=True, version=0), model_update_kwargs={}, shape=(1536,)), select=, active=True, identifier='text-embedding-ada-002/txt', predict_kwargs={}, version=0), compatible_listener=None, measure=, version=0, metric_values={}))" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# Import the VectorIndex class from the superduperdb module\n", "from superduperdb import VectorIndex\n", @@ -2453,21 +357,10 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "id": "7fde5b17-9d71-4535-aaf6-85f4fa9910e4", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Document({'txt': '# Anthropic\\n\\n`superduperdb` allows users to work with `anthropic` API models.\\n\\nRead more about this [here](/docs/docs/walkthrough/ai_models#anthropic).\\n# Cohere\\n\\n`superduperdb` allows users to work with `cohere` API models.\\n\\nRead more about this [here](/docs/docs/walkthrough/ai_models#cohere).\\n---\\nsidebar_position: 2\\n---\\n\\n# Custom\\n\\n`superduperdb` provides fully flexible support for AI models from across the \\nopen-source ecosystem.\\n\\nCustom AI integrations may be achieved using the base `superduperdb.Model` class.\\n\\nRead more [here](/docs/docs/walkthrough/ai_models#vanilla)\\n# OpenAI\\n\\n`superduperdb` allows users to work with `openai` API models.', '_fold': 'train', '_id': ObjectId('656b42b3f43aad980e83974c'), '_outputs': {'txt': {'text-embedding-ada-002': {'0': [-0.006495419889688492, 0.010753287002444267, 0.012360848486423492, -0.005898014642298222, -0.0567425973713398, 0.03339673951268196, 0.013997375965118408, -0.011361553333699703, -0.0069045512937009335, -0.03840769827365875, 0.011716376058757305, 0.009819163009524345, -0.022187253460288048, 0.01055777259171009, 0.009840887039899826, -0.017321119084954262, 0.01730663701891899, -0.01522115059196949, 0.014468058943748474, 0.009862610138952732, 0.00939192809164524, 0.039942849427461624, -0.007987121120095253, -0.014605642296373844, 0.01199154369533062, 0.02543134242296219, 0.016582509502768517, -0.031137462705373764, 0.005854567047208548, 0.010789493098855019, 0.038233909755945206, -0.011187762953341007, -0.016017690300941467, -0.01758180558681488, 0.00281142327003181, 0.006053701974451542, 0.008986416272819042, 0.02667684108018875, 0.032672613859176636, 0.021723812445998192, -0.003385293995961547, 0.006756105460226536, -0.013975651934742928, -0.002261086832731962, -0.008066775277256966, 0.012360848486423492, -0.006187665741890669, -0.039653196930885315, 0.014728744514286518, -0.03533739969134331, -0.01026087999343872, 0.04002974182367325, -0.027067869901657104, 0.010767769068479538, -0.0008268625824712217, -0.00219772569835186, 0.0032133138738572598, 0.02224518358707428, 0.004543897230178118, -0.005014579743146896, 0.0266044270247221, -0.005474400706589222, -0.009978470392525196, 0.03136918321251869, -0.039653196930885315, -0.0064374892972409725, -0.00432303873822093, -0.012961874715983868, 0.007856778800487518, 0.01868247799575329, 0.02751682884991169, 0.02488100528717041, 0.005843705497682095, -0.03548222407698631, 0.015177703462541103, -0.02512720786035061, -0.0043447623029351234, 0.022737588733434677, -0.014243579469621181, -0.013244283385574818, -0.0036695138551294804, -0.029718173667788506, -0.00754540367051959, 0.015670109540224075, 0.018001798540353775, 0.00964537262916565, -0.01992797665297985, 0.009898817166686058, 0.008718489669263363, -0.011962578631937504, -0.011911890469491482, -0.009384687058627605, 0.017118362709879875, 0.00023737789888400584, -0.017451461404561996, 0.042897287756204605, 0.020666586235165596, 0.013121182098984718, 0.008530216291546822, -0.004956649616360664, -0.023592058569192886, 0.004254246596246958, -0.04718411713838577, -0.024808593094348907, -0.013222560286521912, 0.019479017704725266, 0.013345661573112011, 0.01642320118844509, 0.01462012529373169, -0.002507289871573448, -0.011318106204271317, 0.03976905718445778, 0.0014066167641431093, -0.042607635259628296, -0.0016546302940696478, -0.025025831535458565, 0.010289845056831837, 0.006734381429851055, -0.02165139839053154, 0.007444025948643684, 0.014591160230338573, 0.03223813697695732, 0.009992953389883041, -0.019261779263615608, 0.009797438979148865, -0.006064563989639282, -0.011223969049751759, -0.01536597590893507, 0.013881515711545944, -0.027690619230270386, 0.021231405436992645, -0.01347600482404232, 0.03220917284488678, 0.005086992401629686, -0.018088694661855698, 0.022752072662115097, -0.024475494399666786, 0.02052175998687744, -0.004645274952054024, -0.026691323146224022, 0.013483245857059956, -0.0020347971003502607, -0.0040840767323970795, 0.006328870542347431, -0.017683181911706924, 0.023244477808475494, 0.012896702624857426, -0.011325347237288952, 0.004884236957877874, 0.010463636368513107, -0.001221964368596673, 0.0015659247292205691, -0.04370830953121185, 0.0029580590780824423, 0.01842179149389267, 0.011013972572982311, -0.005412849597632885, 0.007625057827681303, -0.004428036976605654, 0.00965985469520092, 0.00994950532913208, 0.03258571773767471, -0.021535538136959076, -0.016625957563519478, 0.026792701333761215, 0.016292858868837357, 0.02140519581735134, -0.015612179413437843, -0.02483755722641945, 0.00395373348146677, 0.015699073672294617, 0.025069277733564377, -0.007107307203114033, 0.011564308777451515, -0.017741112038493156, -0.0023027239367365837, 0.02695200964808464, 0.0005553149385377765, -0.03125332295894623, -0.04712618887424469, 0.033802252262830734, -0.002424015197902918, 0.024649284780025482, 0.05190542712807655, -0.01026812195777893, -0.027357520535588264, -0.015003912150859833, 0.009862610138952732, -0.0003998539177700877, 0.00018714158795773983, 0.0013079545460641384, 0.020014870911836624, 0.015858381986618042, 0.010565013624727726, -0.5691059231758118, -0.003332794876769185, -0.030384371057152748, -0.07003756612539291, 0.0037908051162958145, -0.010651908814907074, -0.001691741868853569, 0.022042427211999893, -0.012281195260584354, 0.01417840737849474, -0.02895059995353222, -0.0007449457189068198, -0.015467354096472263, -0.023229995742440224, -0.007451267447322607, -0.010181226767599583, 0.03386018052697182, -0.033831216394901276, -0.009884334169328213, -0.009196413680911064, -0.025663062930107117, 0.02140519581735134, -0.03539533168077469, 0.004196316469460726, 0.0009241671650670469, 0.013946686871349812, 0.014960465021431446, -0.005412849597632885, 0.020275557413697243, -0.009855369105935097, -0.04205729812383652, 0.03218020498752594, 0.02782096154987812, -0.020376935601234436, 0.05329575017094612, 0.029225768521428108, -0.011694652028381824, 0.024794111028313637, 0.015641143545508385, 0.041449032723903656, -0.011919131502509117, -0.013968410901725292, 0.0011006731074303389, 0.004047870170325041, 0.000300060142762959, 0.010673632845282555, 0.03157193958759308, -0.030210580676794052, -0.0013052390422672033, -0.005496124271303415, 0.008682283572852612, 0.007791607175022364, 0.007147133816033602, -0.006690933834761381, 0.0042868321761488914, -0.019551429897546768, 0.03255675360560417, -0.007972639054059982, -0.006169562693685293, -0.011158797889947891, 0.02925473265349865, 0.015641143545508385, -0.023201031610369682, -0.03139814734458923, -0.01875489018857479, 0.02104313299059868, 0.006709037348628044, 0.003787184599786997, -0.008356425911188126, -0.02221621759235859, 0.031166428700089455, 0.005050786305218935, -0.0067886910401284695, -0.005843705497682095, 0.01036949921399355, 0.024461012333631516, 0.039942849427461624, 0.0030594367999583483, 0.004659757483750582, 0.03719116374850273, 0.03591670095920563, 0.004134765360504389, -0.007856778800487518, -0.02168036438524723, 0.023548612371087074, -0.011462931521236897, -0.05239783227443695, -0.008255048654973507, 0.020854858681559563, -0.026807183399796486, 0.008131946437060833, 0.02840026281774044, -0.009051588363945484, -0.020101767033338547, 0.023809297010302544, 0.011028454639017582, -0.018523169681429863, 0.004489587619900703, -0.033831216394901276, -0.02608305588364601, -0.003975457511842251, 0.0016347168711945415, -0.0007214116048999131, 0.04333176463842392, 0.01671285182237625, 0.007081962656229734, -0.002623150357976556, 0.018074210733175278, 0.035887736827135086, -0.00791470892727375, 0.012317401356995106, -0.024823075160384178, -0.033251915127038956, 0.027111316099762917, 0.010492601431906223, -0.03371535614132881, 0.02344723418354988, 0.003957354463636875, 0.013852550648152828, -0.013874274678528309, -0.0041854544542729855, 0.0024909970816224813, -0.005438194144517183, 0.0019841082394123077, 0.012715671211481094, 0.01214361097663641, 0.01781352609395981, -0.03771253675222397, -0.023244477808475494, -0.020956236869096756, 0.03945044055581093, -0.008298495784401894, 0.013483245857059956, -0.010840182192623615, 0.023316891863942146, 0.014424610882997513, -0.010282604023814201, 0.0028838359285146, -0.01963832601904869, 0.01698802039027214, -0.024823075160384178, -0.0021796224173158407, 0.002156088361516595, 0.01788593828678131, -0.043418657034635544, -0.033831216394901276, -0.01405530609190464, -0.0027571136597543955, -0.011803271248936653, -0.023867227137088776, -0.0015722608659416437, -0.012918426655232906, -0.025648580864071846, 0.02548927254974842, -0.021173475310206413, -0.02312861755490303, -0.005021821241825819, -0.031485043466091156, -0.01752387546002865, -0.02693752571940422, 0.020347969606518745, 0.03365742415189743, -0.015134255401790142, 0.007002308499068022, -0.013867032714188099, -0.010593978688120842, -0.02664787508547306, 0.028863703832030296, -0.01407703012228012, -0.017929386347532272, -0.011339829303324223, -0.012990839779376984, 0.014258061535656452, 0.007197822909802198, 0.01845075748860836, 0.01584389992058277, -0.030529197305440903, 0.006285422947257757, -0.006843000650405884, -0.010717079974710941, -0.009594683535397053, -0.02046382986009121, -0.01698802039027214, -0.018059728667140007, 0.0380890816450119, -0.0026503049302846193, 0.05378815904259682, 0.006042840424925089, -0.021825188770890236, 0.023331373929977417, -0.006506281439214945, 0.0096815787255764, 0.018639029935002327, 0.005235438700765371, 0.015481836162507534, 0.018016280606389046, 0.012592569924890995, 0.01507632527500391, -0.014315991662442684, 0.02338930405676365, 0.024663766846060753, 0.0014862708048895001, 0.04530138894915581, -0.007480232510715723, 0.0032096931245177984, 0.009435375221073627, -0.005601122975349426, -0.008428839035332203, 0.020869342610239983, -0.024388598278164864, 0.027314072474837303, 0.011810512281954288, 0.0027697859331965446, 0.00446786405518651, 0.027690619230270386, 0.018856268376111984, 0.0040695942007005215, 0.015438389033079147, -0.028892669826745987, 0.015337010845541954, 0.017625251784920692, -0.008218841627240181, -0.0019895390141755342, -0.0026865112595260143, 0.011166038922965527, 0.012194299139082432, -0.010550531558692455, 0.03238296136260033, 0.012216023169457912, -0.030818847939372063, 0.004797341767698526, 0.00474665267392993, 0.010347775183618069, -0.008139188401401043, 0.013338420540094376, -0.015568731352686882, 0.0068755862303078175, -0.01581493392586708, 0.00724489102140069, -0.03771253675222397, -0.00695524038746953, 0.030268510803580284, 0.018276967108249664, -0.013258766382932663, 0.0242727380245924, 0.0018266105325892568, 0.005525089334696531, 0.015554249286651611, -0.015959760174155235, 0.0032821057830005884, -0.029920930042862892, 0.018363861367106438, -0.007864019833505154, 0.01671285182237625, 0.014214614406228065, 0.0011260175378993154, -0.008465045131742954, 0.02015969716012478, 0.026807183399796486, 0.017436979338526726, 0.00026023315149359405, 0.01813214085996151, 0.0068755862303078175, 0.01288946159183979, 0.010673632845282555, -0.008074016310274601, -0.007067480124533176, -0.011926372535526752, -0.00607904652133584, 0.007176098879426718, -0.0034468448720872402, -0.018030764535069466, -0.01811765879392624, -0.04037732630968094, 0.03403397276997566, -0.003939250949770212, 0.020594174042344093, 0.031658835709095, 0.012831531465053558, 0.005278886295855045, -0.004619930405169725, -0.04417175054550171, 0.02721269428730011, 0.015163220465183258, -0.0026720287278294563, 0.008971934206783772, -0.01230291835963726, 0.0019931597635149956, -0.012998080812394619, 0.02667684108018875, 0.007306442130357027, 0.014518747106194496, 0.005503365769982338, 0.0016039414331316948, -0.0307029876857996, 0.006929895840585232, 0.0032585717272013426, 0.006299905478954315, -0.005195611622184515, -0.0025036693550646305, -0.006386800669133663, 0.04150696098804474, 0.0013586434070020914, -0.0084795281291008, 0.031166428700089455, 0.003472189186140895, -0.0020999684929847717, 0.012339125387370586, -0.0204927958548069, -0.034700170159339905, -0.00922537874430418, 0.002257466083392501, -0.012063956819474697, 0.0021090200170874596, 0.030587127432227135, 0.012672223150730133, -0.017060432583093643, -0.029356110841035843, 0.035569120198488235, 0.001451874733902514, 0.0004743032332044095, -0.02631477639079094, -0.0031227979343384504, -0.003354518674314022, 0.02309965342283249, 0.01849420554935932, -0.015568731352686882, -0.004352003801614046, -0.023345855996012688, 0.007168857846409082, -0.017350085079669952, 0.021216923370957375, 0.002952628070488572, -0.0010364068439230323, 0.005268024280667305, -0.01186844240874052, 0.021144509315490723, -0.011839477345347404, 0.031195392832159996, 0.01992797665297985, -0.01391048077493906, -0.015438389033079147, 0.011709134094417095, -0.0345553420484066, -0.0040080430917441845, -0.01199154369533062, -0.00909503549337387, 0.02015969716012478, 0.033251915127038956, 0.007143513299524784, 0.014460816979408264, 0.01672733575105667, 0.0005277075688354671, -0.028023716062307358, 0.0016120878281071782, 0.017060432583093643, 0.019739704206585884, 0.04263659939169884, 0.00862435344606638, -0.0040370081551373005, 0.02131829969584942, 0.02543134242296219, -0.01878385618329048, -0.012230506166815758, 0.01846523955464363, 0.028574053198099136, 0.005358539987355471, -0.014735985547304153, -0.01869696006178856, -0.003895803587511182, -0.015742521733045578, 0.012208782136440277, -0.008175394497811794, -0.021202439442276955, -0.012006026692688465, 0.005003717727959156, -0.03359949588775635, -0.009840887039899826, 0.016220446676015854, -0.000837271916680038, 0.01901557669043541, -0.0172776710242033, -0.001495322328992188, -0.04188350960612297, -0.006021116394549608, 0.009087794460356236, -0.0038632177747786045, 0.004261487629264593, -0.013287731446325779, -0.01480839867144823, -0.032904334366321564, 0.03015265055000782, 0.0031897795852273703, 0.0031608145218342543, 0.010919836349785328, -0.014844604767858982, -0.033483635634183884, -0.008218841627240181, 0.019232815131545067, 0.023331373929977417, -0.0011821374064311385, 0.0012636017054319382, -0.016510097309947014, -0.00754540367051959, -0.002293672412633896, -0.01933419145643711, 0.016032172366976738, 0.0006046461057849228, 0.02343275211751461, -0.02695200964808464, 0.004938546568155289, -0.0219410490244627, -0.007697470486164093, 0.02805268205702305, -0.007950915023684502, 0.024489976465702057, 0.010941559448838234, -0.0004706825711764395, 0.009978470392525196, -0.015018395148217678, 0.03797322139143944, 0.010572254657745361, -0.014844604767858982, -0.0011649393709376454, -0.0084795281291008, -0.014562195166945457, -0.017422497272491455, 0.007690229453146458, 0.013418074697256088, 0.0034884819760918617, -0.006010254379361868, 0.005691638682037592, -0.03487395867705345, -0.02631477639079094, 0.02425825595855713, -0.007234029471874237, 0.0009341238765046, -0.022114839404821396, 0.014822880737483501, -0.02573547512292862, 0.025807887315750122, -0.008421598002314568, -0.02107209712266922, -0.044577259570360184, -0.005076130852103233, -0.026459602639079094, 0.008421598002314568, 0.013128423132002354, -0.020072801038622856, 0.03713323548436165, -0.007755400612950325, -0.0007245796150527894, -0.02952990122139454, 0.028878187760710716, -0.007219546940177679, 0.00556129589676857, -0.008501251228153706, -0.007552645169198513, -0.004837168846279383, -0.0034739994443953037, -0.01753835752606392, 0.011332588270306587, -0.008740213699638844, -0.007994363084435463, 0.005007338710129261, -0.007096445187926292, -0.007784365676343441, -0.011405001394450665, -0.032035380601882935, -0.03218020498752594, -0.006386800669133663, 0.012556362897157669, 0.018016280606389046, 0.019203849136829376, -0.0014482541009783745, 0.00024145111092366278, 0.010420188307762146, -0.029718173667788506, -0.029660243541002274, -0.023910675197839737, 0.0015586834633722901, 0.015481836162507534, 0.02398308739066124, 0.025344446301460266, 0.033541563898324966, 0.002947197062894702, 0.020898306742310524, 0.025880301371216774, -0.0009748560260049999, -0.008986416272819042, 0.012194299139082432, 0.003054005792364478, 0.004250625614076853, -0.008465045131742954, -0.0012989029055461287, 0.016336306929588318, 0.012643258087337017, -0.02078244648873806, 0.017958350479602814, 0.01878385618329048, -0.018827304244041443, -0.0398559533059597, -0.02690856158733368, -0.05943634733557701, -0.003269433742389083, 0.02929818071424961, 0.013526692986488342, 0.004174592439085245, -0.02871887944638729, -0.008305737748742104, 0.0202465932816267, 0.012990839779376984, -0.007429543416947126, -0.013526692986488342, 0.024475494399666786, 0.006777829024940729, 0.020941754803061485, -0.0021597088780254126, 0.017147328704595566, -0.024084465578198433, 0.006097149569541216, -0.0339181125164032, 0.01139051839709282, 0.005593881476670504, 0.005470779724419117, 0.044577259570360184, 0.04278142750263214, -0.007179719861596823, -0.0006589555996470153, 0.00017311162082478404, 0.009565718472003937, -0.0286899134516716, -0.010876388289034367, -0.022708624601364136, -0.010782252065837383, -0.024953417479991913, -0.007422302383929491, -0.02751682884991169, 0.012237747199833393, -0.008595388382673264, -0.011144314892590046, 0.029776103794574738, -0.0063505941070616245, -0.01787145622074604, 0.022361043840646744, -0.014917016960680485, 0.0469234324991703, 0.010673632845282555, 0.03238296136260033, 0.024736180901527405, 0.012259471230208874, 0.014917016960680485, 0.004703205078840256, -0.015525284223258495, 0.006372318137437105, 0.004399071913212538, 0.028240954503417015, -0.007798848208039999, -0.02107209712266922, 0.012404296547174454, -0.008899521082639694, -0.02344723418354988, -0.011694652028381824, 0.03403397276997566, 0.025025831535458565, 0.04880616441369057, -0.016799747943878174, 0.006035598926246166, 0.0025978058110922575, -0.0012373521458357573, 0.0006286327843554318, 0.0002148620696971193, -0.0024547907523810863, -0.020912788808345795, -0.0031137464102357626, 0.006926275324076414, 0.04622827097773552, 0.00571698322892189, 0.010717079974710941, 0.010043642483651638, -0.005152164027094841, 0.003455896396189928, 0.030500231310725212, -0.00818263553082943, -0.005000097211450338, 0.013135665096342564, 0.009189172647893429, -0.01810317672789097, 0.02315758354961872, -0.013483245857059956, 0.008102981373667717, 0.010398464277386665, -0.0136208301410079, 0.03884217515587807, -0.01700250245630741, 0.0004046059912070632, 0.016466649249196053, -0.006868345197290182, 0.0011124401353299618, -0.0295733492821455, -0.010427429340779781, 0.013425315730273724, 0.004569241777062416, 0.0017342843348160386, 0.005463538691401482, -0.0029996964149177074, -0.0284437108784914, -0.007114548236131668, 0.025692027062177658, -0.018523169681429863, 0.0027715961914509535, -0.011904648505151272, 0.017625251784920692, -0.03652497008442879, -0.022071393206715584, 0.0005354014574550092, -0.004514932166785002, 0.01110086776316166, 0.02108657918870449, 0.0020800549536943436, -0.026995455846190453, 0.02278103679418564, -0.011462931521236897, 0.016611475497484207, 0.0120132677257061, 0.03241192549467087, -0.04362141340970993, 0.00015263240493368357, -0.0033038295805454254, -0.013526692986488342, 0.005365781486034393, 0.0037908051162958145, -0.04014560207724571, -0.025518236681818962, -0.0004046059912070632, -0.004518552683293819, -0.001393944607116282, 0.003946492448449135, 0.0010698976693674922, 2.7423484425526112e-05, 0.010789493098855019, -0.00416735140606761, -0.0486903041601181, 0.021883118897676468, 0.007266615051776171, -0.01303428690880537, 0.005713362246751785, 0.00120476633310318, 0.011274658143520355, -0.02108657918870449, 0.007632299326360226, -0.0066728307865560055, -0.034091901034116745, -0.00849401019513607, -0.0037980463821440935, 0.005698879715055227, -0.00760333426296711, 0.01520666852593422, -0.013113941065967083, -0.02842922881245613, -0.028936117887496948, 0.009862610138952732, -0.01522115059196949, 0.008689524605870247, 0.005195611622184515, 0.02076796442270279, 0.0016129929572343826, -0.009717784821987152, -0.010000194422900677, -0.0069081722758710384, 0.006039219442754984, 0.033512599766254425, -0.04176764935255051, -0.005430953111499548, 0.006404903717339039, 0.059552207589149475, 0.02256379835307598, -0.032672613859176636, -0.032643646001815796, 0.0003025493351742625, -0.021550020202994347, -0.016756299883127213, -0.005756810307502747, 0.018262485042214394, 0.012129127979278564, 0.022361043840646744, 0.009630889631807804, 0.008284013718366623, -0.000963088998105377, 0.03403397276997566, -0.028892669826745987, 0.025706510990858078, -0.0037328749895095825, -0.007444025948643684, 0.003305640071630478, -0.0016012259293347597, -0.03041333705186844, 0.010253638960421085, 0.009254343807697296, -0.01097776647657156, -0.01070259790867567, 0.03420776128768921, -0.0009920541197061539, -0.009906058199703693, 0.0007969923317432404, -0.023548612371087074, 0.00696610240265727, 0.018001798540353775, 0.008812625892460346, -0.03238296136260033, -0.0037545987870544195, 0.01958039589226246, 0.012107403948903084, 0.02309965342283249, 0.008363667875528336, 0.007205064408481121, -0.01039122324436903, 0.025518236681818962, 0.006839380133897066, -0.023244477808475494, -0.0025181518867611885, 0.027285106480121613, 0.01878385618329048, 0.015047360211610794, 0.020623138174414635, 0.011665686964988708, 0.01903005875647068, -0.010775010101497173, 0.01788593828678131, 0.001505279098637402, 0.011955337598919868, -0.0020655724219977856, 0.013946686871349812, -0.04092765972018242, 0.010673632845282555, -0.04069593921303749, 0.0021072097588330507, -0.014670814387500286, -0.025286516174674034, -0.019435569643974304, -0.012824290432035923, -0.01930522732436657, 0.016915608197450638, -0.015481836162507534, -0.0228244848549366, -0.008175394497811794, 0.012693947181105614, -0.00021746440324932337, 0.0020565208978950977, -0.001454590237699449, -0.002300913678482175, -0.015105290338397026, 0.008291254751384258, -0.004804582800716162, -0.01988452859222889, -0.04058007895946503, 0.016799747943878174, 0.01900109462440014, -0.00034011341631412506, 0.018899716436862946, 0.1970784217119217, 0.010985007509589195, 0.007364372257143259, 0.027951303869485855, -0.0027571136597543955, 0.004362865351140499, 0.0036115837283432484, 0.02719821222126484, -0.00965985469520092, 0.013229801319539547, 0.005803878419101238, 0.017132846638560295, -0.024098947644233704, 0.0029852138832211494, 0.024721696972846985, -0.042260054498910904, -0.04924064129590988, -0.034381553530693054, -0.028878187760710716, -0.013924962840974331, 0.023548612371087074, -0.01480115670710802, -0.015177703462541103, -0.02110106311738491, 0.005112336948513985, -0.0266044270247221, -0.014692537486553192, -0.0216948464512825, 0.006136976648122072, 0.005235438700765371, -0.009015382267534733, 0.0009467961499467492, 0.012281195260584354, 0.01347600482404232, 0.004337521269917488, -0.027400968596339226, 0.004743032157421112, -0.020072801038622856, 0.007201443426311016, 0.017118362709879875, -0.01128189917653799, 0.007422302383929491, 0.010130537673830986, -0.02841474488377571, -0.011962578631937504, -0.008530216291546822, -0.014554954133927822, 0.0039790780283510685, 0.0204927958548069, 0.044084854423999786, -0.02873336151242256, 0.0024964280892163515, 0.029689209535717964, 0.01700250245630741, -0.020347969606518745, 0.0022013462148606777, 0.008233324624598026, 0.01904454082250595, 0.024533424526453018, 0.02782096154987812, -0.022375525906682014, 0.020550725981593132, 0.005963186267763376, 0.029370592907071114, -0.025315482169389725, 0.003392535261809826, -0.017784560099244118, 0.0008811721345409751, 0.02364998869597912, 0.017654217779636383, 0.0015279080253094435, -0.023302407935261726, -0.016799747943878174, -0.02577892318367958, -0.010695356875658035, -0.02399757131934166, 0.03249882161617279, 0.014373921789228916, 0.022114839404821396, 0.027357520535588264, 0.008827108889818192, 0.008428839035332203, -0.015337010845541954, 0.03429465740919113, -0.012541880831122398, -0.0020094525534659624, 0.011086384765803814, -0.01962384395301342, -0.019479017704725266, -0.004826306831091642, 0.007972639054059982, -0.025952713564038277, 0.0037020996678620577, -0.02250586822628975, -0.008363667875528336, -0.015119773335754871, 0.00979019794613123, 0.005916118156164885, -0.0006965196807868779, -0.015003912150859833, -0.02079692855477333, 0.06285423040390015, -0.008008845150470734, 0.0098046800121665, -0.026474084705114365, -0.004960270132869482, 0.007856778800487518, 0.0018700581276789308, 0.010724321939051151, 0.013635312207043171, -0.009565718472003937, -0.03475809842348099, -0.02253483422100544, -0.01694457232952118, 0.006495419889688492, -0.0010680874111130834, 0.005626467056572437, -0.005068889353424311, 0.006596797611564398, -0.005796636920422316, 0.009015382267534733, -0.008146429434418678, -0.011694652028381824, 0.02863198332488537, -0.021767258644104004, 0.006140597630292177, -0.0006191286374814808, -0.012636017054319382, -0.011057419702410698, 0.013628071174025536, 0.027024421840906143, -0.027444414794445038, 0.008675042539834976, 0.02605409175157547, 0.009840887039899826, -0.008827108889818192, 0.020029354840517044, -0.021607952192425728, 0.0007426828378811479, 0.025272034108638763, 0.002257466083392501, 0.017784560099244118, 0.012737395241856575, -0.022100357338786125, -0.0030938328709453344, -0.028878187760710716, 0.00905882939696312, 0.004033387638628483, -0.013092217035591602, -0.010601219721138477, -0.0025489272084087133, 0.01124569308012724, -0.0016501045320183039, 0.002898318460211158, 0.0036025322042405605, -0.0272416602820158, -0.021506574004888535, -0.0021542778704315424, 0.0026991835329681635, 0.0011332588037475944, -0.04153592884540558, -0.017132846638560295, 0.006473695859313011, 0.007378854788839817, -0.043997958302497864, -0.013113941065967083, -0.18444964289665222, 0.017451461404561996, 0.03811804950237274, -0.04648895561695099, 0.02252035215497017, -0.009015382267534733, -0.00075988081516698, 0.002901939209550619, -0.014294267632067204, 0.0090805534273386, 0.023809297010302544, 0.001720706932246685, -0.0321512408554554, -0.017451461404561996, 0.013113941065967083, -0.01958039589226246, -0.0062347338534891605, 0.00935572199523449, 0.017465945333242416, 0.0009549425449222326, 0.020970718935132027, -0.0414779968559742, -0.015901830047369003, 0.010427429340779781, 0.005814740434288979, 0.0059595657512545586, -0.003347277408465743, 0.007031273562461138, 0.00571698322892189, -0.0266044270247221, -0.0028928876854479313, -0.013425315730273724, 0.048719268292188644, 0.007284718099981546, 0.008704007603228092, 0.0017125605372712016, 0.027994751930236816, -0.013961169868707657, -0.007353510241955519, 0.015670109540224075, 0.010021918453276157, 0.03562705218791962, 0.012172576040029526, -0.0010644667781889439, -0.017408015206456184, 0.007415060885250568, 0.035887736827135086, -0.02638719044625759, 0.00019291197531856596, -0.027458898723125458, 0.026503050699830055, -0.008320219814777374, 0.007740918081253767, -0.011774306185543537, 0.010470877401530743, 0.006459213327616453, 0.011325347237288952, 0.030789881944656372, 0.006792311556637287, -0.027009939774870872, -0.004341141786426306, -0.01963832601904869, -0.010420188307762146, 0.019797634333372116, 0.002847629599273205, -0.03099263831973076, -0.02631477639079094, 0.0263582244515419, -0.02514169178903103, -0.0008137378026731312, -0.011607756838202477, 0.024446528404951096, -0.017610769718885422, -0.005467159207910299, 0.023027241230010986, 0.018349379301071167, -0.02986299991607666, 0.002988834399729967, 0.050804752856492996, -0.023273443803191185, -0.03374432027339935, 0.037278059870004654, -0.02488100528717041, 0.007009549997746944, -0.006209389306604862, 0.013577382080256939, -0.012339125387370586, 0.01053604856133461, -0.007208684924989939, -0.008986416272819042, 0.003714771708473563, -0.026749253273010254, 0.005293368827551603, -0.014830121770501137, -0.02517065592110157, 0.03652497008442879, -0.0002260634209960699, 0.005438194144517183, 0.021158993244171143, -0.0020782446954399347, 0.007288338616490364, 0.022954827174544334, -0.02312861755490303, -0.00033649278338998556, 0.025692027062177658, 0.0006431153160519898, -0.026532014831900597, 0.0009205465321429074, 0.02721269428730011, -0.0017505771247670054, -0.0006883732858113945, 0.01637975312769413, 0.014402886852622032, 0.01084742322564125, -0.020376935601234436, 0.028269920498132706, -0.02046382986009121, -0.009471582248806953, 0.015119773335754871, 0.00818263553082943, 0.05682948976755142, 0.0031227979343384504, 0.00446786405518651, -0.00016089198470581323, -0.020376935601234436, -0.03142711520195007, -0.11464379727840424, -0.01493149995803833, -0.010869147256016731, -0.0005467159207910299, -0.015177703462541103, -0.036119457334280014, -0.032614681869745255, 0.012100162915885448, -0.038784243166446686, 0.010014677420258522, -0.0035898599307984114, -0.04249177500605583, -0.001746956491842866, 0.00022810001973994076, -0.0022375525441020727, -0.00266659795306623, -0.0069226548075675964, -0.02134726569056511, -0.0009277877979911864, 0.014301509596407413, -0.014989430084824562, -0.03374432027339935, 0.012085680849850178, 0.011079143732786179, -0.012006026692688465, -0.006868345197290182, -0.03304915875196457, 0.029689209535717964, 0.017741112038493156, 0.0032277964055538177, 0.017958350479602814, -0.01958039589226246, -0.012281195260584354, 0.009674337692558765, -0.0033726217225193977, -0.0193631574511528, -0.014685296453535557, -0.0153514938428998, 0.00526078324764967, -0.014149442315101624, -0.008465045131742954, -0.005583019461482763, 0.019261779263615608, -0.014707020483911037, -0.04197040572762489, -0.0067452434450387955, -0.025402376428246498, 0.034381553530693054, 0.03533739969134331, -0.01904454082250595, -0.038494594395160675, -0.021564504131674767, 0.0006698174984194338, -0.017958350479602814, 0.026271330192685127, 0.016292858868837357, 0.031774695962667465, -0.0009965798817574978, -0.008906763046979904, 0.008175394497811794, -0.011730858124792576, 0.0017433358589187264, -0.01036949921399355, 0.033222950994968414, -0.0021017787512391806, -0.014011858031153679, -0.01987004652619362, 0.023780332878232002, -0.002098158234730363, 0.003269433742389083, -0.002869353396818042, -0.01157879177480936, -0.009232619777321815, 0.005112336948513985, -0.020145215094089508, -0.013823585584759712, -0.019855564460158348, -0.033222950994968414, 0.022172769531607628, -0.017031468451023102, -0.030558161437511444, 0.010318810120224953, -0.011448448523879051, -0.03493189066648483, -0.026112021878361702, 0.014960465021431446, 0.0042868321761488914, 0.0069371373392641544, -0.007480232510715723, -0.05541020259261131, 0.009667095728218555, 0.0026412534061819315, 0.021839672699570656, -0.0462862029671669, 0.0016935521271079779, 0.009601924568414688, -0.015394940972328186, -0.006604038644582033, 0.005242679733783007, 0.013092217035591602, -0.03768357262015343, -0.011470172554254532, -0.07461404800415039, 0.040290430188179016, 0.013439797796308994, 0.007009549997746944, -0.004815444815903902, -0.045272424817085266, -0.006785070523619652, -0.02602512575685978, -0.005876291077584028, 0.026865113526582718, -0.040522150695323944, -0.010210191830992699, 0.0019424707861617208, -0.0026629772037267685, -0.017972832545638084, -0.007791607175022364, 0.02716924622654915, -0.01665492169559002, 0.02983403392136097, 0.003530119312927127, 0.011622238904237747, 0.030789881944656372, 0.017118362709879875, 0.025243069976568222, -0.028603019192814827, -0.013063251972198486, 0.0022176390048116446, 0.012216023169457912, 0.0020565208978950977, -9.996347944252193e-05, 0.031195392832159996, -0.030210580676794052, -0.027690619230270386, 0.02428722195327282, 0.01636527106165886, -0.006194906774908304, 0.02367895469069481, 0.015554249286651611, 0.014815639704465866, 0.025996161624789238, -0.008320219814777374, -0.03510567918419838, 0.0037328749895095825, -0.043795205652713776, -0.017422497272491455, 0.0005272550042718649, -0.02574995718896389, 0.027690619230270386, 0.033802252262830734, -0.004927684552967548, -0.006303525995463133, -0.0012020509457215667, -0.041101451963186264, -0.06407076120376587, -0.028805773705244064, -0.020710034295916557, 0.02693752571940422, -0.00011574718519113958, -0.005003717727959156, 0.03722013160586357, 0.010333293117582798, -0.0002584228350315243, 0.019725220277905464, -0.005648191086947918, -0.0219410490244627, -0.013215318322181702, -0.020710034295916557, -0.007567127700895071, 0.03638014197349548, -0.009261584840714931, 0.0015985104255378246, -0.019507983699440956, -0.008863314986228943, 0.0076757469214499, -0.0033671907149255276, -0.027067869901657104, -0.003533740062266588, 0.026691323146224022, -0.022694142535328865, 0.021303817629814148, 0.0039971815422177315, -0.014649090357124805, -0.005992151331156492, 0.03452637791633606, 0.023896193131804466, 0.01693009026348591, -0.009261584840714931, -0.005948703736066818, 0.015959760174155235, -0.024707214906811714, -0.01404082402586937, 0.022143805399537086, 0.0005091518396511674, -0.0021253128070384264, -6.805662997066975e-05, -0.004833547864109278, -0.002364274812862277, 0.0017369997221976519, 0.02454790659248829, 0.02722717635333538, -0.019797634333372116, 0.004337521269917488, 0.013077734969556332, -0.0015967001672834158, -0.018943164497613907, 0.005525089334696531, -0.017451461404561996, -0.028588535264134407, -7.246927998494357e-05, 0.012121886946260929, -0.003794425865635276, 0.01083294115960598, 0.012882220558822155, 0.03099263831973076, -0.017147328704595566, 0.022752072662115097, 0.0035319298040121794, -0.021810706704854965, -0.03837873414158821, -0.0031734867952764034, 0.004120282828807831, -0.0005811119335703552, 0.025402376428246498, 0.013266007415950298, 0.040203534066677094, 0.03426569327712059, -0.011651203967630863, -0.029949894174933434, 0.020058318972587585, 0.0025996160693466663, -0.003644169308245182, -0.016234928742051125, -0.012346366420388222, -0.018276967108249664, -0.015699073672294617, 0.0096815787255764, -0.03310709074139595, 0.02052175998687744, 0.0037256337236613035, 0.0774526298046112, 0.02137622982263565, -0.01536597590893507, 0.00578939588740468, -0.02609753981232643, 0.016539061442017555, 0.010470877401530743, 0.0010228294413536787, -0.01575700379908085, -0.022346561774611473, -0.02053624391555786, -0.00922537874430418, -0.033773284405469894, -0.00774815957993269, -0.01286773756146431, 0.016539061442017555, 0.013200836256146431, -0.008421598002314568, 0.012831531465053558, 0.017408015206456184, 0.006401283200830221, 0.029660243541002274, -0.009073312394320965, -0.0005055312067270279, -0.019479017704725266, -0.006531625986099243, 0.006039219442754984, 0.009362963028252125, -0.007013170514255762, -0.03510567918419838, 0.029689209535717964, -0.002789699472486973, -0.03687255084514618, -0.01142672449350357, -0.022158287465572357, 0.021014166995882988, -0.024388598278164864, -0.005724224261939526, -0.007154375314712524, 0.02131829969584942, 0.00891400407999754, -0.0037256337236613035, -0.026778219267725945, -0.029689209535717964, 0.018074210733175278, 0.0019641947001218796, -0.0006399473058991134, -0.019131436944007874, -0.02783544361591339]}}}})" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# Execute a find_one operation on the SuperDuperDB collection\n", "db.execute(collection.find_one())" @@ -2475,460 +368,18 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "id": "92948823-0d18-4e1b-b103-f226d6b09e52", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u001b[32m 2023-Dec-02 15:44:38.63\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mDuncans-MacBook-Pro.local\u001b[0m| \u001b[36m88626ad4-e654-4d13-b738-655c215c9549\u001b[0m| \u001b[36msuperduperdb.base.datalayer\u001b[0m:\u001b[36m124 \u001b[0m | \u001b[1mloading of vectors of vector-index: 'my-index'\u001b[0m\n", - "\u001b[32m 2023-Dec-02 15:44:38.63\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mDuncans-MacBook-Pro.local\u001b[0m| \u001b[36m88626ad4-e654-4d13-b738-655c215c9549\u001b[0m| \u001b[36msuperduperdb.base.datalayer\u001b[0m:\u001b[36m164 \u001b[0m | \u001b[1m\u001b[0m\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Loading vectors into vector-table...: 983it [00:01, 749.49it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u001b[32m 2023-Dec-02 15:44:39.96\u001b[0m| \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mDuncans-MacBook-Pro.local\u001b[0m| \u001b[36m88626ad4-e654-4d13-b738-655c215c9549\u001b[0m| \u001b[36msuperduperdb.vector_search.in_memory\u001b[0m:\u001b[36m67 \u001b[0m | \u001b[34m\u001b[1m[0.62572246 0.66612508 0.69010594 0.6641047 0.66425427 0.7387817\n", - " 0.6881855 0.68607405 0.69351733 0.71976792 0.71496523 0.66004596\n", - " 0.66627489 0.65562489 0.71871274 0.70058766 0.70878886 0.66476047\n", - " 0.70292219 0.66922394 0.6674502 0.70775891 0.71356059 0.65153291\n", - " 0.67515455 0.69244336 0.75275027 0.61761995 0.68941064 0.67163621\n", - " 0.66896656 0.74804012 0.75044728 0.72637602 0.66834304 0.68875735\n", - " 0.67349785 0.65792681 0.65807155 0.65934245 0.74187581 0.69571654\n", - " 0.63766755 0.67613315 0.67667263 0.68792644 0.71179008 0.6925923\n", - " 0.65451716 0.70675457 0.67543518 0.68082221 0.62976182 0.64021369\n", - " 0.66461855 0.76408112 0.7258661 0.67064748 0.70942715 0.70577585\n", - " 0.71165578 0.70232087 0.66330334 0.70614552 0.68984336 0.65287489\n", - " 0.62330009 0.64761084 0.69426671 0.71117962 0.64113745 0.65720168\n", - " 0.70425184 0.69259859 0.69803277 0.63437735 0.68434545 0.75890446\n", - " 0.68144215 0.6790502 0.66547327 0.6703478 0.69788647 0.69240949\n", - " 0.69811098 0.67258376 0.65640757 0.70016537 0.6326295 0.67490967\n", - " 0.69054154 0.68913121 0.7463232 0.66180606 0.73486487 0.64426172\n", - " 0.68533253 0.64172243 0.6775094 0.7182731 0.73362563 0.62052512\n", - " 0.75174814 0.68690608 0.62810584 0.66798085 0.70047913 0.74326429\n", - " 0.67650063 0.65545448 0.69701779 0.70631725 0.65668188 0.65828495\n", - " 0.70723808 0.68630352 0.65670853 0.76419194 0.67367568 0.6837155\n", - " 0.67568946 0.6757544 0.64296095 0.724148 0.72480762 0.70454756\n", - " 0.74273848 0.70173168 0.65516886 0.69996938 0.68447469 0.72667842\n", - " 0.70457782 0.70679858 0.66080889 0.66211467 0.73087654 0.71532872\n", - " 0.69440778 0.66344632 0.66438992 0.67101899 0.65054851 0.66238932\n", - " 0.71066536 0.73475802 0.70008229 0.69746491 0.67162837 0.67325249\n", - " 0.73688821 0.68235573 0.67193247 0.65342583 0.62867282 0.65365279\n", - " 0.66728368 0.66014675 0.64198057 0.67809099 0.73787676 0.70080593\n", - " 0.70684821 0.666458 0.66535788 0.75439719 0.69964478 0.70889911\n", - " 0.74907977 0.68546666 0.69182844 0.70063853 0.71894176 0.72617437\n", - " 0.68856904 0.68702616 0.65069422 0.64210678 0.64700421 0.72882151\n", - " 0.66214332 0.65876388 0.65312832 0.67812758 0.7016204 0.6518603\n", - " 0.6840357 0.68071391 0.7061811 0.69466388 0.66389437 0.66892466\n", - " 0.64925317 0.67840119 0.66407401 0.66117613 0.70790259 0.67025687\n", - " 0.67335071 0.67990708 0.674767 0.67853907 0.69655752 0.6846491\n", - " 0.72411898 0.68083486 0.74570077 0.6699382 0.6904427 0.688291\n", - " 0.64239732 0.6785483 0.67430166 0.71663254 0.68242627 0.73326966\n", - " 0.7524398 0.65191352 0.72169305 0.68727077 0.70497971 0.67134837\n", - " 0.68891832 0.70556634 0.69668295 0.66578502 0.66118878 0.68978221\n", - " 0.72712458 0.68984047 0.68336118 0.71401771 0.73011286 0.68397506\n", - " 0.66778313 0.75696322 0.6515605 0.67820763 0.62324894 0.76297316\n", - " 0.69651441 0.68543029 0.70645384 0.70642637 0.66983557 0.68177347\n", - " 0.66600773 0.6651992 0.69732823 0.71393884 0.69930558 0.66286784\n", - " 0.67894832 0.67472134 0.67708869 0.69740162 0.75943274 0.65570056\n", - " 0.66840024 0.70299346 0.64415757 0.68932851 0.61794756 0.70532746\n", - " 0.68742905 0.66286741 0.69202498 0.73844742 0.64767351 0.66064703\n", - " 0.71089008 0.68513613 0.6837424 0.72433317 0.63688901 0.67048521\n", - " 0.74283859 0.72365131 0.65258552 0.66408135 0.6708781 0.66497191\n", - " 0.66292941 0.73592695 0.64955937 0.70068951 0.69815506 0.67600512\n", - " 0.68461703 0.70561577 0.70342559 0.71794584 0.68091586 0.65629835\n", - " 0.66347978 0.65173225 0.69993709 0.648105 0.71781421 0.66164594\n", - " 0.68618266 0.69192939 0.63042621 0.63734103 0.68679532 0.72772199\n", - " 0.71308567 0.66233807 0.63072642 0.72401533 0.68143639 0.68936285\n", - " 0.70190592 0.67897877 0.7109376 0.6950663 0.64515724 0.73946478\n", - " 0.69080486 0.7022327 0.67739744 0.64452817 0.64667237 0.66814577\n", - " 0.6461144 0.61719549 0.66428256 0.75036447 0.70934191 0.66918275\n", - " 0.66293106 0.64937713 0.66209735 0.69016526 0.71016972 0.64777743\n", - " 0.72521977 0.66757571 0.65704704 0.69714299 0.63759272 0.70785224\n", - " 0.66131579 0.69515285 0.69134578 0.68671774 0.69716027 0.63501135\n", - " 0.67705835 0.67720952 0.66689428 0.66903534 0.70073471 0.72301627\n", - " 0.64276337 0.73215524 0.66255018 0.68051743 0.67599605 0.72066276\n", - " 0.67132226 0.70484939 0.69985938 0.76992755 0.68093623 0.6990139\n", - " 0.66821022 0.70439571 0.77639947 0.69861191 0.71305581 0.70245261\n", - " 0.75695958 0.63643371 0.67078974 0.65404158 0.67480968 0.66491939\n", - " 0.74361702 0.74203309 0.70136713 0.69065626 0.64097369 0.65078198\n", - " 0.64594734 0.65286 0.7257487 0.683894 0.67929971 0.65554201\n", - " 0.68392804 0.73992382 0.74026204 0.66125837 0.71024832 0.64328947\n", - " 0.65089179 0.65064196 0.66702808 0.66497153 0.72450078 0.67388664\n", - " 0.6737244 0.70080338 0.70775917 0.67235435 0.70532386 0.66202167\n", - " 0.72556659 0.66741082 0.70402261 0.73666124 0.71019041 0.71728362\n", - " 0.68316841 0.66202395 0.72574088 0.68466104 0.69355503 0.68568494\n", - " 0.70740581 0.65927968 0.70566431 0.6732534 0.76712553 0.64930367\n", - " 0.64067631 0.68246391 0.62550988 0.69495216 0.68476763 0.6855675\n", - " 0.71415631 0.66703465 0.73468247 0.69249919 0.73499557 0.77073739\n", - " 0.73263763 0.64512245 0.74605921 0.6995949 0.6657236 0.79307637\n", - " 0.67030505 0.71806434 0.70562904 0.8172489 0.70488548 0.66584437\n", - " 0.68215482 0.67901112 0.71831156 0.74289583 0.66305767 0.64274471\n", - " 0.70259156 0.75363496 0.66321073 0.70522171 0.72338819 0.66581427\n", - " 0.67839586 0.70031752 0.73215526 0.65403911 0.66237238 0.68009931\n", - " 0.64689513 0.62612951 0.65339202 0.70264136 0.67262697 0.6638463\n", - " 0.71415587 0.68399402 0.68247428 0.65705757 0.67263776 0.69191307\n", - " 0.68702265 0.68079757 0.69388555 0.73938338 0.70896883 0.665672\n", - " 0.71657944 0.79654411 0.68752297 0.70370524 0.68725008 0.64490928\n", - " 0.71764233 0.66735883 0.67123291 0.67711406 0.68129917 0.6538176\n", - " 0.66460447 0.6427671 0.67726731 0.67587081 0.64452947 0.65980701\n", - " 0.68927819 0.69437727 0.64178276 0.72604243 0.74301202 0.65026607\n", - " 0.69960031 0.72714477 0.72306433 0.69372061 0.67223956 0.68265285\n", - " 0.65753971 0.72059248 0.7164672 0.69538079 0.72528026 0.741183\n", - " 0.67541887 0.67821577 0.667017 0.76882611 0.65789191 0.69031282\n", - " 0.68961664 0.67110379 0.65030372 0.76985169 0.62751003 0.6863302\n", - " 0.69467706 0.65174365 0.68504118 0.68124849 0.74376338 0.69560974\n", - " 0.69450114 0.64973411 0.71147088 0.75656902 0.64655202 0.61555991\n", - " 0.80440692 0.69196222 0.69184247 0.69572914 0.64592618 0.68692619\n", - " 0.67186372 0.70978758 0.6667474 0.68144513 0.71816576 0.75655329\n", - " 0.73319393 0.65172712 0.68561696 0.72223345 0.72894783 0.68971945\n", - " 0.64888164 0.69556404 0.65352368 0.67028772 0.63745462 0.70994001\n", - " 0.66662694 0.66033992 0.71418499 0.67798979 0.65090111 0.72289184\n", - " 0.70861019 0.64684766 0.65268996 0.67768018 0.66982729 0.64375406\n", - " 0.7381823 0.66512134 0.67207963 0.65698109 0.66987004 0.74507465\n", - " 0.70829083 0.73115669 0.69147724 0.73567408 0.6949085 0.70507804\n", - " 0.69073783 0.68703216 0.68817255 0.68378486 0.74462949 0.64422826\n", - " 0.69453171 0.70119088 0.68096242 0.70815216 0.69515268 0.69449748\n", - " 0.69868559 0.65613695 0.63710851 0.69650631 0.65150221 0.65258383\n", - " 0.69866458 0.77187294 0.67733868 0.71698997 0.70279669 0.6458377\n", - " 0.65316096 0.68975902 0.7144736 0.74460312 0.66998771 0.65953955\n", - " 0.72839424 0.64893391 0.6710787 0.65644755 0.67869013 0.64523525\n", - " 0.65533438 0.66768918 0.65839311 0.64552119 0.69964152 0.70993173\n", - " 0.73190973 0.73411508 0.69560393 0.64908395 0.70372554 0.7104947\n", - " 0.68266755 0.78139777 0.6865067 0.72078126 0.66013383 0.73025025\n", - " 0.65147458 0.71029056 0.67260928 0.69752255 0.6697361 0.65305192\n", - " 0.70716732 0.68511884 0.6979618 0.70167638 0.6559776 0.65738547\n", - " 0.69835536 0.66801523 0.68981576 0.64993054 0.66164947 0.65291698\n", - " 0.78474894 0.69394128 0.6624797 0.68060226 0.70705804 0.65270378\n", - " 0.65232701 0.68503596 0.65204055 0.69850143 0.69247329 0.70400278\n", - " 0.65464012 0.73349871 0.66249428 0.70701401 0.65066885 0.72112887\n", - " 0.68916005 0.66426282 0.66343046 0.65203917 0.69562685 0.63711397\n", - " 0.65715283 0.69227025 0.69971993 0.72884238 0.74495437 0.68204199\n", - " 0.63671152 0.70944373 0.72361048 0.637715 0.71792657 0.64584756\n", - " 0.67340533 0.6620145 0.67588175 0.64380468 0.70427294 0.69438692\n", - " 0.69403342 0.73059165 0.66451502 0.65855364 0.68379844 0.70184217\n", - " 0.67957664 0.65838256 0.77358674 0.66707596 0.66224698 0.67241306\n", - " 0.64960307 0.64040768 0.71527545 0.63227699 0.72972971 0.6465436\n", - " 0.6481832 0.7249453 0.71696945 0.67977059 0.6788216 0.69191673\n", - " 0.73441852 0.70369808 0.66908112 0.77269828 0.65988872 0.6414618\n", - " 0.67897596 0.66360572 0.67546138 0.71676325 0.72677913 0.7356211\n", - " 0.67285671 0.66786335 0.65839913 0.6568189 0.66473534 0.65331387\n", - " 0.69135237 0.66769133 0.69243242 0.656889 0.72185694 0.62091583\n", - " 0.63545114 0.68723264 0.71597187 0.64603061 0.78079907 0.74979968\n", - " 0.65226625 0.67397049 0.71954466 0.64653953 0.72777438 0.70346286\n", - " 0.704479 0.65429256 0.664642 0.75105728 0.68299983 0.6631839\n", - " 0.65278594 0.72548934 0.70772217 0.68511671 0.68027601 0.66429005\n", - " 0.61815129 0.62600092 0.65694255 0.64207045 0.69562056 0.70715871\n", - " 0.73718687 0.67031506 0.67077077 0.68254651 0.66184062 0.73236914\n", - " 0.69633011 0.64642152 0.72985809 0.70971769 0.69793378 0.6715261\n", - " 0.64654756 0.6589372 0.65506217 0.69736535 0.64184235 0.64000941\n", - " 0.6710429 0.69637313 0.66889072 0.67819063 0.69747557 0.68574889\n", - " 0.64624877 0.64590315 0.71742181 0.69330927 0.72135492 0.67735577\n", - " 0.7087298 0.66618865 0.6592837 0.64473411 0.69343129 0.70233301\n", - " 0.69450639 0.65272485 0.68402375 0.68458883 0.64213558 0.67710751\n", - " 0.63728558 0.68093957 0.68575514 0.65937282 0.75851719 0.64968554\n", - " 0.66597476 0.70340697 0.6905193 0.69112923 0.69697268 0.6681604\n", - " 0.68294159 0.68492749 0.64949319 0.6504996 0.72518332 0.72950762\n", - " 0.69070742 0.70498911 0.65789011 0.6565266 0.69132888 0.63070973\n", - " 0.68488001 0.65776964 0.67348489 0.68368273 0.72021915 0.62877585\n", - " 0.64687486 0.65681776 0.64417549 0.66711086 0.68097919 0.69086348\n", - " 0.64373215 0.67972628 0.6692761 0.7084466 0.68606406 0.69413985\n", - " 0.6759207 0.68824497 0.65584151 0.66244591 0.67865425 0.68092672\n", - " 0.63941477 0.63905969 0.69064669 0.63079667 0.66768906 0.68012621\n", - " 0.66791466 0.70499627 0.66312639 0.69973572 0.68246836 0.67317524\n", - " 0.67170536 0.7092341 0.72134728 0.72894986 0.67180314 0.65273761\n", - " 0.70545277 0.67150341 0.6730667 0.67095319 0.68515915 0.66603001\n", - " 0.69491658 0.68274484 0.70394751 0.71344861 0.71696394 0.7248458\n", - " 0.72746865 0.72822967 0.74562195 0.75013904 0.75191389 0.74493898\n", - " 0.72158964 0.70984805 0.71146037 0.68121444 0.66530319 0.66158228\n", - " 0.66920861 0.67701102 0.66718749 0.67055146 0.65511662 0.66055939\n", - " 0.65284616 0.65151032 0.65650926 0.65382968 0.64762833 0.63370911\n", - " 0.62510389 0.6548499 0.66103844 0.7126882 0.73738314 0.74344834\n", - " 0.7288182 0.75044797 0.7517916 0.77354298 0.75984068 0.77665645\n", - " 0.77329896 0.77463911 0.79089675 0.77857685 0.78882675 0.75917028\n", - " 0.77762852 0.77965138 0.78688391 0.78340419 0.77608417 0.76058581\n", - " 0.75117185 0.76356589 0.77525981 0.75873409 0.71281684 0.72668484\n", - " 0.72805032 0.71625659 0.70190359 0.7044763 0.69118161 0.73736092\n", - " 0.72322689 0.73852448 0.73969658 0.74403389 0.73967889 0.73753075\n", - " 0.74560766 0.69778185 0.71473284 0.69957765 0.69697148 0.7111861\n", - " 0.68665508 0.7119279 0.71142802 0.71764529 0.72665224]\u001b[0m\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\n" - ] - }, - { - "data": { - "text/markdown": [ - "---" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "The operand of this function call is always an instance of a descendant of `Component`, but may also\n", - "contain itself many other `Component` descendant instances.\n", - "\n", - "For instance, creating a `VectorIndex` involves also \n", - "creating a `Listener` and a `Model` inline.\n", - "\n", - "```python\n", - "db.add(\n", - " VectorIndex(\n", - " 'my-index'\n", - " indexing_listener=Listener(\n", - " model=model,\n", - " key='txt',\n", - " select=my_collection.find(),\n", - " ),\n", - " )\n", - ")\n", - "```\n", - "\n", - "Read more about the `VectorIndex` concept [here](25_vector_search.mdx).\n", - "\n", - "---\n", - "sidebar_position: 7\n", - "---\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "---" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "For instance, creating a `VectorIndex` involves also \n", - "creating a `Listener` and a `Model` inline.\n", - "\n", - "```python\n", - "db.add(\n", - " VectorIndex(\n", - " 'my-index'\n", - " indexing_listener=Listener(\n", - " model=model,\n", - " key='txt',\n", - " select=my_collection.find(),\n", - " ),\n", - " )\n", - ")\n", - "```\n", - "\n", - "Read more about the `VectorIndex` concept [here](25_vector_search.mdx).\n", - "\n", - "---\n", - "sidebar_position: 7\n", - "---\n", - "\n", - "# Vector-search\n", - "\n", - "SuperDuperDB allows users to implement vector-search in their database by either " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "---" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - " )\n", - ")\n", - "```\n", - "\n", - "Read more about the `VectorIndex` concept [here](25_vector_search.mdx).\n", - "\n", - "---\n", - "sidebar_position: 7\n", - "---\n", - "\n", - "# Vector-search\n", - "\n", - "SuperDuperDB allows users to implement vector-search in their database by either \n", - "using in-database functionality, or via a sidecar implementation with `lance` and `FastAPI`.\n", - "\n", - "## Philosophy\n", - "\n", - "In `superduperdb`, from a user point-of-view vector-search isn't a completely different beast than other ways of \n", - "using the system:\n", - "\n", - "- The vector-preparation is exactly the same as preparing outputs with any model, \n", - " with the special difference that the outputs are vectors, arrays or tensors.\n", - "- Vector-searches are just another type of database query which happen to use \n", - " the stored vectors.\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "---" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "\n", - "Here is an example in which vectors are prepared using a \n", - "convolutional neural network over images, \n", - "and these vectors are used downstream in ***both***\n", - "vector-search and in a transfer-learning task.\n", - "\n", - "1. The `Listener` instance, wraps the CNN `'my-cnn-vectorizer'`,\n", - "which contains the `torch` layer and pre-processing/ post-processing.\n", - "\n", - "2. The `Stack` reuses this `Listener` twice, once in the `VectorIndex`,\n", - "which may be used to find images, using images,\n", - "and once with the support-vector-machine `SVC()`, which ingests \n", - "the vectors calculated by the `Listener`, and, is fitted\n", - "based on those vectors and the label set.\n", - "\n", - "```python\n", - "from sklearn.svm import SVC\n", - "from my_models.vision import MyTorchModule, prepare_image\n", - "\n", - "from superduperdb.ext.numpy import array\n", - "from superduperdb.ext.sklearn import Estimator\n", - "from superduperdb.ext.torch import TorchModel\n", - "from superduperdb import Stack, VectorIndex, Listener\n", - "from superduperdb.backends.mongodb import Collection\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "---" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "```python\n", - "from superduperdb import vector\n", - "\n", - "# m is a model which outputs vectors.\n", - "# this is signified with the `vector`, an `Encoder`\n", - "m = Model(\n", - " ...,\n", - " encoder=vector(shape=(256,))\n", - ")\n", - "\n", - "m.predict(\n", - " X='txt',\n", - " select=collection.find(),\n", - " create_vector_index=True,\n", - ")\n", - "```\n", - "\n", - "## Declarative API setup\n", - "\n", - "With the declarative API, it's possible to create two models \n", - "which are compatible with the vectors for performing searches:\n", - "\n", - "```python\n", - "from superduperdb import Listener, VectorIndex, vector\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/markdown": [ - "---" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "from superduperdb.backends.mongodb import Collection\n", "from superduperdb import Document as D\n", "from IPython.display import *\n", "\n", "# Define the query for the search\n", - "query = 'Code snippet how to create a `VectorIndex` with a torchvision model'\n", + "# query = 'Code snippet how to create a `VectorIndex` with a torchvision model'\n", + "query = 'can you explain vector-indexes with `superduperdb`?'\n", "\n", "# Execute a search using SuperDuperDB to find documents containing the specified query\n", "result = db.execute(\n", @@ -2963,18 +414,10 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "id": "abfa4df6-73ac-4d46-8047-011648e24958", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "['text-embedding-ada-002', 'gpt-3.5-turbo']\n" - ] - } - ], + "outputs": [], "source": [ "# Import the OpenAIChatCompletion class from the superduperdb.ext.openai module\n", "from superduperdb.ext.openai import OpenAIChatCompletion\n", @@ -3010,215 +453,18 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "id": "fc4a0f6c-9e24-47aa-bc73-7cc4507e94ff", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u001b[32m 2023-Dec-02 15:44:47.12\u001b[0m| \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mDuncans-MacBook-Pro.local\u001b[0m| \u001b[36m88626ad4-e654-4d13-b738-655c215c9549\u001b[0m| \u001b[36msuperduperdb.vector_search.in_memory\u001b[0m:\u001b[36m67 \u001b[0m | \u001b[34m\u001b[1m[0.62588279 0.66538487 0.66791833 0.67952515 0.66856846 0.7105439\n", - " 0.65530838 0.65473032 0.69521107 0.71095187 0.69589568 0.65782077\n", - " 0.66872946 0.64610703 0.70665607 0.69222708 0.66025409 0.64337595\n", - " 0.71217354 0.68438061 0.65999557 0.65480668 0.71802413 0.65743974\n", - " 0.66961419 0.67686306 0.74147275 0.64727947 0.68622198 0.67653465\n", - " 0.6680289 0.70963299 0.74298494 0.69863755 0.68006982 0.66210578\n", - " 0.68006839 0.64642206 0.63627811 0.64211392 0.74333747 0.64829737\n", - " 0.64853787 0.7060368 0.67129996 0.66430578 0.74039424 0.66488927\n", - " 0.65543574 0.67909663 0.6728239 0.67453507 0.63050466 0.65143465\n", - " 0.68338193 0.7671736 0.75633112 0.6665697 0.66491107 0.6553076\n", - " 0.7163832 0.67683694 0.66926293 0.69494504 0.65740634 0.66353868\n", - " 0.62525758 0.62816392 0.68654182 0.71981915 0.65636266 0.67855316\n", - " 0.69251305 0.69435139 0.68147675 0.62593012 0.65484101 0.73322254\n", - " 0.67181128 0.67514651 0.66211955 0.66569252 0.6673013 0.71621951\n", - " 0.69376565 0.68668085 0.67311913 0.65505228 0.62726583 0.64852751\n", - " 0.66722322 0.68211818 0.75729577 0.68675703 0.71746077 0.64709758\n", - " 0.68522585 0.652059 0.66499992 0.67426087 0.72137878 0.64958222\n", - " 0.7403324 0.65766184 0.65956121 0.67595118 0.6546245 0.74028875\n", - " 0.6797113 0.66049414 0.70771104 0.6964366 0.65059494 0.65887804\n", - " 0.71631216 0.65794659 0.66626348 0.7591173 0.6653483 0.67472326\n", - " 0.67527296 0.67083341 0.64750579 0.68190933 0.70668935 0.69469889\n", - " 0.70393389 0.68978596 0.63658249 0.6725557 0.66530166 0.75472396\n", - " 0.69989666 0.70393131 0.63662209 0.66677931 0.70191836 0.66366655\n", - " 0.67924885 0.65650141 0.66782902 0.68648563 0.65365905 0.65600781\n", - " 0.71766616 0.73899535 0.68761533 0.68210558 0.65021577 0.68684136\n", - " 0.73169765 0.67633641 0.66978945 0.65321356 0.65776512 0.64457241\n", - " 0.67052221 0.65363755 0.62741707 0.67003479 0.71757207 0.69748684\n", - " 0.71908061 0.67456299 0.66965416 0.75998461 0.70184556 0.70185266\n", - " 0.74728573 0.6826803 0.65984142 0.67075478 0.69568159 0.72893123\n", - " 0.6786776 0.68557303 0.64383252 0.64823067 0.64104492 0.73378706\n", - " 0.66366067 0.65303688 0.67986991 0.68756157 0.65570618 0.65572341\n", - " 0.64610917 0.70470141 0.69328915 0.6571247 0.65805209 0.66345582\n", - " 0.6396271 0.67203465 0.67165953 0.65567381 0.7153117 0.65763497\n", - " 0.67466644 0.65957956 0.66642925 0.66375111 0.6959313 0.68646219\n", - " 0.70091561 0.69336415 0.75453396 0.6659222 0.70224142 0.65217336\n", - " 0.64339771 0.64845201 0.68285541 0.68698896 0.69337653 0.75381718\n", - " 0.74472508 0.64481974 0.71418393 0.6610392 0.67289676 0.64622155\n", - " 0.6673282 0.69615894 0.65616217 0.6727296 0.65123033 0.65449175\n", - " 0.73046699 0.66168547 0.66547978 0.67372717 0.71895464 0.69954975\n", - " 0.70296723 0.74295093 0.65015026 0.66933031 0.64435054 0.77515633\n", - " 0.68002785 0.65334641 0.67948778 0.67991911 0.67704675 0.67019824\n", - " 0.66169819 0.66127585 0.69710394 0.68075026 0.70024327 0.668318\n", - " 0.6466184 0.67916224 0.68411297 0.66755499 0.72921385 0.65176558\n", - " 0.66314126 0.66924139 0.64714914 0.69931476 0.61648157 0.70170403\n", - " 0.70446268 0.65726566 0.70191822 0.7101979 0.64756795 0.65658264\n", - " 0.67957375 0.67896521 0.65755816 0.74880747 0.62821667 0.6417572\n", - " 0.75406813 0.67119253 0.65220125 0.62961772 0.66405553 0.67231395\n", - " 0.65729845 0.74206021 0.64345315 0.69382481 0.67335181 0.66807028\n", - " 0.68338437 0.67859498 0.66900274 0.70805853 0.64586532 0.65920186\n", - " 0.66813055 0.65447807 0.66800767 0.65424194 0.67479078 0.66409788\n", - " 0.68974306 0.68276922 0.63410842 0.64081595 0.67280999 0.71550716\n", - " 0.6810521 0.6640949 0.62921082 0.69757257 0.68151257 0.65591893\n", - " 0.66817465 0.67217382 0.70362709 0.67867407 0.63678075 0.76032816\n", - " 0.66929467 0.66711276 0.67521913 0.65228908 0.64292552 0.6503377\n", - " 0.64656044 0.63727855 0.66016995 0.77323881 0.70519627 0.6478198\n", - " 0.68014136 0.6451518 0.67076417 0.7039869 0.66378519 0.66035144\n", - " 0.70270508 0.67257514 0.67109514 0.65412159 0.65726783 0.66384724\n", - " 0.64464461 0.67149489 0.6699586 0.66629188 0.69781271 0.64195916\n", - " 0.6705591 0.66843241 0.67442575 0.67413597 0.66334707 0.72857001\n", - " 0.63805512 0.75748148 0.65828772 0.65121416 0.65525146 0.72046346\n", - " 0.68455412 0.70422549 0.66209512 0.73373466 0.65245644 0.67357487\n", - " 0.65386736 0.65969625 0.75710287 0.66937914 0.71247279 0.67757968\n", - " 0.74081777 0.64299509 0.64510926 0.65444608 0.66620027 0.6594392\n", - " 0.73683595 0.73244518 0.70957582 0.6693557 0.63178361 0.65114947\n", - " 0.64020786 0.66648615 0.72491166 0.67978254 0.69881567 0.66013983\n", - " 0.65715904 0.7571417 0.73742255 0.65317926 0.68949006 0.66094913\n", - " 0.65563338 0.64747142 0.65310668 0.66479357 0.67863868 0.65043578\n", - " 0.67838683 0.70778559 0.66617815 0.66462106 0.67276525 0.65774148\n", - " 0.70576359 0.67704994 0.68023222 0.68757579 0.68439667 0.70810932\n", - " 0.66397982 0.65097959 0.67423477 0.67582812 0.70266508 0.69469844\n", - " 0.68047237 0.64174729 0.70097139 0.67559958 0.74452935 0.65743655\n", - " 0.63479686 0.70141008 0.65463944 0.66851267 0.68620805 0.67146396\n", - " 0.71749203 0.6652331 0.72752093 0.66157933 0.71279605 0.73460714\n", - " 0.7532858 0.65844867 0.72195454 0.68439138 0.67001311 0.78179004\n", - " 0.70476981 0.70080736 0.67592158 0.81931314 0.63209027 0.69464504\n", - " 0.65397708 0.64870847 0.69587806 0.72844959 0.64179899 0.64652073\n", - " 0.66921679 0.75781963 0.64137359 0.7329801 0.72709343 0.6657131\n", - " 0.69314164 0.66668597 0.75328271 0.6374643 0.65940264 0.67665052\n", - " 0.65390797 0.63512049 0.64949418 0.69517166 0.68589219 0.67468378\n", - " 0.66262781 0.65304907 0.65276992 0.67166323 0.66537365 0.69817004\n", - " 0.64229122 0.6579069 0.7050192 0.7307672 0.68982625 0.65929934\n", - " 0.69938265 0.77624749 0.66122359 0.7007202 0.69712823 0.64850525\n", - " 0.70492299 0.66298991 0.68275042 0.68159623 0.65372624 0.64560057\n", - " 0.68086302 0.66097949 0.65301165 0.65883011 0.6631677 0.64551527\n", - " 0.67223114 0.6970879 0.65404136 0.68846633 0.6996974 0.67191307\n", - " 0.71721098 0.68082601 0.69407304 0.67630198 0.65435835 0.67189753\n", - " 0.63796982 0.74335392 0.6695806 0.685044 0.7246876 0.72524538\n", - " 0.66567422 0.66515483 0.6664073 0.7789306 0.64997936 0.70870131\n", - " 0.66420424 0.67213586 0.68172849 0.74060217 0.65628956 0.66287935\n", - " 0.69799281 0.65039586 0.65790522 0.65073522 0.72473401 0.67102219\n", - " 0.66880707 0.65157294 0.7077905 0.72979475 0.63401937 0.64478209\n", - " 0.808416 0.67803047 0.66826828 0.68063505 0.67532517 0.68308067\n", - " 0.65577617 0.67062509 0.69198536 0.67212746 0.68007491 0.73435727\n", - " 0.7173848 0.69860118 0.68674327 0.70071786 0.7169071 0.69441748\n", - " 0.62732808 0.68378281 0.63012164 0.66716705 0.65744686 0.67376075\n", - " 0.65649396 0.67289134 0.70456293 0.67159482 0.65336321 0.66853933\n", - " 0.70165826 0.65794266 0.66047615 0.68202073 0.65236156 0.65988147\n", - " 0.73434147 0.66890467 0.65861715 0.66045122 0.6654271 0.76595568\n", - " 0.68522325 0.75483736 0.68563766 0.74622811 0.72187057 0.68647114\n", - " 0.66082285 0.65571612 0.65674234 0.65407513 0.69909936 0.65704605\n", - " 0.68269091 0.66204817 0.69019256 0.66125271 0.67469478 0.64131798\n", - " 0.70366831 0.65400826 0.6399653 0.68878087 0.65440861 0.6571038\n", - " 0.69798898 0.73803588 0.68093251 0.70060602 0.69227509 0.64097277\n", - " 0.68402537 0.67709374 0.7082528 0.72847749 0.6565197 0.66617991\n", - " 0.69629306 0.64089691 0.66061975 0.63504446 0.66328412 0.65162163\n", - " 0.64699246 0.66579693 0.67212428 0.63308124 0.67134131 0.68612088\n", - " 0.72371805 0.68208656 0.67950422 0.63604616 0.66892627 0.71215009\n", - " 0.65437516 0.75730199 0.65304248 0.71740948 0.64699649 0.74923875\n", - " 0.65020717 0.68922743 0.64999108 0.71061501 0.68759205 0.65954199\n", - " 0.72598085 0.69336087 0.68256697 0.71582933 0.67707419 0.64118801\n", - " 0.68837773 0.66944875 0.7014133 0.68544075 0.64950551 0.63887231\n", - " 0.79088388 0.66689925 0.6579529 0.66575479 0.66702672 0.66153242\n", - " 0.65146729 0.64537652 0.66064552 0.70405433 0.67460073 0.69170928\n", - " 0.66422422 0.70665984 0.66726383 0.67759652 0.65350617 0.68004734\n", - " 0.66367084 0.66960301 0.65405329 0.66950875 0.69023129 0.63780086\n", - " 0.68059564 0.67602429 0.67408382 0.71489566 0.73922205 0.66498679\n", - " 0.64541564 0.70486446 0.66695351 0.64079707 0.72884695 0.6647098\n", - " 0.69985634 0.67126836 0.64072027 0.64216763 0.68619943 0.67284751\n", - " 0.68387905 0.70463941 0.64021367 0.66694106 0.70087608 0.66327535\n", - " 0.68730144 0.67293798 0.78196961 0.69606466 0.65038191 0.66829292\n", - " 0.66279107 0.64888729 0.69441983 0.62776088 0.72170337 0.64005111\n", - " 0.67921001 0.67338509 0.69018815 0.68458714 0.68490232 0.6603407\n", - " 0.71495339 0.68837148 0.65639574 0.75044631 0.67557273 0.63551213\n", - " 0.68039097 0.67668012 0.67923523 0.66887073 0.67411176 0.71141274\n", - " 0.64867675 0.66222168 0.65256334 0.66336842 0.64333699 0.67209419\n", - " 0.65610672 0.66386177 0.66294723 0.69050572 0.71986762 0.6292756\n", - " 0.63670355 0.66087973 0.67765692 0.6619027 0.78984577 0.74008345\n", - " 0.66215042 0.68419014 0.69488059 0.62759286 0.68320495 0.64809461\n", - " 0.67328163 0.6575777 0.6442649 0.74415588 0.6662348 0.6837281\n", - " 0.63363174 0.71520254 0.73602234 0.70790405 0.69014984 0.66415298\n", - " 0.62650923 0.65579306 0.64489284 0.65704208 0.65994787 0.70262194\n", - " 0.71836114 0.66850157 0.67437215 0.65607318 0.65036005 0.72943489\n", - " 0.69007195 0.64980301 0.71693109 0.71471778 0.67676393 0.64468183\n", - " 0.67309606 0.65478687 0.67431859 0.64879625 0.66104137 0.64827413\n", - " 0.67109597 0.6607733 0.6838772 0.67002598 0.6676621 0.6954848\n", - " 0.6333084 0.64803632 0.70396777 0.66189747 0.74792243 0.68960756\n", - " 0.70131962 0.6629952 0.66832491 0.65085771 0.70076838 0.66374533\n", - " 0.68303643 0.65283097 0.69186751 0.65797615 0.64298802 0.67872229\n", - " 0.65291829 0.6866761 0.6545776 0.64364443 0.722689 0.65642759\n", - " 0.63446138 0.68372066 0.68901776 0.68835547 0.68856158 0.66174331\n", - " 0.6811978 0.67741666 0.65376266 0.662197 0.68050573 0.71163412\n", - " 0.68365785 0.71397808 0.67069161 0.67012237 0.6639401 0.64144903\n", - " 0.65614218 0.64293869 0.66471337 0.71418472 0.70731383 0.650601\n", - " 0.64771122 0.66423676 0.65343121 0.6613632 0.66117877 0.67391881\n", - " 0.64939455 0.67624726 0.6446441 0.6801654 0.65315484 0.68442333\n", - " 0.65386058 0.66377997 0.67248911 0.64766521 0.67142038 0.66717269\n", - " 0.63936243 0.64175385 0.70297014 0.62191083 0.6490813 0.68899959\n", - " 0.66119803 0.66668763 0.6752531 0.64846213 0.67324382 0.64438126\n", - " 0.6773775 0.70927149 0.74877061 0.68256782 0.67004559 0.6683396\n", - " 0.68145 0.64244055 0.6634039 0.67892541 0.69484688 0.66329383\n", - " 0.66693202 0.65541471 0.67007009 0.67411449 0.67708916 0.67695146\n", - " 0.67794216 0.68339233 0.69732837 0.69831475 0.70185016 0.70205995\n", - " 0.68408075 0.6847255 0.69206964 0.70541957 0.68885852 0.67910709\n", - " 0.69374726 0.70227708 0.69422614 0.69064974 0.68036365 0.67724237\n", - " 0.66180647 0.65757364 0.66074178 0.66245718 0.64574747 0.63061198\n", - " 0.62651942 0.65412839 0.65691194 0.71679477 0.74054243 0.73985616\n", - " 0.71765554 0.7428321 0.74364668 0.76628422 0.75644775 0.76171582\n", - " 0.76471489 0.7566121 0.78226674 0.77307888 0.78195388 0.75027227\n", - " 0.78164944 0.79686553 0.77937581 0.76450962 0.76390751 0.7411223\n", - " 0.72994032 0.7394255 0.76293481 0.74840333 0.69890945 0.71666691\n", - " 0.72224985 0.71816755 0.70423729 0.71031447 0.69296465 0.73951393\n", - " 0.72853371 0.74697451 0.74679616 0.7543075 0.75112805 0.74547186\n", - " 0.75198837 0.70531148 0.73177253 0.7087261 0.70766065 0.72119544\n", - " 0.69607126 0.72267297 0.71837452 0.72739129 0.74522972]\u001b[0m\n" - ] - }, - { - "data": { - "text/markdown": [ - "Yes, here is a code snippet to set up a `VectorIndex`:\n", - "\n", - "```python\n", - "from superduperdb import Listener, VectorIndex\n", - "\n", - "db.add(\n", - " VectorIndex(\n", - " 'my-index',\n", - " indexing_listener=Listener(\n", - " model=model,\n", - " key='txt',\n", - " select=my_collection.find(),\n", - " ),\n", - " )\n", - ")\n", - "```" - ], - "text/plain": [ - "" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "from superduperdb import Document\n", "from IPython.display import Markdown\n", "\n", "# Define the search parameters\n", "search_term = 'Can you give me a code-snippet to set up a `VectorIndex`?'\n", + "# search_term = 'can you explain vector-indexes with `superduperdb`?'\n", + "\n", "num_results = 5\n", "\n", "# Use the SuperDuperDB model to generate a response based on the search term and context\n", @@ -3237,6 +483,16 @@ "Markdown(output.content)" ] }, + { + "cell_type": "code", + "execution_count": null, + "id": "98f1b9d4-3b60-49f4-b993-14a780cfa08b", + "metadata": {}, + "outputs": [], + "source": [ + "db.show('model')" + ] + }, { "cell_type": "code", "execution_count": null, @@ -3250,6 +506,7 @@ }, { "cell_type": "markdown", + "id": "b3de340b", "metadata": {}, "source": [ "## Now you can build an API as well just like we did\n", diff --git a/superduperdb/backends/ibis/query.py b/superduperdb/backends/ibis/query.py index 8705a49ac5..393b10e12a 100644 --- a/superduperdb/backends/ibis/query.py +++ b/superduperdb/backends/ibis/query.py @@ -527,24 +527,21 @@ class QueryType(str, enum.Enum): ATTR = 'attr' -@dc.dataclass(repr=False) +@dc.dataclass(repr=False, kw_only=True) class Table(Component): """ This is a representation of an SQL table in ibis, saving the important meta-data associated with the table in the ``superduperdb`` meta-data store. - - :param identifier: The name of the table - :param schema: The schema of the table + {component_params}:param schema: The schema of the table :param primary_id: The primary id of the table - :param version: The version of the table """ - identifier: str + type_id: t.ClassVar[str] = 'table' + __doc__ = __doc__.format(component_params=Component.__doc__) + schema: Schema primary_id: str = 'id' - version: t.Optional[int] = None - type_id: t.ClassVar[str] = 'table' def pre_create(self, db: 'Datalayer'): assert self.schema is not None, "Schema must be set" diff --git a/superduperdb/base/datalayer.py b/superduperdb/base/datalayer.py index cccfaa6c78..74fbb5b605 100644 --- a/superduperdb/base/datalayer.py +++ b/superduperdb/base/datalayer.py @@ -976,7 +976,8 @@ def _remove_component_version( if hasattr(component, 'artifact_attributes'): for a in component.artifact_attributes: - self.artifact_store.delete(info['dict'][a]['file_id']) + if info['dict'][a] is not None: + self.artifact_store.delete(info['dict'][a]['file_id']) self.metadata.delete_component_version(type_id, identifier, version=version) def _download_content( # TODO: duplicated function diff --git a/superduperdb/base/serializable.py b/superduperdb/base/serializable.py index 27e51b4b0d..3f47613137 100644 --- a/superduperdb/base/serializable.py +++ b/superduperdb/base/serializable.py @@ -37,7 +37,15 @@ def _deserialize(r: t.Any, db: None = None) -> t.Any: if 'db' in inspect.signature(component_cls.__init__).parameters: kwargs.update(db=db) - return component_cls(**kwargs) + instance = component_cls(**{k: v for k, v in kwargs.items() if k != 'version'}) + + # special handling of Component.version + from superduperdb.components.component import Component + + if issubclass(component_cls, Component): + instance.version = r.get('version', None) + + return instance def _serialize(item: t.Any) -> t.Dict[str, t.Any]: diff --git a/superduperdb/cli/stack.py b/superduperdb/cli/stack.py index 998b00acac..4cc385a3d5 100644 --- a/superduperdb/cli/stack.py +++ b/superduperdb/cli/stack.py @@ -5,8 +5,8 @@ @command(help='Apply the stack tarball to the database') -def apply(yaml_path: str): +def apply(yaml_path: str, identifier: str): db = build_datalayer() - stack = Stack() + stack = Stack(identifier=identifier) stack.load(yaml_path) db.add(stack) diff --git a/superduperdb/components/component.py b/superduperdb/components/component.py index 8d84c77b0b..b0aed6845c 100644 --- a/superduperdb/components/component.py +++ b/superduperdb/components/component.py @@ -5,6 +5,7 @@ from __future__ import annotations +import dataclasses as dc import typing as t from superduperdb.backends.base.artifact import ArtifactStore @@ -16,16 +17,18 @@ from superduperdb.components.dataset import Dataset +@dc.dataclass class Component(Serializable): """ - Base component which model, listeners, learning tasks etc. inherit from. - """ + :param identifier: A unique identifier for the component""" type_id: t.ClassVar[str] + identifier: str - if t.TYPE_CHECKING: - identifier: t.Optional[str] - version: t.Optional[int] + def __post_init__(self) -> None: + # set version in `__post_init__` so that is + # cannot be set in `__init__` and is always set + self.version: t.Optional[int] = None def pre_create(self, db: Datalayer) -> None: """Called the first time this component is created @@ -41,7 +44,6 @@ def post_create(self, db: Datalayer) -> None: :param db: the db that creates the component """ assert db - assert db def on_load(self, db: Datalayer) -> None: """Called when this component is loaded from the data store diff --git a/superduperdb/components/dataset.py b/superduperdb/components/dataset.py index f198defc20..444d8fa0e6 100644 --- a/superduperdb/components/dataset.py +++ b/superduperdb/components/dataset.py @@ -16,30 +16,27 @@ @public_api(stability='stable') -@dc.dataclass +@dc.dataclass(kw_only=True) class Dataset(Component): - """A dataset is an immutable collection of documents that used for training - - :param identifier: A unique identifier for the dataset + """A dataset is an immutable collection of documents. + {component_params} :param select: A query to select the documents for the dataset :param sample_size: The number of documents to sample from the query :param random_seed: The random seed to use for sampling :param creation_date: The date the dataset was created :param raw_data: The raw data for the dataset - :param version: The version of the dataset """ - identifier: str + __doc__ = __doc__.format(component_params=Component.__doc__) + + type_id: t.ClassVar[str] = 'dataset' + select: t.Optional[Select] = None sample_size: t.Optional[int] = None random_seed: t.Optional[int] = None creation_date: t.Optional[str] = None raw_data: t.Optional[t.Union[Artifact, t.Any]] = None - # Don't set these manually - version: t.Optional[int] = None - type_id: t.ClassVar[str] = 'dataset' - @override def pre_create(self, db: 'Datalayer') -> None: if self.raw_data is None: diff --git a/superduperdb/components/encoder.py b/superduperdb/components/encoder.py index 45e92cd8c1..8255f13862 100644 --- a/superduperdb/components/encoder.py +++ b/superduperdb/components/encoder.py @@ -22,25 +22,27 @@ def _pickle_encoder(x: t.Any) -> bytes: @public_api(stability='stable') -@dc.dataclass +@dc.dataclass(kw_only=True) class Encoder(Component): """ Storeable ``Component`` allowing byte encoding of primary data, i.e. data inserted using ``db.base.db.Datalayer.insert`` - + {component_parameters} :param identifier: Unique identifier :param decoder: callable converting a ``bytes`` string to a ``Encodable`` of this ``Encoder`` :param encoder: Callable converting an ``Encodable`` of this ``Encoder`` to ``bytes`` :param shape: Shape of the data - :param version: Version of the encoder (don't use this) :param load_hybrid: Whether to load the data from the URI or return the URI in `CFG.hybrid` mode """ + __doc__ = __doc__.format(component_parameters=Component.__doc__) + + type_id: t.ClassVar[str] = 'encoder' + artifact_artibutes: t.ClassVar[t.Sequence[str]] = ['decoder', 'encoder'] - identifier: str decoder: t.Union[t.Callable, Artifact] = dc.field( default_factory=lambda: Artifact(artifact=_pickle_decoder) ) @@ -50,13 +52,12 @@ class Encoder(Component): shape: t.Optional[t.Sequence] = None load_hybrid: bool = True - # Don't set this manually - version: t.Optional[int] = None - type_id: t.ClassVar[str] = 'encoder' # TODO what's this for? encoders: t.ClassVar[t.List] = [] def __post_init__(self): + super().__post_init__() + self.encoders.append(self.identifier) if isinstance(self.decoder, t.Callable): self.decoder = Artifact(artifact=self.decoder) diff --git a/superduperdb/components/listener.py b/superduperdb/components/listener.py index 5ac81cb5e2..88b96f043a 100644 --- a/superduperdb/components/listener.py +++ b/superduperdb/components/listener.py @@ -16,33 +16,39 @@ @public_api(stability='stable') -@dc.dataclass +@dc.dataclass(kw_only=True) class Listener(Component): """ Listener object which is used to process a column/ key of a collection or table, and store the outputs. - + {component_parameters} :param key: Key to be bound to model :param model: Model for processing data :param select: Object for selecting which data is processed - :param active: Toggle to ``False`` to deactivate change data triggering :param identifier: A string used to identify the model. + :param active: Toggle to ``False`` to deactivate change data triggering :param predict_kwargs: Keyword arguments to self.model.predict - :param version: Version number of the model(?) """ + __doc__ = __doc__.format(component_parameters=Component.__doc__) + key: str model: t.Union[str, Model] select: CompoundSelect + identifier: t.Optional[str] = None # type: ignore[assignment] active: bool = True - identifier: t.Optional[str] = None predict_kwargs: t.Optional[t.Dict] = dc.field(default_factory=dict) - # Don't set this manually - version: t.Optional[int] = None - type_id: t.ClassVar[str] = 'listener' + def __post_init__(self): + super().__post_init__() + if self.identifier is None and self.model is not None: + if isinstance(self.model, str): + self.identifier = f'{self.model}/{self.id_key}' + else: + self.identifier = f'{self.model.identifier}/{self.id_key}' + @property def outputs(self): return f'{_OUTPUTS_KEY}.{self.key}.{self.model.identifier}.{self.model.version}' @@ -56,6 +62,7 @@ def child_components(self) -> t.Sequence[t.Tuple[str, str]]: def pre_create(self, db: Datalayer) -> None: if isinstance(self.model, str): self.model = t.cast(Model, db.load('model', self.model)) + if self.select is not None and self.select.variables: self.select = t.cast(CompoundSelect, self.select.set_variables(db)) @@ -88,13 +95,6 @@ def id_key(self) -> str: return self.key.split('.')[1] return self.key - def __post_init__(self): - if self.identifier is None and self.model is not None: - if isinstance(self.model, str): - self.identifier = f'{self.model}/{self.id_key}' - else: - self.identifier = f'{self.model.identifier}/{self.id_key}' - @override def schedule_jobs( self, diff --git a/superduperdb/components/metric.py b/superduperdb/components/metric.py index 0d89c35ba8..a59afde0c8 100644 --- a/superduperdb/components/metric.py +++ b/superduperdb/components/metric.py @@ -7,25 +7,24 @@ @public_api(stability='beta') -@dc.dataclass +@dc.dataclass(kw_only=True) class Metric(Component): """ Metric base object with which to evaluate performance on a data-set. These objects are ``callable`` and are applied row-wise to the data, and averaged. - - :param identifier: unique identifier + {component_parameters} :param object: callable or ``Artifact`` to be applied to the data - :param version: version of the ``Metric`` """ - identifier: str - object: t.Union[Artifact, t.Callable, None] = None - version: t.Optional[int] = None + __doc__ = __doc__.format(component_parameters=Component.__doc__) artifacts: t.ClassVar[t.List[str]] = ['object'] type_id: t.ClassVar[str] = 'metric' + object: t.Union[Artifact, t.Callable] + def __post_init__(self) -> None: + super().__post_init__() if self.object and not isinstance(self.object, Artifact): self.object = Artifact(artifact=self.object) diff --git a/superduperdb/components/model.py b/superduperdb/components/model.py index 9f3459de74..1a201096c4 100644 --- a/superduperdb/components/model.py +++ b/superduperdb/components/model.py @@ -44,22 +44,17 @@ def __call__(self, X): return self.callable(X, **self.kwargs) -@dc.dataclass +@dc.dataclass(kw_only=True) class _TrainingConfiguration(Component): """ Training configuration object, containing all settings necessary for a particular learning-task use-case to be serialized and initiated. The object is ``callable`` and returns a class which may be invoked to apply training. - :param identifier: Unique identifier of configuration :param **kwargs: Key-values pairs, the variables which configure training. """ - identifier: str kwargs: t.Optional[t.Dict] = None - - version: t.Optional[int] = None - type_id: t.ClassVar[str] = 'training_configuration' def get(self, k, default=None): @@ -69,37 +64,48 @@ def get(self, k, default=None): return self.kwargs.get(k, default) +@dc.dataclass(kw_only=True) class _Predictor: - """ - Mixin class for components which can predict. - - :param identifier: Unique identifier of model - :param encoder: Encoder instance (optional) - :param output_schema: Output schema (mapping of encoders) (optional) + # Mixin class for components which can predict. + """:param encoder: Encoder instance + :param output_schema: Output schema (mapping of encoders) :param flatten: Flatten the model outputs - :param preprocess: Preprocess function (optional) - :param postprocess: Postprocess function (optional) - :param collate_fn: Collate function (optional) - :param batch_predict: Whether to batch predict (optional) - :param takes_context: Whether the model takes context into account (optional) - :param to_call: The method to use for prediction (optional) - :param model_update_kwargs: The kwargs to use for model update (optional) - """ + :param preprocess: Preprocess function + :param postprocess: Postprocess function + :param collate_fn: Collate function + :param batch_predict: Whether to batch predict + :param takes_context: Whether the model takes context into account + :param metrics: The metrics to evaluate on + :param model_update_kwargs: The kwargs to use for model update + :param validation_sets: The validation ``Dataset`` instances to use + :param predict_X: The key of the input data to use for .predict + :param predict_select: The select to use for .predict + :param predict_max_chunk_size: The max chunk size to use for .predict""" + + type_id: t.ClassVar[str] = 'model' - identifier: str - encoder: EncoderArg + encoder: EncoderArg = None output_schema: t.Optional[t.Union[Schema, dict]] = None flatten: bool = False preprocess: t.Union[t.Callable, Artifact, None] = None postprocess: t.Union[t.Callable, Artifact, None] = None collate_fn: t.Union[t.Callable, Artifact, None] = None - batch_predict: bool - takes_context: bool - to_call: t.Callable - model_update_kwargs: t.Dict + batch_predict: bool = False + takes_context: bool = False + metrics: t.Sequence[t.Union[str, Metric, None]] = () + model_update_kwargs: t.Dict = dc.field(default_factory=dict) + validation_sets: t.Optional[t.Sequence[t.Union[str, Dataset]]] = None - version: t.Optional[int] = None - type_id: t.ClassVar[str] = 'model' + predict_X: t.Optional[str] = None + predict_select: t.Optional[CompoundSelect] = None + predict_max_chunk_size: t.Optional[int] = None + + @abstractmethod + def to_call(self, X, *args, **kwargs): + """ + The method to use to call prediction. Should be implemented + by the child class. + """ def create_predict_job( self, @@ -175,6 +181,7 @@ def _predict( if isinstance(self.collate_fn, Artifact): raise ValueError('Bad collate function') + elif self.collate_fn is not None: X = self.collate_fn(X) @@ -191,7 +198,7 @@ def predict( self, X: t.Any, db: t.Optional[Datalayer] = None, - select: t.Optional[Select] = None, + select: t.Optional[CompoundSelect] = None, ids: t.Optional[t.List[str]] = None, max_chunk_size: t.Optional[int] = None, dependencies: t.Sequence[Job] = (), @@ -419,88 +426,82 @@ def _predict_with_select_and_ids( @public_api(stability='stable') -@dc.dataclass -class Model(Component, _Predictor): +@dc.dataclass(kw_only=True) +class Model(_Predictor, Component): """Model component which wraps a model to become serializable - - :param identifier: Unique identifier of model + {component_params} + {_predictor_params} :param object: Model object, e.g. sklearn model, etc.. - :param encoder: Encoder instance (optional) - :param flatten: Flatten the model outputs - :param output_schema: Output schema (mapping of encoders) (optional) - :param preprocess: Preprocess function (optional) - :param postprocess: Postprocess function (optional) - :param collate_fn: Collate function (optional) - :param metrics: Metrics to use (optional) - :param predict_method: The method to use for prediction (optional) :param model_to_device_method: The method to transfer the model to a device - :param batch_predict: Whether to batch predict (optional) - :param takes_context: Whether the model takes context into account (optional) - :param train_X: The key of the input data to use for training (optional) - :param train_y: The key of the target data to use for training (optional) - :param training_select: The select to use for training (optional) - :param metric_values: The metric values (optional) - :param training_configuration: The training configuration (optional) - :param model_update_kwargs: The kwargs to use for model update (optional) - :param serializer: Serializer to store model to artifact store (optional) - :param device: The device to use (optional) - :param preferred_devices: The preferred devices to use (optional) + :param metric_values: The metric values + :param predict_method: The method to use for prediction + :param model_update_kwargs: The kwargs to use for model update + :param serializer: Serializer to store model to artifact store + :param device: The device to use + :param preferred_devices: The preferred devices to use + :param training_configuration: The training configuration + :param train_X: The key of the input data to use for training + :param train_y: The key of the target data to use for training + :param train_select: The select to use for training """ - identifier: str + __doc__ = __doc__.format( + component_params=Component.__doc__, + _predictor_params=_Predictor.__doc__, + ) + object: t.Union[Artifact, t.Any] - flatten: bool = False - output_schema: t.Optional[t.Union[Schema, dict]] = None - encoder: EncoderArg = None - preprocess: t.Union[t.Callable, Artifact, None] = None - postprocess: t.Union[t.Callable, Artifact, None] = None - collate_fn: t.Union[t.Callable, Artifact, None] = None - metrics: t.Sequence[t.Union[str, Metric, None]] = () - predict_method: t.Optional[str] = None model_to_device_method: t.Optional[str] = None - batch_predict: bool = False - takes_context: bool = False - train_X: t.Optional[str] = None - train_y: t.Optional[str] = None - training_select: t.Union[Select, None] = None metric_values: t.Optional[t.Dict] = dc.field(default_factory=dict) - training_configuration: t.Union[str, _TrainingConfiguration, None] = None + predict_method: t.Optional[str] = None model_update_kwargs: dict = dc.field(default_factory=dict) serializer: str = 'dill' device: str = "cpu" preferred_devices: t.Union[None, t.Sequence[str]] = ("cuda", "mps", "cpu") - validation_sets: t.Optional[t.Sequence[t.Union[str, Dataset]]] = None - # Don't set these manually - version: t.Optional[int] = None + training_configuration: t.Union[str, _TrainingConfiguration, None] = None + train_X: t.Optional[str] = None + train_y: t.Optional[str] = None + train_select: t.Optional[CompoundSelect] = None - artifact_attributes: t.ClassVar[t.Sequence[str]] = ['object'] + artifact_attributes: t.ClassVar[t.Sequence[str]] = ( + 'object', + 'preprocess', + 'postprocess', + ) type_id: t.ClassVar[str] = 'model' def __post_init__(self): + super().__post_init__() + if not isinstance(self.object, Artifact): self.object = Artifact(artifact=self.object, serializer=self.serializer) if self.preprocess and not isinstance(self.preprocess, Artifact): self.preprocess = Artifact(artifact=self.preprocess) if self.postprocess and not isinstance(self.postprocess, Artifact): self.postprocess = Artifact(artifact=self.postprocess) - if self.predict_method is None: - self.to_call = self.object.artifact - else: - self.to_call = getattr(self.object.artifact, self.predict_method) self._artifact_method = None - if self.model_to_device_method is not None: self._artifact_method = getattr(self, self.model_to_device_method) + def to_call(self, X, *args, **kwargs): + if self.predict_method is None: + return self.object.artifact(X, *args, **kwargs) + return getattr(self.object.artifact, self.predict_method)(X, *args, **kwargs) + def post_create(self, db: Datalayer) -> None: + if isinstance(self.training_configuration, str): + self.training_configuration = db.load( + 'training_configuration', self.training_configuration + ) # type: ignore[assignment] if isinstance(self.output_schema, Schema): db.add(self.output_schema) output_component = db.databackend.create_model_table_or_collection(self) if output_component is not None: db.add(output_component) + # TODO - bring inside post_create @override def schedule_jobs( self, @@ -508,10 +509,11 @@ def schedule_jobs( dependencies: t.Sequence[Job] = (), verbose: bool = False, ) -> t.Sequence[t.Any]: + jobs = [] if self.train_X is not None: assert isinstance(self.training_configuration, _TrainingConfiguration) assert self.training_select is not None - return [ + jobs.append( self.fit( X=self.train_X, y=self.train_y, @@ -522,8 +524,17 @@ def schedule_jobs( metrics=self.metrics, # type: ignore[arg-type] validation_sets=self.validation_sets, ) - ] - return [] + ) + if self.predict_X is not None: + assert self.predict_select is not None + jobs.append( + self.predict( + X=self.predict_X, + select=self.predict_select, + max_chunk_size=self.predict_max_chunk_size, + ) + ) + return jobs def on_load(self, db: Datalayer) -> None: if self._artifact_method and self.preferred_devices: @@ -631,11 +642,10 @@ def create_fit_job( def _fit( self, X: t.Any, - y: t.Any = None, + y: t.Optional[t.Any] = None, configuration: t.Optional[_TrainingConfiguration] = None, data_prefetch: bool = False, db: t.Optional[Datalayer] = None, - dependencies: t.Sequence[Job] = (), metrics: t.Optional[t.Sequence[Metric]] = None, select: t.Optional[Select] = None, validation_sets: t.Optional[t.Sequence[t.Union[str, Dataset]]] = None, @@ -645,7 +655,7 @@ def _fit( def fit( self, X: t.Any, - y: t.Any = None, + y: t.Optional[t.Any] = None, configuration: t.Optional[_TrainingConfiguration] = None, data_prefetch: bool = False, db: t.Optional[Datalayer] = None, @@ -711,27 +721,31 @@ def TrainingConfiguration(identifier: str, **kwargs): @public_api(stability='beta') -@dc.dataclass +@dc.dataclass(kw_only=True) class APIModel(Component, _Predictor): - ''' - A Component for representing api models like openai, cohere etc - :param model: The model to use, e.g. ``'text-embedding-ada-002'``. - :param identifier: The identifier to use, e.g. ``'my-model'``. - :param version: The version to use, e.g. ``0`` (leave empty) - :param takes_context: Whether the model takes context into account. - :param encoder: The encoder identifier. - ''' - - model: str - identifier: str = '' - version: t.Optional[int] = None - takes_context: bool = False - encoder: t.Union[FieldType, Encoder, str, None] = None - model_update_kwargs: dict = dc.field(default_factory=dict) + '''{component_params} + {predictor_params} + :param model: The model to use, e.g. ``'text-embedding-ada-002'``''' + + __doc__ = __doc__.format( + component_params=Component.__doc__, + predictor_params=_Predictor.__doc__, + ) + + model: t.Optional[str] = None + + def __post_init__(self): + super().__post_init__() + if self.model is None: + assert self.identifier is not None + self.model = self.identifier def post_create(self, db: Datalayer) -> None: + # TODO: This not necessary since added as a subcomponent if isinstance(self.output_schema, Schema): db.add(self.output_schema) + # TODO add this logic to pre_create, + # since then the `.add` clause is not necessary output_component = db.databackend.create_model_table_or_collection(self) if output_component is not None: db.add(output_component) diff --git a/superduperdb/components/schema.py b/superduperdb/components/schema.py index d7114df4cf..9f3cfe9514 100644 --- a/superduperdb/components/schema.py +++ b/superduperdb/components/schema.py @@ -9,25 +9,34 @@ @public_api(stability='beta') -@dc.dataclass +@dc.dataclass(kw_only=True) class Schema(Component): - identifier: str - fields: t.Mapping[str, t.Union[Encoder, str]] - version: t.Optional[int] = None + """ + A component carrying the information + about the types or `Encoders` of a `Table` + {component_parameters} + :param fields: A mapping of field names to types or `Encoders` + """ + + __doc__ = __doc__.format(component_parameters=Component.__doc__) type_id: t.ClassVar[str] = 'schema' + fields: t.Mapping[str, t.Union[Encoder, str]] + + def __post_init__(self): + super().__post_init__() + + assert self.identifier is not None, 'Schema must have an identifier' + assert self.fields is not None, 'Schema must have fields' + self.fields['_fold'] = dtype('str') + def pre_create(self, db) -> None: for v in self.fields.values(): if isinstance(v, Encoder): db.add(v) return super().pre_create(db) - def __post_init__(self): - assert self.identifier is not None, 'Schema must have an identifier' - assert self.fields is not None, 'Schema must have fields' - self.fields['_fold'] = dtype('String') - @property def raw(self): return { diff --git a/superduperdb/components/serializer.py b/superduperdb/components/serializer.py index 5a2daa1156..5e222dcae2 100644 --- a/superduperdb/components/serializer.py +++ b/superduperdb/components/serializer.py @@ -10,16 +10,22 @@ @public_api(stability='beta') -@dc.dataclass +@dc.dataclass(kw_only=True) class Serializer(Component): - identifier: str - object: t.Type + """ + A component carrying the information to apply a serializer to a + model. + {component_parameters} + :param object: The serializer + """ + + __doc__ = __doc__.format(component_parameters=Component.__doc__) type_id: t.ClassVar[str] = 'serializer' - version: t.Optional[int] + object: t.Type def pre_create(self, db: 'Datalayer'): + super().pre_create(db) serializers.add(self.identifier, self.object) - self.object = t.cast(t.Type, self.identifier) diff --git a/superduperdb/components/stack.py b/superduperdb/components/stack.py index 1e5fcec421..c169020e87 100644 --- a/superduperdb/components/stack.py +++ b/superduperdb/components/stack.py @@ -19,25 +19,25 @@ @public_api(stability='alpha') -@dc.dataclass +@dc.dataclass(kw_only=True) class Stack(Component): """ A placeholder to hold list of components under a namespace and packages them as a tarball This tarball can be retrieved back to a `Stack` instance with ``load`` method. - - :param identifier: A string used to identify the model. + {component_parameters} :param components: List of components to stack together and add to database. :param version: Version number of the model(?) """ - identifier: t.Optional[str] = None - components: t.Optional[t.Sequence[Component]] = () - version: t.Optional[int] = None + __doct__ = __doc__.format(component_parameters=Component.__doc__) type_id: t.ClassVar[str] = 'stack' + components: t.Optional[t.Sequence[Component]] = () + def __post_init__(self): + super().__post_init__() self._load_components() def _load_components(self): diff --git a/superduperdb/components/vector_index.py b/superduperdb/components/vector_index.py index 5f619bd1e7..470c9b5e0a 100644 --- a/superduperdb/components/vector_index.py +++ b/superduperdb/components/vector_index.py @@ -20,28 +20,26 @@ @public_api(stability='stable') -@dc.dataclass +@dc.dataclass(kw_only=True) class VectorIndex(Component): """ A component carrying the information to apply a vector index to a ``DB`` instance - - :param identifier: Unique string identifier of index + {component_parameters} :param indexing_listener: Listener which is applied to created vectors :param compatible_listener: Listener which is applied to vectors to be compared :param measure: Measure to use for comparison - :param version: version of this index :param metric_values: Metric values for this index """ - identifier: str + __doc__ = __doc__.format(component_parameters=Component.__doc__) + + type_id: t.ClassVar[str] = 'vector_index' + indexing_listener: t.Union[Listener, str] compatible_listener: t.Union[None, Listener, str] = None measure: VectorIndexMeasureType = VectorIndexMeasureType.cosine - version: t.Optional[int] = None metric_values: t.Optional[t.Dict] = dc.field(default_factory=dict) - type_id: t.ClassVar[str] = 'vector_index' - @override def post_create(self, db: Datalayer) -> None: super().post_create(db) diff --git a/superduperdb/ext/anthropic/model.py b/superduperdb/ext/anthropic/model.py index 2754d7b375..87951a3305 100644 --- a/superduperdb/ext/anthropic/model.py +++ b/superduperdb/ext/anthropic/model.py @@ -18,7 +18,7 @@ KEY_NAME = 'ANTHROPIC_API_KEY' -@dc.dataclass +@dc.dataclass(kw_only=True) class Anthropic(APIModel): """Anthropic predictor.""" @@ -28,7 +28,7 @@ def __post_init__(self): self.identifier = self.identifier or self.model -@dc.dataclass +@dc.dataclass(kw_only=True) class AnthropicCompletions(Anthropic): """Cohere completions (chat) predictor. @@ -36,7 +36,6 @@ class AnthropicCompletions(Anthropic): :param prompt: The prompt to use to seed the response. """ - takes_context: bool = True prompt: str = '' def pre_create(self, db: Datalayer) -> None: diff --git a/superduperdb/ext/cohere/model.py b/superduperdb/ext/cohere/model.py index 87eb5d1d17..d5e3e50b75 100644 --- a/superduperdb/ext/cohere/model.py +++ b/superduperdb/ext/cohere/model.py @@ -18,7 +18,7 @@ KEY_NAME = 'COHERE_API_KEY' -@dc.dataclass +@dc.dataclass(kw_only=True) class Cohere(APIModel): """Cohere predictor""" @@ -28,7 +28,7 @@ def __post_init__(self): self.identifier = self.identifier or self.model -@dc.dataclass +@dc.dataclass(kw_only=True) class CohereEmbed(Cohere): """Cohere embedding predictor @@ -96,7 +96,7 @@ async def _apredict(self, X, one=False, **kwargs): return out -@dc.dataclass +@dc.dataclass(kw_only=True) class CohereGenerate(Cohere): """Cohere realistic text generator (chat predictor) diff --git a/superduperdb/ext/openai/model.py b/superduperdb/ext/openai/model.py index 5259b7a8dc..f1c135714c 100644 --- a/superduperdb/ext/openai/model.py +++ b/superduperdb/ext/openai/model.py @@ -32,11 +32,13 @@ def _available_models(): return tuple([r.id for r in SyncOpenAI().models.list().data]) -@dc.dataclass -class OpenAI(APIModel): - """OpenAI predictor.""" +@dc.dataclass(kw_only=True) +class _OpenAI(APIModel): + __doc__ = APIModel.__doc__ # type: ignore[assignment] def __post_init__(self): + super().__post_init__() + # dall-e is not currently included in list returned by OpenAI model endpoint if self.model not in (mo := _available_models()) and self.model not in ( 'dall-e' @@ -44,8 +46,6 @@ def __post_init__(self): msg = f'model {self.model} not in OpenAI available models, {mo}' raise ValueError(msg) - self.identifier = self.identifier or self.model - self.syncClient = SyncOpenAI() self.asyncClient = AsyncOpenAI() @@ -53,15 +53,17 @@ def __post_init__(self): raise ValueError('OPENAI_API_KEY not set') -@dc.dataclass -class OpenAIEmbedding(OpenAI): - """OpenAI embedding predictor - +@dc.dataclass(kw_only=True) +class OpenAIEmbedding(_OpenAI): + """ + OpenAI embedding predictor + {_openai_parameters} :param shape: The shape as ``tuple`` of the embedding. """ - shape: t.Optional[t.Sequence[int]] = None + __doc__ = __doc__.format(_openai_parameters=_OpenAI.__doc__) + shape: t.Optional[t.Sequence[int]] = None shapes: t.ClassVar[t.Dict] = {'text-embedding-ada-002': (1536,)} def __post_init__(self): @@ -123,17 +125,21 @@ async def _apredict(self, X, one: bool = False, **kwargs): return out -@dc.dataclass -class OpenAIChatCompletion(OpenAI): +@dc.dataclass(kw_only=True) +class OpenAIChatCompletion(_OpenAI): """OpenAI chat completion predictor. - - :param takes_context: Whether the model takes context into account. + {_openai_parameters} :param prompt: The prompt to use to seed the response. """ - takes_context: bool = True + __doc__ = __doc__.format(_openai_parameters=_OpenAI.__doc__) + prompt: str = '' + def __post_init__(self): + super().__post_init__() + self.takes_context = True + def _format_prompt(self, context, X): prompt = self.prompt.format(context='\n'.join(context)) return prompt + X @@ -192,14 +198,16 @@ async def _apredict( return [await self._apredict_one(msg) for msg in X] -@dc.dataclass -class OpenAIImageCreation(OpenAI): +@dc.dataclass(kw_only=True) +class OpenAIImageCreation(_OpenAI): """OpenAI image creation predictor. - + {_openai_parameters} :param takes_context: Whether the model takes context into account. :param prompt: The prompt to use to seed the response. """ + __doc__ = __doc__.format(_openai_parameters=_OpenAI.__doc__) + takes_context: bool = True prompt: str = '' @@ -298,14 +306,16 @@ async def _apredict( ] -@dc.dataclass -class OpenAIImageEdit(OpenAI): +@dc.dataclass(kw_only=True) +class OpenAIImageEdit(_OpenAI): """OpenAI image edit predictor. - + {_openai_parameters} :param takes_context: Whether the model takes context into account. :param prompt: The prompt to use to seed the response. """ + __doc__ = __doc__.format(_openai_parameters=_OpenAI.__doc__) + takes_context: bool = True prompt: str = '' @@ -441,14 +451,16 @@ async def _apredict( ] -@dc.dataclass -class OpenAIAudioTranscription(OpenAI): +@dc.dataclass(kw_only=True) +class OpenAIAudioTranscription(_OpenAI): """OpenAI audio transcription predictor. - + {_openai_parameters} :param takes_context: Whether the model takes context into account. :param prompt: The prompt to guide the model's style. Should contain ``{context}``. """ + __doc__ = __doc__.format(_openai_parameters=_OpenAI.__doc__, context='{context}') + takes_context: bool = True prompt: str = '' @@ -541,14 +553,16 @@ async def _apredict( return list(itertools.chain(*list_of_lists)) -@dc.dataclass -class OpenAIAudioTranslation(OpenAI): +@dc.dataclass(kw_only=True) +class OpenAIAudioTranslation(_OpenAI): """OpenAI audio translation predictor. - + {_openai_parameters} :param takes_context: Whether the model takes context into account. :param prompt: The prompt to guide the model's style. Should contain ``{context}``. """ + __doc__ = __doc__.format(_openai_parameters=_OpenAI.__doc__, context='{context}') + takes_context: bool = True prompt: str = '' diff --git a/superduperdb/ext/torch/model.py b/superduperdb/ext/torch/model.py index 9b19ca1477..50136c77c9 100644 --- a/superduperdb/ext/torch/model.py +++ b/superduperdb/ext/torch/model.py @@ -19,14 +19,12 @@ from superduperdb.base.datalayer import Datalayer from superduperdb.base.document import Document from superduperdb.base.serializable import Serializable +from superduperdb.components.dataset import Dataset from superduperdb.components.encoder import Encodable from superduperdb.components.metric import Metric from superduperdb.components.model import Model, _TrainingConfiguration from superduperdb.ext.torch.utils import device_of, eval, to_device -if t.TYPE_CHECKING: - from superduperdb.components.dataset import Dataset - class BasicDataset(data.Dataset): """ @@ -85,6 +83,7 @@ class TorchTrainerConfiguration(_TrainingConfiguration): target_preprocessors: t.Optional[t.Union[Artifact, t.Dict]] = None def __post_init__(self): + super().__post_init__() if self.objective and not isinstance(self.objective, Artifact): self.objective = Artifact(artifact=self.objective) @@ -94,45 +93,152 @@ def __post_init__(self): self.target_preprocessors = Artifact(artifact=self.target_preprocessors) -@dc.dataclass -class Base: - collate_fn: t.Optional[t.Union[Artifact, t.Callable]] = None +@dc.dataclass(kw_only=True) +class TorchModel(Model): is_batch: t.Optional[t.Union[Artifact, t.Callable]] = None num_directions: int = 2 - metrics: t.Optional[t.Sequence[t.Union[str, Metric]]] = None - training_select: t.Optional[Select] = None + optimizer_state: t.Optional[Artifact] = None + forward_method: str = '__call__' + train_forward_method: str = '__call__' + + def __post_init__(self): + super().__post_init__() + + if self.model_to_device_method: + s.logging.debug( + f'{self.model_to_device_method} will be overriden with `to`' + ) + + self.model_to_device_method = 'to' + + self.object.serializer = 'torch' + + if self.optimizer_state is not None: + self.optimizer.load_state_dict(self.optimizer_state.artifact) + + self._validation_set_cache = {} + + def to(self, device): + self.object.artifact.to(device) + + @cached_property + def optimizer(self): + return self.training_configuration.optimizer_cls.artifact( + self.object.artifact.parameters(), + **self.training_configuration.optimizer_kwargs, + ) + + @property + def optimizers(self) -> t.List: + return [self.optimizer] + + def save(self, database: Datalayer): + self.optimizer_state = Artifact(self.optimizer.state_dict(), serializer='torch') + database.replace(object=self, upsert=True) @contextmanager def evaluating(self): - raise NotImplementedError + yield eval(self) def train(self): - raise NotImplementedError + return self.object.artifact.train() + + def eval(self): + return self.object.artifact.eval() - if t.TYPE_CHECKING: - # TODO: We can't use the actual declarations because of the multiple - # inheritance issues. - @property - def training_keys(self) -> t.List[str]: - raise NotImplementedError + def parameters(self): + return self.object.parameters() + + def state_dict(self): + return self.object.state_dict() + + @contextmanager + def saving(self): + with super().saving(): + was_training = self.object.training + try: + self.object.eval() + yield + finally: + if was_training: + self.object.train() - def _validate( - self, db: Datalayer, validation_set: Dataset, metrics: t.Sequence[Metric] + def __getstate__(self): + state = self.__dict__.copy() + if isinstance(self.object, torch.jit.ScriptModule) or isinstance( + self.object, torch.jit.ScriptFunction ): - raise NotImplementedError + f = io.BytesIO() + torch.jit.save(self.object, f) + state['_object_bytes'] = f.getvalue() + return state - def append_metrics(self, d: t.Dict[str, float]) -> None: - raise NotImplementedError + def __setstate__(self, state): + keys = state.keys() + for k in keys: + if k != '_object_bytes': + self.__dict__[k] = state[k] + else: + state.__dict__['object'] = torch.jit.load( + io.BytesIO(state.pop('object_bytes')) + ) - @property - def optimizers(self) -> t.List: - raise NotImplementedError + def _predict_one(self, x): + with torch.no_grad(), eval(self.object.artifact): + if self.preprocess is not None: + x = self.preprocess.artifact(x) + x = to_device(x, device_of(self.object.artifact)) + singleton_batch = create_batch(x) + method = getattr(self.object.artifact, self.forward_method) + output = method(singleton_batch) + output = to_device(output, 'cpu') + args = unpack_batch(output)[0] + if self.postprocess is not None: + args = self.postprocess.artifact(args) + return args - def preprocess(self, r): - raise NotImplementedError # implemented in PyTorch wrapper and PyTorch pipeline + def _predict(self, x, one: bool = False, **kwargs): # type: ignore[override] + with torch.no_grad(), eval(self.object.artifact): + if one: + return self._predict_one(x) + if not isinstance(self.preprocess, Artifact): - def save(self, database: Datalayer): - raise NotImplementedError + def func(x): + return x + + else: + func = self.preprocess.artifact + inputs = BasicDataset(x, func) + loader = torch.utils.data.DataLoader(inputs, **kwargs) + out = [] + for batch in tqdm(loader, total=len(loader)): + batch = to_device(batch, device_of(self.object.artifact)) + + method = getattr(self.object.artifact, self.forward_method) + tmp = method(batch) + tmp = to_device(tmp, 'cpu') + tmp = unpack_batch(tmp) + if isinstance(self.postprocess, Artifact): + tmp = [self.postprocess.artifact(t) for t in tmp] + out.extend(tmp) + return out + + def train_forward(self, X, y=None): + X = X.to(self.device) + if y is not None: + y = y.to(self.device) + + method = getattr(self.object.artifact, self.train_forward_method) + if hasattr(self.object.artifact, 'train_forward'): + if y is None: + return method(X) + else: + return method(X, y=y) + else: + if y is None: + return (method(X),) + else: + return [method(X), y] def stopping_criterion(self, iteration): max_iterations = self.training_configuration.max_iterations @@ -161,14 +267,15 @@ def saving_criterion(self): def _fit( self, - X: t.Union[t.List[str], str], - y: t.Optional[t.Union[t.List, t.Any]] = None, - configuration: t.Optional[TorchTrainerConfiguration] = None, + X: t.Any, + *, + y: t.Optional[t.Any] = None, + configuration: TorchTrainerConfiguration, # type: ignore[override] data_prefetch: bool = False, db: t.Optional[Datalayer] = None, - metrics: t.Optional[t.List[Metric]] = None, + metrics: t.Optional[t.Sequence[Metric]] = None, select: t.Optional[t.Union[Select, t.Dict]] = None, - validation_sets: t.Optional[t.List[str]] = None, + validation_sets: t.Optional[t.Sequence[t.Union[str, Dataset]]] = None, ): if configuration is not None: self.training_configuration = configuration @@ -253,10 +360,15 @@ def _fit_with_dataloaders( train_dataloader: DataLoader, valid_dataloader: DataLoader, db: Datalayer, - validation_sets: t.List[str], + validation_sets: t.Optional[t.Sequence[t.Union[str, Dataset]]] = None, ): + if validation_sets is None: + validation_sets = [] self.train() iteration = 0 + + assert isinstance(self.training_configuration, TorchTrainerConfiguration) + while True: for batch in train_dataloader: train_objective = self.take_step(batch, self.optimizers) @@ -271,7 +383,7 @@ def _fit_with_dataloaders( for vs in validation_sets: m = self._validate( db=db, - validation_set=vs, # type: ignore[arg-type] + validation_set=vs, metrics=metrics, ) all_metrics.update(m) @@ -345,158 +457,6 @@ def _get_data(self, db: t.Optional[Datalayer]): return train_data, valid_data -@dc.dataclass -class TorchModel(Base, Model): # type: ignore[misc] - """ - :param optimizer_state: optional optimizer state, populated automatically on reload - :param forward_method: method to call for prediction, defaults to __call__ - :param train_forward_method: method to call for training, defaults to __call__ - """ - - optimizer_state: t.Optional[Artifact] = None - forward_method: str = '__call__' - train_forward_method: str = '__call__' - - def __post_init__(self): - if self.model_to_device_method: - s.logging.debug( - f'{self.model_to_device_method} will be overriden with `to`' - ) - - self.model_to_device_method = 'to' - - super().__post_init__() - - self.object.serializer = 'torch' - - if self.optimizer_state is not None: - self.optimizer.load_state_dict(self.optimizer_state.artifact) - - self._validation_set_cache = {} - - def to(self, device): - self.object.artifact.to(device) - - @cached_property - def optimizer(self): - return self.training_configuration.optimizer_cls.artifact( - self.object.artifact.parameters(), - **self.training_configuration.optimizer_kwargs, - ) - - @property - def optimizers(self) -> t.List: - return [self.optimizer] - - def save(self, database: Datalayer): - self.optimizer_state = Artifact(self.optimizer.state_dict(), serializer='torch') - database.replace(object=self, upsert=True) - - @contextmanager - def evaluating(self): - yield eval(self) - - def train(self): - return self.object.artifact.train() - - def eval(self): - return self.object.artifact.eval() - - def parameters(self): - return self.object.parameters() - - def state_dict(self): - return self.object.state_dict() - - @contextmanager - def saving(self): - with super().saving(): - was_training = self.object.training - try: - self.object.eval() - yield - finally: - if was_training: - self.object.train() - - def __getstate__(self): - state = self.__dict__.copy() - if isinstance(self.object, torch.jit.ScriptModule) or isinstance( - self.object, torch.jit.ScriptFunction - ): - f = io.BytesIO() - torch.jit.save(self.object, f) - state['_object_bytes'] = f.getvalue() - return state - - def __setstate__(self, state): - keys = state.keys() - for k in keys: - if k != '_object_bytes': - self.__dict__[k] = state[k] - else: - state.__dict__['object'] = torch.jit.load( - io.BytesIO(state.pop('object_bytes')) - ) - - def _predict_one(self, x): - with torch.no_grad(), eval(self.object.artifact): - if self.preprocess is not None: - x = self.preprocess.artifact(x) - x = to_device(x, device_of(self.object.artifact)) - singleton_batch = create_batch(x) - method = getattr(self.object.artifact, self.forward_method) - output = method(singleton_batch) - output = to_device(output, 'cpu') - args = unpack_batch(output)[0] - if self.postprocess is not None: - args = self.postprocess.artifact(args) - return args - - def _predict(self, x, one: bool = False, **kwargs): # type: ignore[override] - with torch.no_grad(), eval(self.object.artifact): - if one: - return self._predict_one(x) - if not isinstance(self.preprocess, Artifact): - - def func(x): - return x - - else: - func = self.preprocess.artifact - inputs = BasicDataset(x, func) - loader = torch.utils.data.DataLoader(inputs, **kwargs) - out = [] - for batch in tqdm(loader, total=len(loader)): - batch = to_device(batch, device_of(self.object.artifact)) - - method = getattr(self.object.artifact, self.forward_method) - tmp = method(batch) - tmp = to_device(tmp, 'cpu') - tmp = unpack_batch(tmp) - if isinstance(self.postprocess, Artifact): - tmp = [self.postprocess.artifact(t) for t in tmp] - out.extend(tmp) - return out - - def train_forward(self, X, y=None): - X = X.to(self.device) - if y is not None: - y = y.to(self.device) - - method = getattr(self.object.artifact, self.train_forward_method) - if hasattr(self.object.artifact, 'train_forward'): - if y is None: - return method(X) - else: - return method(X, y=y) - else: - if y is None: - return (method(X),) - else: - return [method(X), y] - - def unpack_batch(args): """ Unpack a batch into lines of tensor output. diff --git a/test/conftest.py b/test/conftest.py index 3d9bf721c5..762c54ff92 100644 --- a/test/conftest.py +++ b/test/conftest.py @@ -213,21 +213,20 @@ def add_models(db: Datalayer): ['linear_b', (16, 8), 'torch.float32[8]'], ] for identifier, weight_shape, encoder in params: - db.add( - TorchModel( - object=torch.nn.Linear(*weight_shape), - identifier=identifier, - encoder=encoder, - ) + m = TorchModel( + object=torch.nn.Linear(*weight_shape), + identifier=identifier, + encoder=encoder, ) + db.add(m) def add_vector_index( db: Datalayer, collection_name='documents', identifier='test_vector_search' ): # TODO: Support configurable key and model - is_mongodb_bachend = isinstance(db.databackend, MongoDataBackend) - if is_mongodb_bachend: + is_mongodb_backend = isinstance(db.databackend, MongoDataBackend) + if is_mongodb_backend: select_x = Collection(collection_name).find() select_z = Collection(collection_name).find() else: @@ -242,6 +241,7 @@ def add_vector_index( model='linear_a', ) ) + db.add( Listener( select=select_z, @@ -273,8 +273,8 @@ def create_db(CFG, **kwargs): # prepare data n_data = kwargs.get('n_data', LOCAL_TEST_N_DATA_POINTS) - is_mongodb_bachend = isinstance(db.databackend, MongoDataBackend) - if is_mongodb_bachend: + is_mongodb_backend = isinstance(db.databackend, MongoDataBackend) + if is_mongodb_backend: add_random_data_to_mongo_db(db, number_data_points=n_data) else: add_random_data_to_sql_db(db, number_data_points=n_data) @@ -308,6 +308,7 @@ def db(request, monkeypatch) -> Iterator[Datalayer]: monkeypatch.setattr(CFG, 'data_backend', setup_config['data_backend']) db = create_db(CFG, **setup_config) + yield db db_type = setup_config.get('db_type', 'mongodb') diff --git a/test/integration/ext/cohere/test_model_cohere.py b/test/integration/ext/cohere/test_model_cohere.py index a9d69c6a0c..1d5a489766 100644 --- a/test/integration/ext/cohere/test_model_cohere.py +++ b/test/integration/ext/cohere/test_model_cohere.py @@ -18,7 +18,7 @@ filter_headers=['authorization'], ) def test_embed_one(): - embed = CohereEmbed(model='embed-english-v2.0') + embed = CohereEmbed(identifier='embed-english-v2.0') resp = embed.predict('Hello world') assert len(resp) == embed.shape[0] @@ -31,7 +31,7 @@ def test_embed_one(): filter_headers=['authorization'], ) def test_embed_batch(): - embed = CohereEmbed(model='embed-english-v2.0') + embed = CohereEmbed(identifier='embed-english-v2.0') resp = embed.predict(['Hello', 'world'], batch_size=1) assert len(resp) == 2 @@ -46,7 +46,7 @@ def test_embed_batch(): filter_headers=['authorization'], ) async def test_async_embed_one(): - embed = CohereEmbed(model='embed-english-v2.0') + embed = CohereEmbed(identifier='embed-english-v2.0') resp = await embed.apredict('Hello world') assert len(resp) == embed.shape[0] @@ -60,7 +60,7 @@ async def test_async_embed_one(): filter_headers=['authorization'], ) async def test_async_embed_batch(): - embed = CohereEmbed(model='embed-english-v2.0') + embed = CohereEmbed(identifier='embed-english-v2.0') resp = await embed.apredict(['Hello', 'world'], batch_size=1) assert len(resp) == 2 @@ -74,7 +74,7 @@ async def test_async_embed_batch(): filter_headers=['authorization'], ) def test_generate(): - e = CohereGenerate(model='base-light', prompt='Hello, {context}') + e = CohereGenerate(identifier='base-light', prompt='Hello, {context}') resp = e.predict('', one=True, context=['world!']) assert isinstance(resp, str) @@ -85,7 +85,7 @@ def test_generate(): filter_headers=['authorization'], ) def test_batch_generate(): - e = CohereGenerate(model='base-light') + e = CohereGenerate(identifier='base-light') resp = e.predict(['Hello, world!'], one=False) assert isinstance(resp, list) @@ -98,7 +98,7 @@ def test_batch_generate(): ) @pytest.mark.asyncio async def test_chat_async(): - e = CohereGenerate(model='base-light', prompt='Hello, {context}') + e = CohereGenerate(identifier='base-light', prompt='Hello, {context}') resp = await e.apredict('', one=True, context=['world!']) assert isinstance(resp, str) @@ -110,7 +110,7 @@ async def test_chat_async(): ) @pytest.mark.asyncio async def test_batch_chat_async(): - e = CohereGenerate(model='base-light') + e = CohereGenerate(identifier='base-light') resp = await e.apredict(['Hello, world!'], one=False) assert isinstance(resp, list) diff --git a/test/integration/ext/openai/test_model_openai.py b/test/integration/ext/openai/test_model_openai.py index 55103562bc..6c5d55df0c 100644 --- a/test/integration/ext/openai/test_model_openai.py +++ b/test/integration/ext/openai/test_model_openai.py @@ -90,7 +90,7 @@ def mock_lru_cache(): @vcr.use_cassette() def test_embed(): - e = OpenAIEmbedding(model='text-embedding-ada-002') + e = OpenAIEmbedding(identifier='text-embedding-ada-002') resp = e.predict('Hello, world!') assert len(resp) == e.shape[0] @@ -99,7 +99,7 @@ def test_embed(): @vcr.use_cassette() def test_batch_embed(): - e = OpenAIEmbedding(model='text-embedding-ada-002') + e = OpenAIEmbedding(identifier='text-embedding-ada-002') resp = e.predict(['Hello', 'world!'], batch_size=1) assert len(resp) == 2 @@ -110,7 +110,7 @@ def test_batch_embed(): @vcr.use_cassette() @pytest.mark.asyncio async def test_embed_async(): - e = OpenAIEmbedding(model='text-embedding-ada-002') + e = OpenAIEmbedding(identifier='text-embedding-ada-002') resp = await e.apredict('Hello, world!') assert len(resp) == e.shape[0] @@ -120,7 +120,7 @@ async def test_embed_async(): @vcr.use_cassette() @pytest.mark.asyncio async def test_batch_embed_async(): - e = OpenAIEmbedding(model='text-embedding-ada-002') + e = OpenAIEmbedding(identifier='text-embedding-ada-002') resp = await e.apredict(['Hello', 'world!'], batch_size=1) assert len(resp) == 2 @@ -130,7 +130,7 @@ async def test_batch_embed_async(): @vcr.use_cassette() def test_chat(): - e = OpenAIChatCompletion(model='gpt-3.5-turbo', prompt='Hello, {context}') + e = OpenAIChatCompletion(identifier='gpt-3.5-turbo', prompt='Hello, {context}') resp = e.predict('', one=True, context=['world!']) assert isinstance(resp, str) @@ -138,7 +138,7 @@ def test_chat(): @vcr.use_cassette() def test_batch_chat(): - e = OpenAIChatCompletion(model='gpt-3.5-turbo') + e = OpenAIChatCompletion(identifier='gpt-3.5-turbo') resp = e.predict(['Hello, world!'], one=False) assert isinstance(resp, list) @@ -148,7 +148,7 @@ def test_batch_chat(): @vcr.use_cassette() @pytest.mark.asyncio async def test_chat_async(): - e = OpenAIChatCompletion(model='gpt-3.5-turbo', prompt='Hello, {context}') + e = OpenAIChatCompletion(identifier='gpt-3.5-turbo', prompt='Hello, {context}') resp = await e.apredict('', one=True, context=['world!']) assert isinstance(resp, str) @@ -157,7 +157,7 @@ async def test_chat_async(): @vcr.use_cassette() @pytest.mark.asyncio async def test_batch_chat_async(): - e = OpenAIChatCompletion(model='gpt-3.5-turbo') + e = OpenAIChatCompletion(identifier='gpt-3.5-turbo') resp = await e.apredict(['Hello, world!'], one=False) assert isinstance(resp, list) @@ -167,7 +167,8 @@ async def test_batch_chat_async(): @vcr.use_cassette() def test_create_url(): e = OpenAIImageCreation( - model='dall-e', prompt='a close up, studio photographic portrait of a {context}' + identifier='dall-e', + prompt='a close up, studio photographic portrait of a {context}', ) resp = e.predict('', one=True, response_format='url', context=['cat']) @@ -178,7 +179,7 @@ def test_create_url(): @vcr.use_cassette() def test_create_url_batch(): e = OpenAIImageCreation( - model='dall-e', prompt='a close up, studio photographic portrait of a' + identifier='dall-e', prompt='a close up, studio photographic portrait of a' ) resp = e.predict(['cat', 'dog'], response_format='url') @@ -191,7 +192,8 @@ def test_create_url_batch(): @pytest.mark.asyncio async def test_create_async(): e = OpenAIImageCreation( - model='dall-e', prompt='a close up, studio photographic portrait of a {context}' + identifier='dall-e', + prompt='a close up, studio photographic portrait of a {context}', ) resp = await e.apredict('', one=True, context=['cat']) @@ -205,7 +207,8 @@ async def test_create_async(): @pytest.mark.asyncio async def test_create_url_async(): e = OpenAIImageCreation( - model='dall-e', prompt='a close up, studio photographic portrait of a {context}' + identifier='dall-e', + prompt='a close up, studio photographic portrait of a {context}', ) resp = await e.apredict('', one=True, response_format='url', context=['cat']) @@ -217,7 +220,7 @@ async def test_create_url_async(): @pytest.mark.asyncio async def test_create_url_async_batch(): e = OpenAIImageCreation( - model='dall-e', prompt='a close up, studio photographic portrait of a' + identifier='dall-e', prompt='a close up, studio photographic portrait of a' ) resp = await e.apredict(['cat', 'dog'], response_format='url') @@ -229,7 +232,7 @@ async def test_create_url_async_batch(): @vcr.use_cassette() def test_edit_url(): e = OpenAIImageEdit( - model='dall-e', prompt='A celebration party at the launch of {context}' + identifier='dall-e', prompt='A celebration party at the launch of {context}' ) with open('test/material/data/rickroll.png', 'rb') as f: buffer = io.BytesIO(f.read()) @@ -243,7 +246,7 @@ def test_edit_url(): @vcr.use_cassette() def test_edit_url_batch(): e = OpenAIImageEdit( - model='dall-e', prompt='A celebration party at the launch of superduperdb' + identifier='dall-e', prompt='A celebration party at the launch of superduperdb' ) with open('test/material/data/rickroll.png', 'rb') as f: buffer_one = io.BytesIO(f.read()) @@ -264,7 +267,7 @@ def test_edit_url_batch(): @pytest.mark.asyncio async def test_edit_async(): e = OpenAIImageEdit( - model='dall-e', prompt='A celebration party at the launch of {context}' + identifier='dall-e', prompt='A celebration party at the launch of {context}' ) with open('test/material/data/rickroll.png', 'rb') as f: buffer = io.BytesIO(f.read()) @@ -281,7 +284,7 @@ async def test_edit_async(): @pytest.mark.asyncio async def test_edit_url_async(): e = OpenAIImageEdit( - model='dall-e', prompt='A celebration party at the launch of {context}' + identifier='dall-e', prompt='A celebration party at the launch of {context}' ) with open('test/material/data/rickroll.png', 'rb') as f: buffer = io.BytesIO(f.read()) @@ -298,7 +301,7 @@ async def test_edit_url_async(): @pytest.mark.asyncio async def test_edit_url_async_batch(): e = OpenAIImageEdit( - model='dall-e', prompt='A celebration party at the launch of superduperdb' + identifier='dall-e', prompt='A celebration party at the launch of superduperdb' ) with open('test/material/data/rickroll.png', 'rb') as f: buffer_one = io.BytesIO(f.read()) @@ -324,7 +327,7 @@ def test_transcribe(): 'i have some advice for you. write all text in lower-case.' 'only make an exception for the following words: {context}' ) - e = OpenAIAudioTranscription(model='whisper-1', prompt=prompt) + e = OpenAIAudioTranscription(identifier='whisper-1', prompt=prompt) resp = e.predict(buffer, one=True, context=['United States']) buffer.close() @@ -341,7 +344,7 @@ def test_batch_transcribe(): buffer2 = io.BytesIO(f.read()) buffer2.name = 'test.wav' - e = OpenAIAudioTranscription(model='whisper-1') + e = OpenAIAudioTranscription(identifier='whisper-1') resp = e.predict([buffer, buffer2], one=False, batch_size=1) buffer.close() @@ -360,7 +363,7 @@ async def test_transcribe_async(): 'i have some advice for you. write all text in lower-case.' 'only make an exception for the following words: {context}' ) - e = OpenAIAudioTranscription(model='whisper-1', prompt=prompt) + e = OpenAIAudioTranscription(identifier='whisper-1', prompt=prompt) resp = await e.apredict(buffer, one=True, context=['United States']) buffer.close() @@ -377,7 +380,7 @@ async def test_batch_transcribe_async(): with open('test/material/data/test.wav', 'rb') as f: buffer2 = io.BytesIO(f.read()) buffer2.name = 'test1.wav' - e = OpenAIAudioTranscription(model='whisper-1') + e = OpenAIAudioTranscription(identifier='whisper-1') resp = await e.apredict([buffer, buffer2], one=False, batch_size=1) buffer.close() @@ -396,7 +399,7 @@ def test_translate(): 'i have some advice for you. write all text in lower-case.' 'only make an exception for the following words: {context}' ) - e = OpenAIAudioTranslation(model='whisper-1', prompt=prompt) + e = OpenAIAudioTranslation(identifier='whisper-1', prompt=prompt) resp = e.predict(buffer, one=True, context=['Emmerich']) buffer.close() @@ -413,7 +416,7 @@ def test_batch_translate(): buffer2 = io.BytesIO(f.read()) buffer2.name = 'test.wav' - e = OpenAIAudioTranslation(model='whisper-1') + e = OpenAIAudioTranslation(identifier='whisper-1') resp = e.predict([buffer, buffer2], one=False, batch_size=1) buffer.close() @@ -432,7 +435,7 @@ async def test_translate_async(): 'i have some advice for you. write all text in lower-case.' 'only make an exception for the following words: {context}' ) - e = OpenAIAudioTranslation(model='whisper-1', prompt=prompt) + e = OpenAIAudioTranslation(identifier='whisper-1', prompt=prompt) resp = await e.apredict(buffer, one=True, context=['Emmerich']) buffer.close() @@ -449,7 +452,7 @@ async def test_batch_translate_async(): with open('test/material/data/german.wav', 'rb') as f: buffer2 = io.BytesIO(f.read()) buffer2.name = 'test1.wav' - e = OpenAIAudioTranslation(model='whisper-1') + e = OpenAIAudioTranslation(identifier='whisper-1') resp = await e.apredict([buffer, buffer2], one=False, batch_size=1) buffer.close() diff --git a/test/unittest/backends/ibis/test_query.py b/test/unittest/backends/ibis/test_query.py index 42eff02258..e3a0484c58 100644 --- a/test/unittest/backends/ibis/test_query.py +++ b/test/unittest/backends/ibis/test_query.py @@ -92,7 +92,9 @@ def test_renamings(duckdb): def test_serialize_deserialize(): from superduperdb.backends.ibis.query import Table - t = Table('test', 'id') + t = Table( + 'test', primary_id='id', schema=Schema('my-schema', fields={'x': dtype(str)}) + ) q = t.filter(t.id == 1).select(t.id, t.x) diff --git a/test/unittest/base/test_datalayer.py b/test/unittest/base/test_datalayer.py index d8f3aeaf5f..c06db35a4a 100644 --- a/test/unittest/base/test_datalayer.py +++ b/test/unittest/base/test_datalayer.py @@ -33,9 +33,8 @@ n_data_points = 250 -@dc.dataclass +@dc.dataclass(kw_only=True) class TestComponent(Component): - identifier: str version: Optional[int] = None type_id: str = 'test-component' is_on_create: bool = False @@ -275,7 +274,7 @@ def test_remove_component_with_clean_up(db): ) def test_remove_component_from_data_layer_dict(db): # Test component is deleted from datalayer - test_encoder = Encoder(identifier='test_encoder', version=0) + test_encoder = Encoder(identifier='test_encoder') db.add(test_encoder) db._remove_component_version('encoder', 'test_encoder', 0, force=True) with pytest.raises(FileNotFoundError): @@ -351,14 +350,14 @@ def test_remove_not_exist_component(db): def test_show(db): db.add( [ - TestComponent(identifier='a1', version=0), - TestComponent(identifier='a2', version=1), - TestComponent(identifier='a3', version=2), - TestComponent(identifier='b', version=0), - TestComponent(identifier='b', version=1), - TestComponent(identifier='b', version=2), - Encoder(identifier='c1', version=0), - Encoder(identifier='c2', version=0), + TestComponent(identifier='a1'), + TestComponent(identifier='a2'), + TestComponent(identifier='a3'), + TestComponent(identifier='b'), + TestComponent(identifier='b'), + TestComponent(identifier='b'), + Encoder(identifier='c1'), + Encoder(identifier='c2'), ] ) @@ -404,7 +403,6 @@ def test_predict(db: Datalayer): identifier='model3', encoder=Encoder( identifier='test-encoder', - version=0, encoder=lambda x: torch.argmax(x, dim=1), ), ), @@ -482,19 +480,14 @@ def test_get_context(db): "db", [DBConfig.mongodb_empty, DBConfig.sqldb_empty], indirect=True ) def test_load(db): + m1 = Model(object=lambda x: x, identifier='m1', encoder=dtype('int32')) db.add( [ - Encoder(identifier='e1', version=0), - Encoder(identifier='e2', version=0), - Model( - object=lambda x: x, identifier='m1', version=0, encoder=dtype('int32') - ), - Model( - object=lambda x: x, identifier='m1', version=1, encoder=dtype('int32') - ), - Model( - object=lambda x: x, identifier='m2', version=0, encoder=dtype('int32') - ), + Encoder(identifier='e1'), + Encoder(identifier='e2'), + m1, + Model(object=lambda x: x, identifier='m1', encoder=dtype('int32')), + m1, ] ) @@ -592,9 +585,9 @@ def test_replace(db): model = Model( object=lambda x: x + 1, identifier='m', - version=0, encoder=Encoder(identifier='base'), ) + model.version = 0 with pytest.raises(Exception): db.replace(model) @@ -603,7 +596,8 @@ def test_replace(db): assert db.load('model', 'm').predict([1]) == [2] # replace the 0 version of the model - new_model = Model(object=lambda x: x + 2, identifier='m', version=0) + new_model = Model(object=lambda x: x + 2, identifier='m') + new_model.version = 0 db.replace(new_model) assert db.load('model', 'm').predict([1]) == [3] diff --git a/test/unittest/component/test_model.py b/test/unittest/component/test_model.py index 932331cba2..f710a6682a 100644 --- a/test/unittest/component/test_model.py +++ b/test/unittest/component/test_model.py @@ -1,3 +1,4 @@ +import inspect import random from test.db_config import DBConfig from unittest.mock import MagicMock, patch @@ -34,7 +35,8 @@ def test_tc_type_id(): def test_tc_get_method(): - config = _TrainingConfiguration('config', {'param1': 'value1'}, 1) + config = _TrainingConfiguration('config', kwargs={'param1': 'value1'}) + config.version = 1 assert config.get('identifier') == 'config' assert config.get('param1') == 'value1' @@ -44,7 +46,8 @@ def test_tc_get_method(): assert config.get('non_existent', 'default_value') == 'default_value' # First get the properties of the instance - config = _TrainingConfiguration('config', {'version': 2}, 1) + config = _TrainingConfiguration('config', kwargs={'version': 2}) + config.version = 1 assert config.get('version') == 1 @@ -82,7 +85,11 @@ class TestModel(Component, _Predictor): @pytest.fixture def predict_mixin(request) -> _Predictor: cls_ = getattr(request, 'param', _Predictor) - predict_mixin = cls_() + + if 'identifier' in inspect.signature(cls_).parameters: + predict_mixin = cls_(identifier='test') + else: + predict_mixin = cls_() predict_mixin.identifier = 'test' predict_mixin.to_call = to_call predict_mixin.preprocess = Artifact(preprocess) @@ -343,54 +350,41 @@ def test_pm_predict_with_select_ids(predict_mock, predict_mixin): def test_model_init(): # Check all the object are converted to Artifact obj = object() - model = Model('test', obj) + model = Model('test', object=obj) assert isinstance(model.object, Artifact) assert model.object.artifact is obj preprocess = object() - model = Model('test', obj, preprocess=preprocess) + model = Model('test', object=obj, preprocess=preprocess) assert isinstance(model.preprocess, Artifact) assert model.preprocess.artifact is preprocess postprocess = object() - model = Model('test', obj, postprocess=postprocess) + model = Model('test', object=obj, postprocess=postprocess) assert isinstance(model.postprocess, Artifact) assert model.postprocess.artifact is postprocess - obj = object() - model = Model('test', obj) - assert model.to_call == model.object.artifact - - # Check the predict method is set correctly - class Obj: - def predict(self, x): - return x - - obj = Obj() - model = Model('test', obj, predict_method='predict') - assert model.to_call == model.object.artifact.predict - # Check the model_to_device_method is set correctly class SubModel(Model): def to(self, device): return self - model = SubModel('test', obj, model_to_device_method='to') + model = SubModel('test', object=obj, model_to_device_method='to') assert model._artifact_method == model.to def test_model_child_components(): # Check the child components are empty - model = Model('test', object()) + model = Model('test', object=object()) assert model.child_components == [] # if encoder or training_configuration is set - model = Model('test', object(), encoder=Encoder(identifier='test')) + model = Model('test', object=object(), encoder=Encoder(identifier='test')) assert model.child_components == [('encoder', 'encoder')] model = Model( 'test', - object(), + object=object(), training_configuration=TrainingConfiguration(identifier='test'), ) assert model.child_components == [ @@ -400,7 +394,7 @@ def test_model_child_components(): # if encoder and training_configuration are set model = Model( 'test', - object(), + object=object(), encoder=Encoder(identifier='test'), training_configuration=TrainingConfiguration(identifier='test'), ) @@ -416,13 +410,13 @@ def test_model_on_create(): db.databackend = MagicMock() # Check the encoder is loaded if encoder is string - model = Model('test', object(), encoder='test_encoder') + model = Model('test', object=object(), encoder='test_encoder') with patch.object(db, 'load') as db_load: model.pre_create(db) db_load.assert_called_with('encoder', 'test_encoder') # Check the output_component table is added by datalayer - model = Model('test', object(), encoder=Encoder(identifier='test')) + model = Model('test', object=object(), encoder=Encoder(identifier='test')) output_component = MagicMock() db.databackend.create_model_table_or_collection.return_value = output_component with patch.object(db, 'add') as db_load: @@ -431,7 +425,7 @@ def test_model_on_create(): def test_model_append_metrics(): - model = Model('test', object()) + model = Model('test', object=object()) metric_values = {'acc': 0.5, 'loss': 0.5} @@ -450,7 +444,7 @@ def test_model_append_metrics(): def test_model_validate(mock_validate): # Check the metadadata recieves the correct values mock_validate.return_value = {'acc': 0.5, 'loss': 0.5} - model = Model('test', object()) + model = Model('test', object=object()) db = MagicMock(spec=Datalayer) db.metadata = MagicMock() with patch.object(db, 'add') as db_add, patch.object( @@ -475,11 +469,11 @@ def test_model_validate(mock_validate): def test_model_core_validate(model_predict, valid_dataset, db): # Check the validation is done correctly db.add(valid_dataset) - model = Model('test', object(), train_X='x', train_y='y') + model = Model('test', object=object(), train_X='x', train_y='y') model_predict.side_effect = lambda x: [random.randint(0, 1) for _ in range(len(x))] metrics = [ - Metric('f1', f1_score), - Metric('acc', accuracy_score), + Metric('f1', object=f1_score), + Metric('acc', object=accuracy_score), ] results = model._validate(db, valid_dataset.identifier, metrics) assert len(results) == 2 @@ -494,7 +488,7 @@ def test_model_core_validate(model_predict, valid_dataset, db): def test_model_create_fit_job(): # Check the fit job is created correctly - model = Model('test', object()) + model = Model('test', object=object()) job = model.create_fit_job('x') assert job.component_identifier == model.identifier assert job.method_name == 'fit' @@ -503,7 +497,7 @@ def test_model_create_fit_job(): def test_model_fit(valid_dataset): # Check the logic of the fit method, the mock method was tested above - model = Model('test', object()) + model = Model('test', object=object()) with patch.object(model, '_fit') as model_fit: model.fit('x') model_fit.assert_called_once() diff --git a/test/unittest/ext/test_openai.py b/test/unittest/ext/test_openai.py index e95ec4278d..01d37b1ef2 100644 --- a/test/unittest/ext/test_openai.py +++ b/test/unittest/ext/test_openai.py @@ -70,7 +70,7 @@ def open_ai_with_rhymes(db, monkeypatch): def test_retrieve_with_similar_context(open_ai_with_rhymes): db = open_ai_with_rhymes m = OpenAIChatCompletion( - model='gpt-3.5-turbo', + identifier='gpt-3.5-turbo', prompt=( 'Use the following facts to answer this question\n' '{context}\n\n' diff --git a/test/unittest/test_quality.py b/test/unittest/test_quality.py index 612f99a884..05852bab99 100644 --- a/test/unittest/test_quality.py +++ b/test/unittest/test_quality.py @@ -19,7 +19,7 @@ ALLOWABLE_DEFECTS = { 'cast': 15, # Try to keep this down 'noqa': 4, # This should never change - 'type_ignore': 33, # This should only ever increase in obscure edge cases + 'type_ignore': 35, # This should only ever increase in obscure edge cases }