docs: document the move of the aerospike vector store integration to langchain-aerospike vec-595 (#31156)

**Description:** The Aerospike Vector Search vector store integration
has moved out of langchain-community and to its own repository,
https://github.com/aerospike/langchain-aerospike. This PR updates
langchain documentation to reference it.


If no one reviews your PR within a few days, please @-mention one of
baskaryan, eyurtsev, ccurme, vbarda, hwchase17.
This commit is contained in:
dwelch-spike 2025-05-11 13:30:29 +00:00 committed by GitHub
parent 2ec74fea44
commit 0dee089ba7
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 75 additions and 224 deletions

View File

@ -8,17 +8,19 @@
Install the AVS Python SDK and AVS langchain vector store:
```bash
pip install aerospike-vector-search langchain-community
pip install aerospike-vector-search langchain-aerospike
```
See the documentation for the Ptyhon SDK [here](https://aerospike-vector-search-python-client.readthedocs.io/en/latest/index.html).
The documentation for the AVS langchain vector store is [here](https://python.langchain.com/api_reference/community/vectorstores/langchain_community.vectorstores.aerospike.Aerospike.html).
See the documentation for the Python SDK [here](https://aerospike-vector-search-python-client.readthedocs.io/en/latest/index.html).
The documentation for the AVS langchain vector store is [here](https://langchain-aerospike.readthedocs.io/en/latest/).
## Vector Store
To import this vectorstore:
```python
from langchain_community.vectorstores import Aerospike
from langchain_aerospike.vectorstores import Aerospike
```
See a usage example [here](https://python.langchain.com/docs/integrations/vectorstores/aerospike/).

View File

@ -11,8 +11,8 @@
"datasets stored in Aerospike. This new service lives outside of Aerospike and\n",
"builds an index to perform those searches.\n",
"\n",
"This notebook showcases the functionality of the LangChain Aerospike VectorStore\n",
"integration.\n",
"This notebook showcases the functionality of the [LangChain Aerospike VectorStore\n",
"integration](https://github.com/aerospike/langchain-aerospike).\n",
"\n",
"## Install AVS\n",
"\n",
@ -25,11 +25,11 @@
},
{
"cell_type": "code",
"execution_count": 1,
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"AVS_HOST = \"<avs-ip>\"\n",
"AVS_HOST = \"<avs_ip>\"\n",
"AVS_PORT = 5000"
]
},
@ -43,15 +43,25 @@
},
{
"cell_type": "code",
"execution_count": 2,
"execution_count": 5,
"metadata": {
"vscode": {
"languageId": "shellscript"
}
},
"outputs": [],
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m25.0.1\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m25.1.1\u001b[0m\n",
"\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n"
]
}
],
"source": [
"!pip install --upgrade --quiet aerospike-vector-search==3.0.1 langchain-community sentence-transformers langchain"
"!pip install --upgrade --quiet aerospike-vector-search==4.2.0 langchain-aerospike langchain-community sentence-transformers langchain"
]
},
{
@ -65,28 +75,32 @@
},
{
"cell_type": "code",
"execution_count": 3,
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"--2024-05-10 17:28:17-- https://github.com/aerospike/aerospike-vector-search-examples/raw/7dfab0fccca0852a511c6803aba46578729694b5/quote-semantic-search/container-volumes/quote-search/data/quotes.csv.tgz\n",
"Resolving github.com (github.com)... 140.82.116.4\n",
"Connecting to github.com (github.com)|140.82.116.4|:443... connected.\n",
"--2025-05-07 21:06:30-- https://github.com/aerospike/aerospike-vector-search-examples/raw/7dfab0fccca0852a511c6803aba46578729694b5/quote-semantic-search/container-volumes/quote-search/data/quotes.csv.tgz\n",
"Resolving github.com (github.com)... 140.82.116.3\n",
"Connecting to github.com (github.com)|140.82.116.3|:443... connected.\n",
"HTTP request sent, awaiting response... 301 Moved Permanently\n",
"Location: https://github.com/aerospike/aerospike-vector/raw/7dfab0fccca0852a511c6803aba46578729694b5/quote-semantic-search/container-volumes/quote-search/data/quotes.csv.tgz [following]\n",
"--2025-05-07 21:06:30-- https://github.com/aerospike/aerospike-vector/raw/7dfab0fccca0852a511c6803aba46578729694b5/quote-semantic-search/container-volumes/quote-search/data/quotes.csv.tgz\n",
"Reusing existing connection to github.com:443.\n",
"HTTP request sent, awaiting response... 302 Found\n",
"Location: https://raw.githubusercontent.com/aerospike/aerospike-vector-search-examples/7dfab0fccca0852a511c6803aba46578729694b5/quote-semantic-search/container-volumes/quote-search/data/quotes.csv.tgz [following]\n",
"--2024-05-10 17:28:17-- https://raw.githubusercontent.com/aerospike/aerospike-vector-search-examples/7dfab0fccca0852a511c6803aba46578729694b5/quote-semantic-search/container-volumes/quote-search/data/quotes.csv.tgz\n",
"Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.110.133, 185.199.109.133, 185.199.111.133, ...\n",
"Location: https://raw.githubusercontent.com/aerospike/aerospike-vector/7dfab0fccca0852a511c6803aba46578729694b5/quote-semantic-search/container-volumes/quote-search/data/quotes.csv.tgz [following]\n",
"--2025-05-07 21:06:30-- https://raw.githubusercontent.com/aerospike/aerospike-vector/7dfab0fccca0852a511c6803aba46578729694b5/quote-semantic-search/container-volumes/quote-search/data/quotes.csv.tgz\n",
"Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.110.133, 185.199.111.133, 185.199.108.133, ...\n",
"Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.110.133|:443... connected.\n",
"HTTP request sent, awaiting response... 200 OK\n",
"Length: 11597643 (11M) [application/octet-stream]\n",
"Saving to: quotes.csv.tgz\n",
"\n",
"quotes.csv.tgz 100%[===================>] 11.06M 1.94MB/s in 6.1s \n",
"quotes.csv.tgz 100%[===================>] 11.06M 12.7MB/s in 0.9s \n",
"\n",
"2024-05-10 17:28:23 (1.81 MB/s) - quotes.csv.tgz saved [11597643/11597643]\n",
"2025-05-07 21:06:32 (12.7 MB/s) - quotes.csv.tgz saved [11597643/11597643]\n",
"\n"
]
}
@ -106,7 +120,7 @@
},
{
"cell_type": "code",
"execution_count": 4,
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
@ -132,14 +146,14 @@
},
{
"cell_type": "code",
"execution_count": 5,
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"page_content=\"quote: I'm selfish, impatient and a little insecure. I make mistakes, I am out of control and at times hard to handle. But if you can't handle me at my worst, then you sure as hell don't deserve me at my best.\" metadata={'source': './quotes.csv', 'row': 0, 'author': 'Marilyn Monroe', 'category': 'attributed-no-source, best, life, love, mistakes, out-of-control, truth, worst'}\n"
"page_content='quote: I'm selfish, impatient and a little insecure. I make mistakes, I am out of control and at times hard to handle. But if you can't handle me at my worst, then you sure as hell don't deserve me at my best.' metadata={'source': './quotes.csv', 'row': 0, 'author': 'Marilyn Monroe', 'category': 'attributed-no-source, best, life, love, mistakes, out-of-control, truth, worst'}\n"
]
}
],
@ -158,178 +172,18 @@
},
{
"cell_type": "code",
"execution_count": 6,
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "60662fc2676a46a2ac48fbf30d9c85fe",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"modules.json: 0%| | 0.00/349 [00:00<?, ?B/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "319412217d3944488f135c8bf8bca73b",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"config_sentence_transformers.json: 0%| | 0.00/116 [00:00<?, ?B/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "eb020ec2e2f4486294f85c490ef4a387",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"README.md: 0%| | 0.00/10.7k [00:00<?, ?B/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "65d248263e4049bea4f6b554640a6aae",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"sentence_bert_config.json: 0%| | 0.00/53.0 [00:00<?, ?B/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/opt/conda/lib/python3.11/site-packages/huggingface_hub/file_download.py:1132: FutureWarning: `resume_download` is deprecated and will be removed in version 1.0.0. Downloads always resume when possible. If you want to force a new download, use `force_download=True`.\n",
" warnings.warn(\n"
"/var/folders/h5/lm2_c1xs3s32kwp11prnpftw0000gp/T/ipykernel_84638/3255399720.py:6: LangChainDeprecationWarning: The class `HuggingFaceEmbeddings` was deprecated in LangChain 0.2.2 and will be removed in 1.0. An updated version of the class exists in the :class:`~langchain-huggingface package and should be used instead. To use it run `pip install -U :class:`~langchain-huggingface` and import as `from :class:`~langchain_huggingface import HuggingFaceEmbeddings``.\n",
" embedder = HuggingFaceEmbeddings(model_name=\"all-MiniLM-L6-v2\")\n",
"/Users/dwelch/Desktop/everything/projects/langchain/myfork/langchain/.venv/lib/python3.11/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n",
" from .autonotebook import tqdm as notebook_tqdm\n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "c6b09a49fbd84c799ea28ace296406e3",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"config.json: 0%| | 0.00/612 [00:00<?, ?B/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/opt/conda/lib/python3.11/site-packages/huggingface_hub/file_download.py:1132: FutureWarning: `resume_download` is deprecated and will be removed in version 1.0.0. Downloads always resume when possible. If you want to force a new download, use `force_download=True`.\n",
" warnings.warn(\n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "7e649688c67544d5af6bdd883c47d315",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"model.safetensors: 0%| | 0.00/90.9M [00:00<?, ?B/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "de447c7e4df1485ead14efae1faf96d6",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"tokenizer_config.json: 0%| | 0.00/350 [00:00<?, ?B/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "83ad1f289cd04f73aafca01a8e68e63b",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"vocab.txt: 0%| | 0.00/232k [00:00<?, ?B/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "2b612221e29e433cb50a54a6b838f5af",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"tokenizer.json: 0%| | 0.00/466k [00:00<?, ?B/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "1f5f0c29c58642478cd665731728dad0",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"special_tokens_map.json: 0%| | 0.00/112 [00:00<?, ?B/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "dff1d16a5a6d4d20ac39adb5c9425cf6",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"1_Pooling/config.json: 0%| | 0.00/190 [00:00<?, ?B/s]"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
@ -352,7 +206,7 @@
},
{
"cell_type": "code",
"execution_count": 7,
"execution_count": 12,
"metadata": {},
"outputs": [
{
@ -364,9 +218,9 @@
}
],
"source": [
"from aerospike_vector_search import AdminClient, Client, HostPort\n",
"from aerospike_vector_search import Client, HostPort\n",
"from aerospike_vector_search.types import VectorDistanceMetric\n",
"from langchain_community.vectorstores import Aerospike\n",
"from langchain_aerospike.vectorstores import Aerospike\n",
"\n",
"# Here we are using the AVS host and port you configured earlier\n",
"seed = HostPort(host=AVS_HOST, port=AVS_PORT)\n",
@ -381,13 +235,10 @@
"VECTOR_KEY = \"vector\"\n",
"\n",
"client = Client(seeds=seed)\n",
"admin_client = AdminClient(\n",
" seeds=seed,\n",
")\n",
"index_exists = False\n",
"\n",
"# Check if the index already exists. If not, create it\n",
"for index in admin_client.index_list():\n",
"for index in client.index_list():\n",
" if index[\"id\"][\"namespace\"] == NAMESPACE and index[\"id\"][\"name\"] == INDEX_NAME:\n",
" index_exists = True\n",
" print(f\"{INDEX_NAME} already exists. Skipping creation\")\n",
@ -395,7 +246,7 @@
"\n",
"if not index_exists:\n",
" print(f\"{INDEX_NAME} does not exist. Creating index\")\n",
" admin_client.index_create(\n",
" client.index_create(\n",
" namespace=NAMESPACE,\n",
" name=INDEX_NAME,\n",
" vector_field=VECTOR_KEY,\n",
@ -409,8 +260,6 @@
" },\n",
" )\n",
"\n",
"admin_client.close()\n",
"\n",
"docstore = Aerospike.from_documents(\n",
" documents,\n",
" embedder,\n",
@ -432,7 +281,7 @@
},
{
"cell_type": "code",
"execution_count": 8,
"execution_count": 13,
"metadata": {},
"outputs": [
{
@ -440,31 +289,31 @@
"output_type": "stream",
"text": [
"~~~~ Document 0 ~~~~\n",
"auto-generated id: f53589dd-e3e0-4f55-8214-766ca8dc082f\n",
"auto-generated id: 4984b472-8a32-4552-b3eb-f03b31b68031\n",
"author: Carl Sagan, Cosmos\n",
"quote: The Cosmos is all that is or was or ever will be. Our feeblest contemplations of the Cosmos stir us -- there is a tingling in the spine, a catch in the voice, a faint sensation, as if a distant memory, of falling from a height. We know we are approaching the greatest of mysteries.\n",
"~~~~~~~~~~~~~~~~~~~~\n",
"\n",
"~~~~ Document 1 ~~~~\n",
"auto-generated id: dde3e5d1-30b7-47b4-aab7-e319d14e1810\n",
"author: Elizabeth Gilbert\n",
"quote: The love that moves the sun and the other stars.\n",
"~~~~~~~~~~~~~~~~~~~~\n",
"\n",
"~~~~ Document 2 ~~~~\n",
"auto-generated id: fd56575b-2091-45e7-91c1-9efff2fe5359\n",
"auto-generated id: 486c8d87-8dd7-450d-9008-d7549e680ffb\n",
"author: Renee Ahdieh, The Rose & the Dagger\n",
"quote: From the stars, to the stars.\n",
"~~~~~~~~~~~~~~~~~~~~\n",
"\n",
"~~~~ Document 2 ~~~~\n",
"auto-generated id: 4b43b309-ce51-498c-b225-5254383b5b4a\n",
"author: Elizabeth Gilbert\n",
"quote: The love that moves the sun and the other stars.\n",
"~~~~~~~~~~~~~~~~~~~~\n",
"\n",
"~~~~ Document 3 ~~~~\n",
"auto-generated id: 8567ed4e-885b-44a7-b993-e0caf422b3c9\n",
"auto-generated id: af784a10-f498-4570-bf81-2ffdca35440e\n",
"author: Dante Alighieri, Paradiso\n",
"quote: Love, that moves the sun and the other stars\n",
"~~~~~~~~~~~~~~~~~~~~\n",
"\n",
"~~~~ Document 4 ~~~~\n",
"auto-generated id: f868c25e-c54d-48cd-a5a8-14bf402f9ea8\n",
"auto-generated id: b45d5d5e-d818-4206-ae6b-b1d166ea3d43\n",
"author: Thich Nhat Hanh, Teachings on Love\n",
"quote: Through my love for you, I want to express my love for the whole cosmos, the whole of humanity, and all beings. By living with you, I want to learn to love everyone and all species. If I succeed in loving you, I will be able to love everyone and all species on Earth... This is the real message of love.\n",
"~~~~~~~~~~~~~~~~~~~~\n",
@ -502,7 +351,7 @@
},
{
"cell_type": "code",
"execution_count": 9,
"execution_count": 14,
"metadata": {},
"outputs": [
{
@ -510,7 +359,7 @@
"output_type": "stream",
"text": [
"New IDs\n",
"['972846bd-87ae-493b-8ba3-a3d023c03948', '8171122e-cbda-4eb7-a711-6625b120893b', '53b54409-ac19-4d90-b518-d7c40bf5ee5d']\n"
"['adf8064e-9c0e-46e2-b193-169c36432f4c', 'cf65b5ed-a0f4-491a-86ad-dcacc23c2815', '2ef52efd-d9b7-4077-bc14-defdf0b7dd2f']\n"
]
}
],
@ -552,7 +401,7 @@
},
{
"cell_type": "code",
"execution_count": 10,
"execution_count": 15,
"metadata": {},
"outputs": [
{
@ -560,25 +409,25 @@
"output_type": "stream",
"text": [
"~~~~ Document 0 ~~~~\n",
"auto-generated id: 67d5b23f-b2d2-4872-80ad-5834ea08aa64\n",
"auto-generated id: 91e77b39-a528-40c6-a58a-486ae85f991a\n",
"author: John Grogan, Marley and Me: Life and Love With the World's Worst Dog\n",
"quote: Such short little lives our pets have to spend with us, and they spend most of it waiting for us to come home each day. It is amazing how much love and laughter they bring into our lives and even how much closer we become with each other because of them.\n",
"~~~~~~~~~~~~~~~~~~~~\n",
"\n",
"~~~~ Document 1 ~~~~\n",
"auto-generated id: a9b28eb0-a21c-45bf-9e60-ab2b80e988d8\n",
"auto-generated id: c585b4ec-92b5-4579-948c-0529373abc2a\n",
"author: John Grogan, Marley and Me: Life and Love With the World's Worst Dog\n",
"quote: Dogs are great. Bad dogs, if you can really call them that, are perhaps the greatest of them all.\n",
"~~~~~~~~~~~~~~~~~~~~\n",
"\n",
"~~~~ Document 2 ~~~~\n",
"auto-generated id: ee7434c8-2551-4651-8a22-58514980fb4a\n",
"auto-generated id: 5768b31c-fac4-4af7-84b4-fb11bbfcb590\n",
"author: Colleen Houck, Tiger's Curse\n",
"quote: He then put both hands on the door on either side of my head and leaned in close, pinning me against it. I trembled like a downy rabbit caught in the clutches of a wolf. The wolf came closer. He bent his head and began nuzzling my cheek. The problem was…I wanted the wolf to devour me.\n",
"~~~~~~~~~~~~~~~~~~~~\n",
"\n",
"~~~~ Document 3 ~~~~\n",
"auto-generated id: 9170804c-a155-473b-ab93-8a561dd48f91\n",
"auto-generated id: 94f1b9fb-ad57-4f65-b470-7f49dd6c274c\n",
"author: Ray Bradbury\n",
"quote: Stuff your eyes with wonder,\" he said, \"live as if you'd drop dead in ten seconds. See the world. It's more fantastic than any dream made or paid for in factories. Ask no guarantees, ask for no security, there never was such an animal. And if there were, it would be related to the great sloth which hangs upside down in a tree all day every day, sleeping its life away. To hell with that,\" he said, \"shake the tree and knock the great sloth down on his ass.\n",
"~~~~~~~~~~~~~~~~~~~~\n",
@ -607,7 +456,7 @@
},
{
"cell_type": "code",
"execution_count": 11,
"execution_count": 16,
"metadata": {},
"outputs": [
{
@ -615,25 +464,25 @@
"output_type": "stream",
"text": [
"~~~~ Document 0 ~~~~\n",
"auto-generated id: 2c1d6ee1-b742-45ea-bed6-24a1f655c849\n",
"auto-generated id: 6d9e67a6-0427-41e6-9e24-050518120d74\n",
"author: Roy T. Bennett, The Light in the Heart\n",
"quote: Never lose hope. Storms make people stronger and never last forever.\n",
"~~~~~~~~~~~~~~~~~~~~\n",
"\n",
"~~~~ Document 1 ~~~~\n",
"auto-generated id: 5962c2cf-ffb5-4e03-9257-bdd630b5c7e9\n",
"auto-generated id: 7d426e59-7935-4bcf-a676-cbe8dd4860e7\n",
"author: Roy T. Bennett, The Light in the Heart\n",
"quote: Difficulties and adversities viciously force all their might on us and cause us to fall apart, but they are necessary elements of individual growth and reveal our true potential. We have got to endure and overcome them, and move forward. Never lose hope. Storms make people stronger and never last forever.\n",
"~~~~~~~~~~~~~~~~~~~~\n",
"\n",
"~~~~ Document 2 ~~~~\n",
"auto-generated id: 3bbcc4ca-de89-4196-9a46-190a50bf6c47\n",
"auto-generated id: 6ec05e48-d162-440d-8819-001d2f3712f9\n",
"author: Vincent van Gogh, The Letters of Vincent van Gogh\n",
"quote: There is peace even in the storm\n",
"~~~~~~~~~~~~~~~~~~~~\n",
"\n",
"~~~~ Document 3 ~~~~\n",
"auto-generated id: 37d8cf02-fc2f-429d-b2b6-260a05286108\n",
"auto-generated id: d3c3de59-4da4-4ae6-8f6d-83ed905dd320\n",
"author: Edwin Morgan, A Book of Lives\n",
"quote: Valentine WeatherKiss me with rain on your eyelashes,come on, let us sway together,under the trees, and to hell with thunder.\n",
"~~~~~~~~~~~~~~~~~~~~\n",
@ -665,7 +514,7 @@
},
{
"cell_type": "code",
"execution_count": 12,
"execution_count": 17,
"metadata": {},
"outputs": [],
"source": [
@ -684,7 +533,7 @@
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"display_name": ".venv",
"language": "python",
"name": "python3"
},
@ -698,7 +547,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.11.6"
"version": "3.11.12"
}
},
"nbformat": 4,