Notebooks
M
MongoDB
MongoDB Haystack Self Reflecting Cooking Agent

MongoDB Haystack Self Reflecting Cooking Agent

agentsartificial-intelligencellmsmongodb-genai-showcasenotebooksgenerative-airag

Open In Colab

Haystack and MongoDB Atlas Agentic RAG pipelines

Haystack and MongoDB enhanced example building on top of the basic RAG pipeline demonstrated on the following notebook. Here the pipelines uses advanced technics of self reflection to advise on reciepes considering prices associated from the MongoDB Atlas vector store.

Install dependencies:

[1]
Collecting haystack-ai
  Downloading haystack_ai-2.2.3-py3-none-any.whl (345 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 345.2/345.2 kB 3.1 MB/s eta 0:00:00
Collecting mongodb-atlas-haystack
  Downloading mongodb_atlas_haystack-0.3.0-py3-none-any.whl (13 kB)
Collecting tiktoken
  Downloading tiktoken-0.7.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.1 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.1/1.1 MB 8.1 MB/s eta 0:00:00
Collecting datasets
  Downloading datasets-2.20.0-py3-none-any.whl (547 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 547.8/547.8 kB 13.6 MB/s eta 0:00:00
Requirement already satisfied: jinja2 in /usr/local/lib/python3.10/dist-packages (from haystack-ai) (3.1.4)
Collecting lazy-imports (from haystack-ai)
  Downloading lazy_imports-0.3.1-py3-none-any.whl (12 kB)
Requirement already satisfied: more-itertools in /usr/local/lib/python3.10/dist-packages (from haystack-ai) (10.1.0)
Requirement already satisfied: networkx in /usr/local/lib/python3.10/dist-packages (from haystack-ai) (3.3)
Requirement already satisfied: numpy<2 in /usr/local/lib/python3.10/dist-packages (from haystack-ai) (1.25.2)
Collecting openai>=1.1.0 (from haystack-ai)
  Downloading openai-1.35.9-py3-none-any.whl (328 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 328.3/328.3 kB 7.2 MB/s eta 0:00:00
Requirement already satisfied: pandas in /usr/local/lib/python3.10/dist-packages (from haystack-ai) (2.0.3)
Collecting posthog (from haystack-ai)
  Downloading posthog-3.5.0-py2.py3-none-any.whl (41 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 41.3/41.3 kB 2.4 MB/s eta 0:00:00
Requirement already satisfied: python-dateutil in /usr/local/lib/python3.10/dist-packages (from haystack-ai) (2.8.2)
Requirement already satisfied: pyyaml in /usr/local/lib/python3.10/dist-packages (from haystack-ai) (6.0.1)
Requirement already satisfied: requests in /usr/local/lib/python3.10/dist-packages (from haystack-ai) (2.31.0)
Requirement already satisfied: tenacity!=8.4.0 in /usr/local/lib/python3.10/dist-packages (from haystack-ai) (8.4.2)
Requirement already satisfied: tqdm in /usr/local/lib/python3.10/dist-packages (from haystack-ai) (4.66.4)
Requirement already satisfied: typing-extensions>=4.7 in /usr/local/lib/python3.10/dist-packages (from haystack-ai) (4.12.2)
Collecting pymongo[srv] (from mongodb-atlas-haystack)
  Downloading pymongo-4.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.2 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.2/1.2 MB 11.2 MB/s eta 0:00:00
Requirement already satisfied: regex>=2022.1.18 in /usr/local/lib/python3.10/dist-packages (from tiktoken) (2024.5.15)
Requirement already satisfied: filelock in /usr/local/lib/python3.10/dist-packages (from datasets) (3.15.4)
Collecting pyarrow>=15.0.0 (from datasets)
  Downloading pyarrow-16.1.0-cp310-cp310-manylinux_2_28_x86_64.whl (40.8 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 40.8/40.8 MB 12.4 MB/s eta 0:00:00
Requirement already satisfied: pyarrow-hotfix in /usr/local/lib/python3.10/dist-packages (from datasets) (0.6)
Collecting dill<0.3.9,>=0.3.0 (from datasets)
  Downloading dill-0.3.8-py3-none-any.whl (116 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 116.3/116.3 kB 10.7 MB/s eta 0:00:00
Collecting requests (from haystack-ai)
  Downloading requests-2.32.3-py3-none-any.whl (64 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 64.9/64.9 kB 4.8 MB/s eta 0:00:00
Collecting xxhash (from datasets)
  Downloading xxhash-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (194 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 194.1/194.1 kB 10.9 MB/s eta 0:00:00
Collecting multiprocess (from datasets)
  Downloading multiprocess-0.70.16-py310-none-any.whl (134 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 134.8/134.8 kB 11.3 MB/s eta 0:00:00
Requirement already satisfied: fsspec[http]<=2024.5.0,>=2023.1.0 in /usr/local/lib/python3.10/dist-packages (from datasets) (2023.6.0)
Requirement already satisfied: aiohttp in /usr/local/lib/python3.10/dist-packages (from datasets) (3.9.5)
Requirement already satisfied: huggingface-hub>=0.21.2 in /usr/local/lib/python3.10/dist-packages (from datasets) (0.23.4)
Requirement already satisfied: packaging in /usr/local/lib/python3.10/dist-packages (from datasets) (24.1)
Requirement already satisfied: aiosignal>=1.1.2 in /usr/local/lib/python3.10/dist-packages (from aiohttp->datasets) (1.3.1)
Requirement already satisfied: attrs>=17.3.0 in /usr/local/lib/python3.10/dist-packages (from aiohttp->datasets) (23.2.0)
Requirement already satisfied: frozenlist>=1.1.1 in /usr/local/lib/python3.10/dist-packages (from aiohttp->datasets) (1.4.1)
Requirement already satisfied: multidict<7.0,>=4.5 in /usr/local/lib/python3.10/dist-packages (from aiohttp->datasets) (6.0.5)
Requirement already satisfied: yarl<2.0,>=1.0 in /usr/local/lib/python3.10/dist-packages (from aiohttp->datasets) (1.9.4)
Requirement already satisfied: async-timeout<5.0,>=4.0 in /usr/local/lib/python3.10/dist-packages (from aiohttp->datasets) (4.0.3)
Requirement already satisfied: anyio<5,>=3.5.0 in /usr/local/lib/python3.10/dist-packages (from openai>=1.1.0->haystack-ai) (3.7.1)
Requirement already satisfied: distro<2,>=1.7.0 in /usr/lib/python3/dist-packages (from openai>=1.1.0->haystack-ai) (1.7.0)
Collecting httpx<1,>=0.23.0 (from openai>=1.1.0->haystack-ai)
  Downloading httpx-0.27.0-py3-none-any.whl (75 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 75.6/75.6 kB 6.7 MB/s eta 0:00:00
Requirement already satisfied: pydantic<3,>=1.9.0 in /usr/local/lib/python3.10/dist-packages (from openai>=1.1.0->haystack-ai) (2.7.4)
Requirement already satisfied: sniffio in /usr/local/lib/python3.10/dist-packages (from openai>=1.1.0->haystack-ai) (1.3.1)
Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests->haystack-ai) (3.3.2)
Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests->haystack-ai) (3.7)
Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests->haystack-ai) (2.0.7)
Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests->haystack-ai) (2024.6.2)
Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from jinja2->haystack-ai) (2.1.5)
Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.10/dist-packages (from pandas->haystack-ai) (2023.4)
Requirement already satisfied: tzdata>=2022.1 in /usr/local/lib/python3.10/dist-packages (from pandas->haystack-ai) (2024.1)
Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.10/dist-packages (from python-dateutil->haystack-ai) (1.16.0)
Collecting monotonic>=1.5 (from posthog->haystack-ai)
  Downloading monotonic-1.6-py2.py3-none-any.whl (8.2 kB)
Collecting backoff>=1.10.0 (from posthog->haystack-ai)
  Downloading backoff-2.2.1-py3-none-any.whl (15 kB)
WARNING: pymongo 4.8.0 does not provide the extra 'srv'
Collecting dnspython<3.0.0,>=1.16.0 (from pymongo[srv]->mongodb-atlas-haystack)
  Downloading dnspython-2.6.1-py3-none-any.whl (307 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 307.7/307.7 kB 22.3 MB/s eta 0:00:00
Requirement already satisfied: exceptiongroup in /usr/local/lib/python3.10/dist-packages (from anyio<5,>=3.5.0->openai>=1.1.0->haystack-ai) (1.2.1)
Collecting httpcore==1.* (from httpx<1,>=0.23.0->openai>=1.1.0->haystack-ai)
  Downloading httpcore-1.0.5-py3-none-any.whl (77 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 77.9/77.9 kB 7.6 MB/s eta 0:00:00
Collecting h11<0.15,>=0.13 (from httpcore==1.*->httpx<1,>=0.23.0->openai>=1.1.0->haystack-ai)
  Downloading h11-0.14.0-py3-none-any.whl (58 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 58.3/58.3 kB 4.3 MB/s eta 0:00:00
Requirement already satisfied: annotated-types>=0.4.0 in /usr/local/lib/python3.10/dist-packages (from pydantic<3,>=1.9.0->openai>=1.1.0->haystack-ai) (0.7.0)
Requirement already satisfied: pydantic-core==2.18.4 in /usr/local/lib/python3.10/dist-packages (from pydantic<3,>=1.9.0->openai>=1.1.0->haystack-ai) (2.18.4)
Installing collected packages: monotonic, xxhash, requests, pyarrow, lazy-imports, h11, dnspython, dill, backoff, tiktoken, pymongo, posthog, multiprocess, httpcore, httpx, openai, datasets, haystack-ai, mongodb-atlas-haystack
  Attempting uninstall: requests
    Found existing installation: requests 2.31.0
    Uninstalling requests-2.31.0:
      Successfully uninstalled requests-2.31.0
  Attempting uninstall: pyarrow
    Found existing installation: pyarrow 14.0.2
    Uninstalling pyarrow-14.0.2:
      Successfully uninstalled pyarrow-14.0.2
ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
cudf-cu12 24.4.1 requires pyarrow<15.0.0a0,>=14.0.1, but you have pyarrow 16.1.0 which is incompatible.
google-colab 1.0.0 requires requests==2.31.0, but you have requests 2.32.3 which is incompatible.
ibis-framework 8.0.0 requires pyarrow<16,>=2, but you have pyarrow 16.1.0 which is incompatible.
Successfully installed backoff-2.2.1 datasets-2.20.0 dill-0.3.8 dnspython-2.6.1 h11-0.14.0 haystack-ai-2.2.3 httpcore-1.0.5 httpx-0.27.0 lazy-imports-0.3.1 mongodb-atlas-haystack-0.3.0 monotonic-1.6 multiprocess-0.70.16 openai-1.35.9 posthog-3.5.0 pyarrow-16.1.0 pymongo-4.8.0 requests-2.32.3 tiktoken-0.7.0 xxhash-3.4.1

Setup MongoDB Atlas connection and Open AI

  • Set the MongoDB connection string. Follow the steps here to get the connection string from the Atlas UI. If you wish to use google collab we recommend to allow access on Atlas Network tab to 0.0.0.0/0 so the notebook node can access the database.

  • Set the OpenAI API key. Steps to obtain an API key as here

[2]
[3]
Enter your MongoDB connection string:··········
[4]
Enter your Open AI Key:··········

Create vector search index on collection

Follow this tutorial to create a vector index on database: haystack_test collection test_collection.

Verify that the index name is vector_index and the syntax specify:

	{
  "fields": [
    {
      "type": "vector",
      "path": "embedding",
      "numDimensions": 1536,
      "similarity": "cosine"
    }
  ]
}

Setup vector store to load documents:

[5]

Build the writer pipeline to load documnets

[7]
Calculating embeddings: 100%|██████████| 3/3 [00:01<00:00,  2.36it/s]
{'doc_embedder': {'meta': {'model': 'text-embedding-3-small',
,   'usage': {'prompt_tokens': 1456, 'total_tokens': 1456}}},
, 'doc_writer': {'documents_written': 81}}

Build a Pipeline to have

First lets add prices to the augmenting considerations by enhancing our prompt template with Price: {{ doc.meta['price']}}

[8]
<haystack.core.pipeline.pipeline.Pipeline object at 0x7d71d81b9ea0>
,🚅 Components
,  - text_embedder: OpenAITextEmbedder
,  - retriever: MongoDBAtlasEmbeddingRetriever
,  - prompt_builder: PromptBuilder
,  - llm: OpenAIGenerator
,🛤️ Connections
,  - text_embedder.embedding -> retriever.query_embedding (List[float])
,  - retriever.documents -> prompt_builder.documents (List[Document])
,  - prompt_builder.prompt -> llm.prompt (str)
[9]
Sure! Let's create a delicious lasagna recipe for you. We will use common lasagna ingredients for a classic lasagna recipe with a bit of veggie twist. Here is the recipe:

### Classic Veggie Lasagna Recipe

#### Ingredients:
- Whole Wheat Lasagna Sheets – $3.00
- Marinara Sauce – $3.50
- Tofu Ricotta – $3.00
- Zucchini Slices – $2.50
- Spinach – $2.00
- Parmesan Cheese – $4.00
- Garlic Paste – $3.00
- Bell Peppers – $2.50
- Cottage Cheese – $2.50

#### Steps:
1. **Prepare the Vegetables:**
   - Preheat your oven to 375°F (190°C).
   - Slice the zucchini and bell peppers thinly.
   - In a skillet, sauté the zucchini slices, bell peppers, and garlic paste over medium heat until they are tender.
   
2. **Prepare the Spinach:**
   - Wash the spinach thoroughly.
   - In a separate pan, sauté the spinach in a little water until wilted. Drain any excess water.
   
3. **Cook the Lasagna Sheets:**
   - Bring a large pot of salted water to a boil.
   - Cook the whole wheat lasagna sheets according to the package instructions until they are al dente.
   - Drain and lay them flat on a clean surface to prevent sticking.

4. **Layer the Lasagna:**
   - Spread a thin layer of marinara sauce on the bottom of a baking dish.
   - Place a layer of lasagna sheets over the sauce.
   - Spread a generous layer of tofu ricotta over the lasagna sheets.
   - Add a layer of sautéed vegetables (zucchini, bell peppers, garlic) and wilted spinach.
   - Sprinkle cottage cheese on top of the veggies.
   - Add another layer of marinara sauce and repeat the layers.
   - Finish with a final layer of lasagna sheets, a generous spread of marinara sauce, and a final sprinkle of parmesan cheese.
   
5. **Bake the Lasagna:**
   - Cover the baking dish with aluminum foil.
   - Bake in the preheated oven for 25 minutes.
   - Remove the foil and bake for an additional 15 minutes or until the top is golden and bubbly.
   
6. **Let it Cool:**
   - Remove the lasagna from the oven and let it rest for about 10 minutes before slicing and serving.

#### Cost:
1. Whole Wheat Lasagna Sheets: $3.00
2. Marinara Sauce: $3.50
3. Tofu Ricotta: $3.00
4. Zucchini Slices: $2.50
5. Spinach: $2.00
6. Parmesan Cheese: $4.00
7. Garlic Paste: $3.00
8. Bell Peppers: $2.50
9. Cottage Cheese: $2.50

**Total Cost:** $26.00

Enjoy your homemade classic veggie lasagna! This recipe is perfect for a family dinner or meal prep for the week.

Make it cheaper with self-reflection!

Here the agentic workflow is built around self reflection of the LLM to reconsider the suggested set of ingridiants in order to find the cheapest reciepe possible.

[10]
Collecting colorama
  Downloading colorama-0.4.6-py2.py3-none-any.whl (25 kB)
Installing collected packages: colorama
Successfully installed colorama-0.4.6
[27]
[14]
<haystack.core.pipeline.pipeline.Pipeline object at 0x7d71d3d01450>
,🚅 Components
,  - text_embedder: OpenAITextEmbedder
,  - retriever: MongoDBAtlasEmbeddingRetriever
,  - prompt_builder: PromptBuilder
,  - checker: RecipeChecker
,  - llm: OpenAIGenerator
,🛤️ Connections
,  - text_embedder.embedding -> retriever.query_embedding (List[float])
,  - retriever.documents -> prompt_builder.documents (List[Document])
,  - prompt_builder.prompt -> llm.prompt (str)
,  - checker.recipe_to_check -> prompt_builder.recipe_to_check (str)
,  - llm.replies -> checker.replies (List[str])
[ ]
Output

As you can see the pipeline will loop through itself to find a more efficient reciepe.

[15]
Not done yet, could make recipe more efficient
Not done yet, could make recipe more efficient
Not done yet, could make recipe more efficient
It appears that the previously generated recipe was labeled as "B," but without seeing the content of recipe B, I can't tell whether it's the most efficient and cheap way to cook lasagna. Therefore, I will provide a new lasagna recipe that aims to balance cost efficiency and deliciousness.

Let's create a simple yet flavorful lasagna using some of the ingredients you have listed. We'll go for a classic vegetarian lasagna, which tends to be slightly more cost-effective than one containing meat.

### Vegetarian Lasagna Recipe

#### Ingredients
1. Whole Wheat Lasagna Sheets - $3.00
2. Tomato Basil Sauce - $3.50
3. Cottage Cheese - $2.50
4. Spinach - $2.00
5. Zucchini Slices - $2.50
6. Parmesan Cheese - $4.00
7. Garlic Paste - $3.00

#### Steps
1. **Preheat Oven**: Preheat your oven to 375°F (190°C).

2. **Prepare Noodles**: Cook the whole wheat lasagna sheets according to the package instructions. Once cooked, drain and set aside.

3. **Prepare Veggies**: Sauté the zucchini slices and spinach over medium heat in a pan with a bit of garlic paste until tender. Set aside.

4. **Layering**: In a baking dish, start by spreading a thin layer of tomato basil sauce.

5. **First Layer**: Place a layer of lasagna sheets on top of the sauce.

6. **Second Layer**: Spread a layer of cottage cheese over the lasagna sheets, followed by some sautéed zucchini and spinach.

7. **Top with Sauce**: Pour more tomato basil sauce over the veggies.

8. **Repeat Layers**: Repeat the layering process until you run out of ingredients, making sure the top layer is lasagna sheets covered with the remaining tomato basil sauce.

9. **Add Cheese**: Sprinkle Parmesan cheese over the top layer of sauce.

10. **Bake**: Cover the baking dish with aluminum foil and bake in the preheated oven for 25 minutes. Remove the foil and bake for an additional 15 minutes until the top is bubbly and slightly browned.

11. **Rest and Serve**: Let the lasagna rest for about 10 minutes before slicing and serving.

#### Cost
- Whole Wheat Lasagna Sheets: $3.00
- Tomato Basil Sauce: $3.50
- Cottage Cheese: $2.50
- Spinach: $2.00
- Zucchini Slices: $2.50
- Parmesan Cheese: $4.00
- Garlic Paste: $3.00

**Total Cost**: $20.50

This recipe is both cost-efficient and straightforward, utilizing simple and readily available ingredients to make a delicious vegetarian lasagna. If this meets your requirements, say ',' and if you need adjustments, you can say 'incomplete' and request modifications.

Use JSON format output

Developers will usually prefer dealing with a JSON format output from LLMs when building applications, as well the ease of storing JSON objects in MongoDB Atlas for fututre store and use.

[26]
<haystack.core.pipeline.pipeline.Pipeline object at 0x7d71d3c83460>
,🚅 Components
,  - text_embedder: OpenAITextEmbedder
,  - retriever: MongoDBAtlasEmbeddingRetriever
,  - prompt_builder: PromptBuilder
,  - checker: RecipeChecker
,  - llm: OpenAIGenerator
,🛤️ Connections
,  - text_embedder.embedding -> retriever.query_embedding (List[float])
,  - retriever.documents -> prompt_builder.documents (List[Document])
,  - prompt_builder.prompt -> llm.prompt (str)
,  - checker.recipe_to_check -> prompt_builder.recipe_to_check (str)
,  - llm.replies -> checker.replies (List[str])
[18]
Requirement already satisfied: pymongo in /usr/local/lib/python3.10/dist-packages (4.8.0)
Requirement already satisfied: dnspython<3.0.0,>=1.16.0 in /usr/local/lib/python3.10/dist-packages (from pymongo) (2.6.1)
[28]
Not done yet, could make recipe more efficient
{
  "markdown_text": "### Lasagna Recipe\n\n#### Ingredients\n- 1 pack of Whole Wheat Lasagna Sheets ($3.00)\n- 1 jar of Tomato Basil Sauce ($3.50)\n- 1 pack of Tofu Ricotta ($3.00)\n- 1 pack of Spinach ($2.00)\n- 1 pack of Parmesan Cheese ($4.00)\n- 1 pack of Zucchini Slices ($2.50)\n\n#### Steps\n1. **Preheat Oven**: Preheat your oven to 375°F (190°C).\n2. **Prepare Lasagna Sheets**: Cook the whole wheat lasagna sheets according to the package instructions. Drain and set aside.\n3. **Prepare Tofu Ricotta**: In a bowl, mix the tofu ricotta with some salt and pepper to taste.\n4. **Layering**: In a baking dish, spread a thin layer of tomato basil sauce. Place a layer of lasagna sheets on top. Spread a layer of tofu ricotta, followed by a layer of spinach and zucchini slices. Repeat the layers until all ingredients are used, ending with a layer of lasagna sheets.\n5. **Top with Cheese**: Sprinkle the top layer with grated Parmesan cheese.\n6. **Bake**: Cover the baking dish with aluminum foil and bake in the preheated oven for 25 minutes. Remove the foil and bake for an additional 20 minutes, or until the top is golden and bubbly.\n7. **Serve**: Let the lasagna cool for a few minutes before slicing and serving.\n\n#### Cost\n- Whole Wheat Lasagna Sheets: $3.00\n- Tomato Basil Sauce: $3.50\n- Tofu Ricotta: $3.00\n- Spinach: $2.00\n- Parmesan Cheese: $4.00\n- Zucchini Slices: $2.50\n\n**Total Cost**: $18.00",
  "checker_status": "DONE",
  "ingredients": [
    {
      "name": "Whole Wheat Lasagna Sheets",
      "price": 3.00
    },
    {
      "name": "Tomato Basil Sauce",
      "price": 3.50
    },
    {
      "name": "Tofu Ricotta",
      "price": 3.00
    },
    {
      "name": "Spinach",
      "price": 2.00
    },
    {
      "name": "Parmesan Cheese",
      "price": 4.00
    },
    {
      "name": "Zucchini Slices",
      "price": 2.50
    }
  ]
}
InsertOneResult(ObjectId('6684f3d4829008e4fb597fbc'), acknowledged=True)