diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 6edabda0bda71815fdb8e0e84d392c977efeb59b..4c02f30b00dea1077f05dfce976f24a843c12aeb 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -80,7 +80,7 @@ repos:
     rev: v3.0.3
     hooks:
       - id: prettier
-        exclude: llama-index-core/llama_index/core/_static|poetry.lock|llama-index-legacy/llama_index/legacy/_static
+        exclude: llama-index-core/llama_index/core/_static|poetry.lock|llama-index-legacy/llama_index/legacy/_static|docs/docs/api_reference
   - repo: https://github.com/codespell-project/codespell
     rev: v2.2.6
     hooks:
diff --git a/.readthedocs.yaml b/.readthedocs.yaml
index 93f3089f1725362d343165ba3f174a0fdac4c020..6a87c9bc9435b434b9bd0622cf9937f41c82abf8 100644
--- a/.readthedocs.yaml
+++ b/.readthedocs.yaml
@@ -4,22 +4,14 @@
 # Required
 version: 2
 
-# Set the OS, Python version and other tools you might need
+# Set the version of Python and other tools you might need
 build:
   os: ubuntu-22.04
   tools:
-    python: "3.11"
-  commands:
-    - python -mvirtualenv $READTHEDOCS_VIRTUALENV_PATH
-    - python -m pip install --upgrade --no-cache-dir pip setuptools
-    - python -m pip install --upgrade --no-cache-dir sphinx readthedocs-sphinx-ext
-    - python -m pip install --exists-action=w --no-cache-dir -r docs/requirements.txt
-    - cat docs/conf.py
-    - python -m sphinx -T -E -b html -d ./docs/_build/doctrees -D language=en ./docs $READTHEDOCS_OUTPUT/html -j 8
+    python: "3.12"
 
-# Build documentation in the "docs/" directory with Sphinx
-sphinx:
-  configuration: docs/conf.py
+mkdocs:
+  configuration: docs/mkdocs.yml
 
 python:
   install:
diff --git a/docs/.gitignore b/docs/.gitignore
deleted file mode 100644
index eedd89b455ea8f6ae1c18d082189f5f522139f74..0000000000000000000000000000000000000000
--- a/docs/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-api
diff --git a/docs/DOCS_README.md b/docs/DOCS_README.md
index 749229369ff8cd5a58b9149befa57d4cf0ddb632..d5ed4b63ace9535befd50f39007ddc98b8be5dcf 100644
--- a/docs/DOCS_README.md
+++ b/docs/DOCS_README.md
@@ -15,40 +15,28 @@ documentation.
 If you haven't already, clone the LlamaIndex Github repo to a local directory:
 
 ```bash
-git clone https://github.com/jerryjliu/llama_index.git && cd llama_index
+git clone https://github.com/run-llama/llama_index.git && cd llama_index
 ```
 
-Install all dependencies required for building docs (mainly `sphinx` and its extension):
+Install all dependencies required for building docs (mainly `mkdocs` and its extension):
 
 - [Install poetry](https://python-poetry.org/docs/#installation) - this will help you manage package dependencies
 - `poetry shell` - this command creates a virtual environment, which keeps installed packages contained to this project
 - `poetry install --with docs` - this will install all dependencies needed for building docs
 
-Build the sphinx docs:
+Build with mkdocs:
 
 ```bash
 cd docs
-make html
+mkdocs serve
 ```
 
-The docs HTML files are now generated under `docs/_build/html` directory, you can preview
-it locally with the following command:
+And open your browser at http://localhost:8000/ to view the generated docs.
 
-```bash
-python -m http.server 8000 -d _build/html
-```
-
-And open your browser at http://0.0.0.0:8000/ to view the generated docs.
+This hosted version will re-build and update as changes are made to the docs.
 
-##### Watch Docs
+## Config
 
-We recommend using sphinx-autobuild during development, which provides a live-reloading
-server, that rebuilds the documentation and refreshes any open pages automatically when
-changes are saved. This enables a much shorter feedback loop which can help boost
-productivity when writing documentation.
+All config for mkdocs is in the `mkdocs.yml` file.
 
-Simply run the following command from LlamaIndex project's root directory:
-
-```bash
-make watch-docs
-```
+Running the command `python docs/prepare_for_build.py` from the root of the llama-index repo will update the mkdocs.yml API Reference and examples nav with the latest changes, as well as writing new api reference files.
diff --git a/docs/Makefile b/docs/Makefile
deleted file mode 100644
index 8241a9397e901b8883c94e477c71d1765c3480d2..0000000000000000000000000000000000000000
--- a/docs/Makefile
+++ /dev/null
@@ -1,20 +0,0 @@
-# Minimal makefile for Sphinx documentation
-#
-
-# You can set these variables from the command line, and also
-# from the environment for the first two.
-SPHINXOPTS    ?=
-SPHINXBUILD   ?= sphinx-build
-SOURCEDIR     = .
-BUILDDIR      = _build
-
-# Put it first so that "make" without argument is like "make help".
-help:
-	@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
-
-.PHONY: help Makefile
-
-# Catch-all target: route all unknown targets to Sphinx using the new
-# "make mode" option.  $(O) is meant as a shortcut for $(SPHINXOPTS).
-%: Makefile
-	@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) -j 8
diff --git a/docs/api_reference/agents.rst b/docs/api_reference/agents.rst
deleted file mode 100644
index ea3762b2025b9c0e00f03c04f99e41ebbf05f31b..0000000000000000000000000000000000000000
--- a/docs/api_reference/agents.rst
+++ /dev/null
@@ -1,12 +0,0 @@
-.. _Ref-Agents:
-
-Agents
-=================
-
-This doc shows our agent classes - both the high-level and lower-level components.
-
-There are also legacy classes (e.g. `OldOpenAIAgent`, and `OldReActAgent`) that still work but are deprecated.
-
-.. automodule:: llama_index.core.agent
-   :members:
-   :inherited-members:
diff --git a/docs/api_reference/callbacks.rst b/docs/api_reference/callbacks.rst
deleted file mode 100644
index cd728f33f60d1f7f7f06e12dac7d2d801bf71353..0000000000000000000000000000000000000000
--- a/docs/api_reference/callbacks.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-.. _Ref-Node:
-
-Callbacks
-=================
-
-.. automodule:: llama_index.core.callbacks
-   :members:
-   :inherited-members:
diff --git a/docs/api_reference/composability.rst b/docs/api_reference/composability.rst
deleted file mode 100644
index 4e8d2b0885749c7bd030d881f78d55be0dbf78c4..0000000000000000000000000000000000000000
--- a/docs/api_reference/composability.rst
+++ /dev/null
@@ -1,12 +0,0 @@
-.. _Ref-Composability:
-
-Composability
-=============
-
-Below we show the API reference for composable data structures.
-This contains both the `ComposableGraph` class as well as any
-builder classes that generate `ComposableGraph` objects.
-
-.. automodule:: llama_index.core.composability
-   :members:
-   :inherited-members:
diff --git a/docs/api_reference/embeddings.rst b/docs/api_reference/embeddings.rst
deleted file mode 100644
index bd1a45073875c2c433ccbfb05dd331a50a49d9ed..0000000000000000000000000000000000000000
--- a/docs/api_reference/embeddings.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-.. _Ref-Embeddings:
-
-BaseEmbedding
-===============
-
-.. autopydantic_model:: llama_index.core.base.embeddings.base.BaseEmbedding
-   :members:
diff --git a/docs/api_reference/evaluation.rst b/docs/api_reference/evaluation.rst
deleted file mode 100644
index a04a304ea346765f46691532a55117ca1e604736..0000000000000000000000000000000000000000
--- a/docs/api_reference/evaluation.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-.. _Ref-Evaluation:
-
-
-Evaluation
-====
-
-We have modules for both LLM-based evaluation and retrieval-based evaluation.
-
-.. automodule:: llama_index.core.evaluation
-   :members:
-   :inherited-members:
diff --git a/docs/api_reference/example_notebooks.rst b/docs/api_reference/example_notebooks.rst
deleted file mode 100644
index 8fbb2598abd7545c89a0c2ebc9099f6b578fda81..0000000000000000000000000000000000000000
--- a/docs/api_reference/example_notebooks.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-.. _Ref-Example-Notebooks:
-
-Example Notebooks
-=================
-
-We offer a wide variety of example notebooks. They are referenced throughout the documentation.
-
-Example notebooks are found `here <https://github.com/jerryjliu/llama_index/tree/main/docs/examples>`_.
diff --git a/docs/api_reference/index.rst b/docs/api_reference/index.rst
deleted file mode 100644
index 6ad05d3756120563e3c82486e6c32ba2e7067410..0000000000000000000000000000000000000000
--- a/docs/api_reference/index.rst
+++ /dev/null
@@ -1,30 +0,0 @@
-.. _Ref-API_Reference:
-
-API Reference
-=============
-
-API Reference for the ``llama-index`` package.
-
-.. toctree::
-   :maxdepth: 1
-
-   agents.rst
-   callbacks.rst
-   composability.rst
-   evaluation.rst
-   example_notebooks.rst
-   indices.rst
-   instrumentation.rst
-   llms.rst
-   embeddings.rst
-   memory.rst
-   node_postprocessor.rst
-   node.rst
-   playground.rst
-   prompts.rst
-   query.rst
-   readers.rst
-   response.rst
-   service_context.rst
-   storage.rst
-   struct_store.rst
diff --git a/docs/api_reference/indices.rst b/docs/api_reference/indices.rst
deleted file mode 100644
index ecc1cd7ca306ae9a2fe03d28730dd4c15ae385e8..0000000000000000000000000000000000000000
--- a/docs/api_reference/indices.rst
+++ /dev/null
@@ -1,32 +0,0 @@
-.. _Ref-Indices:
-
-Indices
-=======
-
-This doc shows both the overarching class used to represent an index. These
-classes allow for index creation, insertion, and also querying.
-We first show the different index subclasses.
-We then show the base class that all indices inherit from, which contains
-parameters and methods common to all indices.
-
-|
-
-.. toctree::
-   :maxdepth: 1
-   :caption: Index Data Structures
-
-   indices/list.rst
-   indices/table.rst
-   indices/tree.rst
-   indices/vector_store.rst
-   indices/struct_store.rst
-   indices/kg.rst
-   indices/empty.rst
-
-
-Base Index Class
-^^^^^^^^^^^^^^^^
-
-.. automodule:: llama_index.core.indices.base
-   :members:
-   :inherited-members:
diff --git a/docs/api_reference/indices/empty.rst b/docs/api_reference/indices/empty.rst
deleted file mode 100644
index 357642ef76d8544414ea89100f7b6e9f959ab86d..0000000000000000000000000000000000000000
--- a/docs/api_reference/indices/empty.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-.. _Ref-Indices-Empty:
-
-Empty Index
-===========
-
-Building the Empty Index
-
-.. automodule:: llama_index.core.indices.empty
-   :members:
-   :inherited-members:
-   :exclude-members: delete, docstore, index_struct, index_struct_cls
diff --git a/docs/api_reference/indices/kg.rst b/docs/api_reference/indices/kg.rst
deleted file mode 100644
index 17a3339d4c52fbf572768565dee9aa38c239f48e..0000000000000000000000000000000000000000
--- a/docs/api_reference/indices/kg.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-.. _Ref-Indices-Knowledge-Graph:
-
-Knowledge Graph Index
-=====================
-
-Building the Knowledge Graph Index
-
-.. automodule:: llama_index.core.indices.knowledge_graph
-   :members:
-   :inherited-members:
-   :exclude-members: delete, docstore, index_struct, index_struct_cls
diff --git a/docs/api_reference/indices/list.rst b/docs/api_reference/indices/list.rst
deleted file mode 100644
index a4d2f43ab1d89ee312116c0d6182b66d32aeeff9..0000000000000000000000000000000000000000
--- a/docs/api_reference/indices/list.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-.. _Ref-Indices-List:
-
-Summary Index
-==========
-
-Building the Summary Index
-
-.. automodule:: llama_index.core.indices.list
-   :members:
-   :inherited-members:
-   :exclude-members: delete, docstore, index_struct, index_struct_cls
diff --git a/docs/api_reference/indices/struct_store.rst b/docs/api_reference/indices/struct_store.rst
deleted file mode 100644
index 955a47ecee3bc4c0c9e0fee22f84d98b86ede198..0000000000000000000000000000000000000000
--- a/docs/api_reference/indices/struct_store.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-.. _Ref-Indices-StructStore:
-
-Structured Store Index
-======================
-
-.. automodule:: llama_index.core.indices.struct_store
-   :members:
-   :inherited-members:
-   :exclude-members: delete, docstore, index_struct, index_struct_cls
diff --git a/docs/api_reference/indices/table.rst b/docs/api_reference/indices/table.rst
deleted file mode 100644
index b2820ea11e338dfba1932bbb8c83f8a866865a53..0000000000000000000000000000000000000000
--- a/docs/api_reference/indices/table.rst
+++ /dev/null
@@ -1,10 +0,0 @@
-.. _Ref-Indices-Table:
-
-Table Index
-===========
-
-Building the Keyword Table Index
-
-.. automodule:: llama_index.core.indices.keyword_table
-   :members:
-   :inherited-members:
diff --git a/docs/api_reference/indices/tree.rst b/docs/api_reference/indices/tree.rst
deleted file mode 100644
index b908a2e92126a49af705ff0082841c820fc0bfd5..0000000000000000000000000000000000000000
--- a/docs/api_reference/indices/tree.rst
+++ /dev/null
@@ -1,10 +0,0 @@
-.. _Ref-Indices-Tree:
-
-Tree Index
-==========
-
-Building the Tree Index
-
-.. automodule:: llama_index.core.indices.tree
-   :members:
-   :inherited-members:
diff --git a/docs/api_reference/indices/vector_store.rst b/docs/api_reference/indices/vector_store.rst
deleted file mode 100644
index a5b3e5e5446dde4a3e2f5e2dd386cd543e352238..0000000000000000000000000000000000000000
--- a/docs/api_reference/indices/vector_store.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-.. _Ref-Indices-VectorStore:
-
-Vector Store Index
-==================
-
-Below we show the vector store index classes.
-
-Each vector store index class is a combination of a base vector store index
-class and a vector store, shown below.
-
-.. automodule:: llama_index.core.indices.vector_store.base
-   :members:
-   :inherited-members:
-   :exclude-members: delete, docstore, index_struct, index_struct_cls
diff --git a/docs/api_reference/instrumentation.rst b/docs/api_reference/instrumentation.rst
deleted file mode 100644
index 853d4cf360f025cd70beae673835ff9c1b0abb7b..0000000000000000000000000000000000000000
--- a/docs/api_reference/instrumentation.rst
+++ /dev/null
@@ -1,77 +0,0 @@
-Instrumentation
-===============
-
-LlamaIndex contains a simple instrumentation framework that allows you to
-observe events and spans happening in the framework.
-
-Event Handlers
---------------
-
-.. autopydantic_model:: llama_index.core.instrumentation.event_handlers.base.BaseEventHandler
-
-Event Types
------------
-
-.. autopydantic_model:: llama_index.core.instrumentation.events.base.BaseEvent
-
-.. autopydantic_model:: llama_index.core.instrumentation.events.agent.AgentChatWithStepEndEvent
-
-.. autopydantic_model:: llama_index.core.instrumentation.events.agent.AgentChatWithStepStartEvent
-
-.. autopydantic_model:: llama_index.core.instrumentation.events.agent.AgentRunStepEndEvent
-
-.. autopydantic_model:: llama_index.core.instrumentation.events.agent.AgentRunStepStartEvent
-
-.. autopydantic_model:: llama_index.core.instrumentation.events.agent.AgentToolCallEvent
-
-.. autopydantic_model:: llama_index.core.instrumentation.events.chat_engine.StreamChatDeltaReceivedEvent
-
-.. autopydantic_model:: llama_index.core.instrumentation.events.chat_engine.StreamChatEndEvent
-
-.. autopydantic_model:: llama_index.core.instrumentation.events.chat_engine.StreamChatErrorEvent
-
-.. autopydantic_model:: llama_index.core.instrumentation.events.chat_engine.StreamChatStartEvent
-
-.. autopydantic_model:: llama_index.core.instrumentation.events.embedding.EmbeddingEndEvent
-
-.. autopydantic_model:: llama_index.core.instrumentation.events.embedding.EmbeddingStartEvent
-
-.. autopydantic_model:: llama_index.core.instrumentation.events.llm.LLMChatEndEvent
-
-.. autopydantic_model:: llama_index.core.instrumentation.events.llm.LLMChatStartEvent
-
-.. autopydantic_model:: llama_index.core.instrumentation.events.llm.LLMCompletionEndEvent
-
-.. autopydantic_model:: llama_index.core.instrumentation.events.llm.LLMCompletionStartEvent
-
-.. autopydantic_model:: llama_index.core.instrumentation.events.llm.LLMPredictEndEvent
-
-.. autopydantic_model:: llama_index.core.instrumentation.events.llm.LLMPredictStartEvent
-
-.. autopydantic_model:: llama_index.core.instrumentation.events.query.QueryEndEvent
-
-.. autopydantic_model:: llama_index.core.instrumentation.events.query.QueryStartEvent
-
-.. autopydantic_model:: llama_index.core.instrumentation.events.retrieval.RetrievalEndEvent
-
-.. autopydantic_model:: llama_index.core.instrumentation.events.retrieval.RetrievalStartEvent
-
-.. autopydantic_model:: llama_index.core.instrumentation.events.synthesis.GetResponseEndEvent
-
-.. autopydantic_model:: llama_index.core.instrumentation.events.synthesis.GetResponseStartEvent
-
-.. autopydantic_model:: llama_index.core.instrumentation.events.synthesis.SynthesizeEndEvent
-
-.. autopydantic_model:: llama_index.core.instrumentation.events.synthesis.SynthesizeStartEvent
-
-Span Handlers
--------------
-
-.. autopydantic_model:: llama_index.core.instrumentation.span_handlers.base.BaseSpanHandler
-
-.. autopydantic_model:: llama_index.core.instrumentation.span_handlers.simple.SimpleSpanHandler
-
-Spans Types
------------
-
-.. autopydantic_model:: llama_index.core.instrumentation.span.base.BaseSpan
diff --git a/docs/api_reference/llms.rst b/docs/api_reference/llms.rst
deleted file mode 100644
index 0f3d69d037f4571654027204a721d95f7b58e3c2..0000000000000000000000000000000000000000
--- a/docs/api_reference/llms.rst
+++ /dev/null
@@ -1,30 +0,0 @@
-
-.. _Ref-LLMs:
-
-
-LLMs
-====
-
-A large language model (LLM) is a reasoning engine that can complete text,
-chat with users, and follow instructions.
-
-LLM Interface
-^^^^^^^^^^^^^^^^^^^^^^^
-.. autoclass:: llama_index.core.llms.base.LLM
-   :members:
-   :inherited-members:
-
-Schemas
-^^^^^^^
-
-.. autoclass:: llama_index.core.llms.base.MessageRole
-   :members:
-   :inherited-members:
-
-.. autopydantic_model:: llama_index.core.llms.base.ChatMessage
-
-.. autopydantic_model:: llama_index.core.llms.base.ChatResponse
-
-.. autopydantic_model:: llama_index.core.llms.base.CompletionResponse
-
-.. autopydantic_model:: llama_index.core.llms.base.LLMMetadata
diff --git a/docs/api_reference/memory.rst b/docs/api_reference/memory.rst
deleted file mode 100644
index b545900c7e004eca2dbb11902f9d3690d5c13bc8..0000000000000000000000000000000000000000
--- a/docs/api_reference/memory.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-.. _Ref-Memory
-
-Memory
-======
-
-.. automodule:: llama_index.core.memory
-   :members:
-   :inherited-members:
diff --git a/docs/api_reference/multi_modal.rst b/docs/api_reference/multi_modal.rst
deleted file mode 100644
index 917f7d9721a5122d918156212d542dd4f12d094d..0000000000000000000000000000000000000000
--- a/docs/api_reference/multi_modal.rst
+++ /dev/null
@@ -1,55 +0,0 @@
-
-.. _Ref-Multi-Modal-LLMs:
-
-
-Multi-Modal LLMs, Vector Stores, Embeddings, Retriever, and Query Engine
-====
-
-Multi-Modal large language model (LLM) is a Multi-Modal reasoning engine that
-can complete text and image chat with users, and follow instructions.
-
-Multi-Modal LLM Implementations
-^^^^^^^^^^^^^^^^^^^
-.. toctree::
-   :maxdepth: 1
-   :caption: Multi-Modal LLM Implementations
-
-   multi_modal/openai.rst
-   multi_modal/replicate.rst
-
-Multi-Modal LLM Interface
-^^^^^^^^^^^^^^^^^^^^^^^
-.. autoclass:: llama_index.core.multi_modal_llms.base.MultiModalLLM
-   :members:
-   :inherited-members:
-
-Multi-Modal Embedding
-^^^^^^^^^^^^^^^^^^^^^^^
-.. autoclass:: llama_index.core.embeddings.multi_modal_base.MultiModalEmbedding
-   :members:
-   :inherited-members:
-
-Multi-Modal Vector Store Index
-^^^^^^^^^^^^^^^^^^^^^^^
-.. autoclass:: llama_index.core.indices.multi_modal.base.MultiModalVectorStoreIndex
-   :members:
-   :inherited-members:
-
-Multi-Modal Vector Index Retriever
-^^^^^^^^^^^^^^^^^^^^^^^
-.. autoclass:: llama_index.core.indices.multi_modal.retriever.MultiModalVectorIndexRetriever
-   :members:
-   :inherited-members:
-
-Multi-Modal Retriever Interface
-^^^^^^^^^^^^^^^^^^^^^^^
-.. autoclass:: llama_index.core.base.base_multi_modal_retriever.MultiModalRetriever
-   :members:
-   :inherited-members:
-
-
-Multi-Modal Simple Query Engine
-^^^^^^^^^^^^^^^^^^^^^^^
-.. autoclass:: llama_index.core.query_engine.multi_modal.SimpleMultiModalQueryEngine
-   :members:
-   :inherited-members:
diff --git a/docs/api_reference/node.rst b/docs/api_reference/node.rst
deleted file mode 100644
index d79ff28a21bb304c6db1e6f2a4afafae1602bc07..0000000000000000000000000000000000000000
--- a/docs/api_reference/node.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-.. _Ref-Node:
-
-Node
-=================
-
-.. automodapi:: llama_index.core.schema
-   :no-inheritance-diagram:
diff --git a/docs/api_reference/node_postprocessor.rst b/docs/api_reference/node_postprocessor.rst
deleted file mode 100644
index 8ee30c0d191f03d83244418ae31304d2bc2b7f7a..0000000000000000000000000000000000000000
--- a/docs/api_reference/node_postprocessor.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-.. _Ref-Node-Postprocessor:
-
-Node Postprocessors
-===================
-
-.. automodule:: llama_index.core.postprocessor
-   :members:
-   :inherited-members:
diff --git a/docs/api_reference/playground.rst b/docs/api_reference/playground.rst
deleted file mode 100644
index f8953cd067e40563d6b36d7c7ee45834de742ed8..0000000000000000000000000000000000000000
--- a/docs/api_reference/playground.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-.. _Ref-Playground:
-
-Playground
-=================
-
-.. automodule:: llama_index.core.playground.base
-   :members:
-   :inherited-members:
diff --git a/docs/api_reference/prompts.rst b/docs/api_reference/prompts.rst
deleted file mode 100644
index 6e1c3a1969e4ec4ed106f9df8b0ed1ef3ade1021..0000000000000000000000000000000000000000
--- a/docs/api_reference/prompts.rst
+++ /dev/null
@@ -1,38 +0,0 @@
-.. _Prompt-Templates:
-
-Prompt Templates
-=================
-
-These are the reference prompt templates.
-
-We first show links to default prompts.
-
-We then show the base prompt template class and its subclasses.
-
-Default Prompts
-^^^^^^^^^^^^^^^^^
-
-
-* `Completion prompt templates <https://github.com/run-llama/llama_index/blob/main/llama-index-core/llama_index/core/prompts/default_prompts.py>`_.
-* `Chat prompt templates <https://github.com/run-llama/llama_index/blob/main/llama-index-core/llama_index/core/prompts/chat_prompts.py>`_.
-* `Selector prompt templates <https://github.com/run-llama/llama_index/blob/main/llama-index-core/llama_index/core/prompts/default_prompt_selectors.py>`_.
-
-
-
-Prompt Classes
-^^^^^^^^^^^^^^^^^
-
-.. autopydantic_model:: llama_index.core.prompts.base.BasePromptTemplate
-
-.. autopydantic_model:: llama_index.core.prompts.base.PromptTemplate
-
-.. autopydantic_model:: llama_index.core.prompts.base.ChatPromptTemplate
-
-.. autopydantic_model:: llama_index.core.prompts.base.SelectorPromptTemplate
-
-.. autopydantic_model:: llama_index.core.prompts.base.LangchainPromptTemplate
-
-
-Subclass Prompts (deprecated)
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-Deprecated, but still available for reference at `this link <https://github.com/jerryjliu/llama_index/blob/113109365b216428440b19eb23c9fae749d6880a/llama_index/prompts/prompts.py>`_.
diff --git a/docs/api_reference/query.rst b/docs/api_reference/query.rst
deleted file mode 100644
index c38197856b2adc3730ab1e3ae7101061704e93ee..0000000000000000000000000000000000000000
--- a/docs/api_reference/query.rst
+++ /dev/null
@@ -1,48 +0,0 @@
-.. _Ref-Query:
-
-Querying an Index
-=================
-
-This doc shows the classes that are used to query indices.
-
-
-Main Query Classes
-^^^^^^^^^^^^^^^^^^
-
-Querying an index involves three main components:
-
-- **Retrievers**: A retriever class retrieves a set of Nodes from an index given a query.
-- **Response Synthesizer**: This class takes in a set of Nodes and synthesizes an answer given a query.
-- **Query Engine**: This class takes in a query and returns a Response object. It can make use of Retrievers and Response Synthesizer modules under the hood.
-- **Chat Engines**: This class enables conversation over a knowledge base. It is the stateful version of a query engine that keeps track of conversation history.
-
-
-.. toctree::
-   :maxdepth: 1
-   :caption: Main query classes
-
-   query/retrievers.rst
-   query/response_synthesizer.rst
-   query/query_engines.rst
-   query/chat_engines.rst
-
-
-Additional Query Classes
-^^^^^^^^^^^^^^^^^^^^^^^^
-
-We also detail some additional query classes below.
-
-- **Query Bundle**: This is the input to the query classes: retriever, response synthesizer,
-   and query engine. It enables the user to customize the string(s)
-   used for embedding-based query.
-- **Query Transform**: This class augments a raw query string with
-   associated transformations to improve index querying. Can be used
-   with a Retriever (see TransformRetriever) or QueryEngine.
-
-
-.. toctree::
-   :maxdepth: 1
-   :caption: Additional query classes
-
-   query/query_bundle.rst
-   query/query_transform.rst
diff --git a/docs/api_reference/query/chat_engines.rst b/docs/api_reference/query/chat_engines.rst
deleted file mode 100644
index 7fc4e29a804ea2902cab07cd98bea07f7a3db7df..0000000000000000000000000000000000000000
--- a/docs/api_reference/query/chat_engines.rst
+++ /dev/null
@@ -1,25 +0,0 @@
-.. _Ref-Chat-Engines:
-
-Chat Engines
-=================
-Chat engine is a high-level interface for having a conversation with your data
-(multiple back-and-forth instead of a single question & answer).
-
-
-Chat Engine Implementations
-^^^^^^^^^^^^^^^^^^^^^
-Below we show specific chat engine implementations.
-
-.. toctree::
-   :maxdepth: 1
-   :caption: Chat Engines
-
-   chat_engines/simple_chat_engine.rst
-   chat_engines/condense_question_chat_engine.rst
-   chat_engines/condense_plus_context_chat_engine.rst
-
-Chat Engine Types
-^^^^^^^^^^^^^^^^^^^^^
-.. automodule:: llama_index.core.chat_engine.types
-   :members:
-   :inherited-members:
diff --git a/docs/api_reference/query/chat_engines/condense_plus_context_chat_engine.rst b/docs/api_reference/query/chat_engines/condense_plus_context_chat_engine.rst
deleted file mode 100644
index b720b23dcd8a3d3994ca3b52982bd0ddb7aebb53..0000000000000000000000000000000000000000
--- a/docs/api_reference/query/chat_engines/condense_plus_context_chat_engine.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-Condense Plus Context Chat Engine
-=======================
-
-.. automodule:: llama_index.core.chat_engine.condense_plus_context
-   :members:
-   :inherited-members:
-..    :exclude-members: index_struct, query, set_llm_predictor, set_prompt_helper
diff --git a/docs/api_reference/query/chat_engines/condense_question_chat_engine.rst b/docs/api_reference/query/chat_engines/condense_question_chat_engine.rst
deleted file mode 100644
index 1e235ff747ed533646fe698c551dc8c33bb81950..0000000000000000000000000000000000000000
--- a/docs/api_reference/query/chat_engines/condense_question_chat_engine.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-Condense Question Chat Engine
-=======================
-
-.. automodule:: llama_index.core.chat_engine.condense_question
-   :members:
-   :inherited-members:
-..    :exclude-members: index_struct, query, set_llm_predictor, set_prompt_helper
diff --git a/docs/api_reference/query/chat_engines/simple_chat_engine.rst b/docs/api_reference/query/chat_engines/simple_chat_engine.rst
deleted file mode 100644
index bf0a450a6cbf298de780eaf4e1a125e894111cfa..0000000000000000000000000000000000000000
--- a/docs/api_reference/query/chat_engines/simple_chat_engine.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-Simple Chat Engine
-=======================
-
-.. automodule:: llama_index.core.chat_engine.simple
-   :members:
-   :inherited-members:
-..    :exclude-members: index_struct, query, set_llm_predictor, set_prompt_helper
diff --git a/docs/api_reference/query/query_bundle.rst b/docs/api_reference/query/query_bundle.rst
deleted file mode 100644
index 10756b3da28bb3536a46a13712c3e99f29a58aa0..0000000000000000000000000000000000000000
--- a/docs/api_reference/query/query_bundle.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-Query Bundle
-============
-
-.. automodule:: llama_index.core.indices.query.schema
-   :members: QueryBundle
-   :inherited-members:
-   :exclude-members:
diff --git a/docs/api_reference/query/query_engines.rst b/docs/api_reference/query/query_engines.rst
deleted file mode 100644
index fb4fbb3423f9a2e541102711ab2619305f786d66..0000000000000000000000000000000000000000
--- a/docs/api_reference/query/query_engines.rst
+++ /dev/null
@@ -1,32 +0,0 @@
-.. _Ref-Query-Engines:
-
-Query Engines
-=================
-
-Below we show some general query engine classes.
-
-.. toctree::
-   :maxdepth: 1
-   :caption: General Query Engines
-
-   query_engines/graph_query_engine.rst
-   query_engines/multistep_query_engine.rst
-   query_engines/retriever_query_engine.rst
-   query_engines/transform_query_engine.rst
-   query_engines/router_query_engine.rst
-   query_engines/retriever_router_query_engine.rst
-   query_engines/sub_question_query_engine.rst
-   query_engines/sql_join_query_engine.rst
-   query_engines/flare_query_engine.rst
-   query_engines/citation_query_engine.rst
-   query_engines/knowledge_graph_query_engine.rst
-
-
-We also show query engine classes specific to our structured indices.
-
-.. toctree::
-   :maxdepth: 1
-   :caption: Structured Indices Query Engines
-
-   query_engines/sql_query_engine.rst
-   query_engines/pandas_query_engine.rst
diff --git a/docs/api_reference/query/query_engines/citation_query_engine.rst b/docs/api_reference/query/query_engines/citation_query_engine.rst
deleted file mode 100644
index 41f99257225aca7bdc85f9590f78ddacb5fc631e..0000000000000000000000000000000000000000
--- a/docs/api_reference/query/query_engines/citation_query_engine.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-Citation Query Engine
-=======================
-
-.. automodule:: llama_index.core.query_engine.citation_query_engine
-   :members:
-   :inherited-members:
diff --git a/docs/api_reference/query/query_engines/flare_query_engine.rst b/docs/api_reference/query/query_engines/flare_query_engine.rst
deleted file mode 100644
index 256d7723682204f0b00370e3402fcd0a44d58bbb..0000000000000000000000000000000000000000
--- a/docs/api_reference/query/query_engines/flare_query_engine.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-Flare Query Engine
-=======================
-
-.. automodule:: llama_index.core.query_engine.flare.base
-   :members:
-   :inherited-members:
diff --git a/docs/api_reference/query/query_engines/graph_query_engine.rst b/docs/api_reference/query/query_engines/graph_query_engine.rst
deleted file mode 100644
index 19696a38cc8f527971308d6f382247cd7c258bb8..0000000000000000000000000000000000000000
--- a/docs/api_reference/query/query_engines/graph_query_engine.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-Graph Query Engine
-=======================
-
-.. automodule:: llama_index.core.query_engine.graph_query_engine
-   :members:
-   :inherited-members:
-..    :exclude-members: index_struct, query, set_llm_predictor, set_prompt_helper
diff --git a/docs/api_reference/query/query_engines/knowledge_graph_query_engine.rst b/docs/api_reference/query/query_engines/knowledge_graph_query_engine.rst
deleted file mode 100644
index 54fc80df26057999ca39e366a6d6414079999e18..0000000000000000000000000000000000000000
--- a/docs/api_reference/query/query_engines/knowledge_graph_query_engine.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-Knowledge Graph Query Engine
-============================
-
-.. automodule:: llama_index.core.query_engine.knowledge_graph_query_engine
-   :members:
-   :inherited-members:
diff --git a/docs/api_reference/query/query_engines/multistep_query_engine.rst b/docs/api_reference/query/query_engines/multistep_query_engine.rst
deleted file mode 100644
index 5b9e807949a390b19931e14479c7af80544e4abd..0000000000000000000000000000000000000000
--- a/docs/api_reference/query/query_engines/multistep_query_engine.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-Multistep Query Engine
-=======================
-
-.. automodule:: llama_index.core.query_engine.multistep_query_engine
-   :members:
-   :inherited-members:
-..    :exclude-members: index_struct, query, set_llm_predictor, set_prompt_helper
diff --git a/docs/api_reference/query/query_engines/pandas_query_engine.rst b/docs/api_reference/query/query_engines/pandas_query_engine.rst
deleted file mode 100644
index 9d4f940a022c30043fddd5315edfa4f1d5e100b2..0000000000000000000000000000000000000000
--- a/docs/api_reference/query/query_engines/pandas_query_engine.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-Pandas Query Engine
-=======================
-
-.. automodule:: llama_index.core.query_engine.pandas.pandas_query_engine
-   :members:
-   :inherited-members:
diff --git a/docs/api_reference/query/query_engines/retriever_query_engine.rst b/docs/api_reference/query/query_engines/retriever_query_engine.rst
deleted file mode 100644
index dacdd74a6ea027ba90565a7c3234c6de8af52df7..0000000000000000000000000000000000000000
--- a/docs/api_reference/query/query_engines/retriever_query_engine.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-Retriever Query Engine
-=======================
-
-.. automodule:: llama_index.core.query_engine.retriever_query_engine
-   :members:
-   :inherited-members:
diff --git a/docs/api_reference/query/query_engines/retriever_router_query_engine.rst b/docs/api_reference/query/query_engines/retriever_router_query_engine.rst
deleted file mode 100644
index 26a7ae8af41a118e0793cf994c2342014eff7861..0000000000000000000000000000000000000000
--- a/docs/api_reference/query/query_engines/retriever_router_query_engine.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-Retriever Router Query Engine
-=============================
-
-.. automodule:: llama_index.core.query_engine.retriever_query_engine
-   :members:
-   :inherited-members:
diff --git a/docs/api_reference/query/query_engines/router_query_engine.rst b/docs/api_reference/query/query_engines/router_query_engine.rst
deleted file mode 100644
index 00505205e1fa48015d8c43d74ad62cc633a6c20b..0000000000000000000000000000000000000000
--- a/docs/api_reference/query/query_engines/router_query_engine.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-Router Query Engine
-=======================
-
-.. automodule:: llama_index.core.query_engine.router_query_engine
-   :members:
-   :inherited-members:
-   :exclude-members: acombine_responses, combine_responses, default_node_to_metadata_fn
diff --git a/docs/api_reference/query/query_engines/sql_join_query_engine.rst b/docs/api_reference/query/query_engines/sql_join_query_engine.rst
deleted file mode 100644
index 21d40d1d3b31aa199d05f0ec12a1eb6d41ff0e1c..0000000000000000000000000000000000000000
--- a/docs/api_reference/query/query_engines/sql_join_query_engine.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-SQL Join Query Engine
-=======================
-
-.. automodule:: llama_index.core.query_engine.sql_join_query_engine
-   :members:
-   :inherited-members:
diff --git a/docs/api_reference/query/query_engines/sql_query_engine.rst b/docs/api_reference/query/query_engines/sql_query_engine.rst
deleted file mode 100644
index 1795fd44a2b8d586c1f6f137852870223874af2e..0000000000000000000000000000000000000000
--- a/docs/api_reference/query/query_engines/sql_query_engine.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-SQL Query Engine
-=======================
-
-.. automodule:: llama_index.core.indices.struct_store.sql_query
-   :members:
-   :inherited-members:
diff --git a/docs/api_reference/query/query_engines/sub_question_query_engine.rst b/docs/api_reference/query/query_engines/sub_question_query_engine.rst
deleted file mode 100644
index 0333082ebc9175f221ef19f0695b6decef854561..0000000000000000000000000000000000000000
--- a/docs/api_reference/query/query_engines/sub_question_query_engine.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-Sub Question Query Engine
-==========================
-
-.. automodule:: llama_index.core.query_engine.sub_question_query_engine
-   :members:
-   :inherited-members:
diff --git a/docs/api_reference/query/query_engines/transform_query_engine.rst b/docs/api_reference/query/query_engines/transform_query_engine.rst
deleted file mode 100644
index c0293835a042e143da96dcc61b2983560c39e9fe..0000000000000000000000000000000000000000
--- a/docs/api_reference/query/query_engines/transform_query_engine.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-Transform Query Engine
-=======================
-
-.. automodule:: llama_index.core.query_engine.transform_query_engine
-   :members:
-   :inherited-members:
diff --git a/docs/api_reference/query/query_transform.rst b/docs/api_reference/query/query_transform.rst
deleted file mode 100644
index cbbe9dde25589a358c4c70b96c826b4bd4da2f03..0000000000000000000000000000000000000000
--- a/docs/api_reference/query/query_transform.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-Query Transform
-===============
-
-.. automodule:: llama_index.core.indices.query.query_transform
-   :members:
-   :inherited-members:
-   :exclude-members:
diff --git a/docs/api_reference/query/response_synthesizer.rst b/docs/api_reference/query/response_synthesizer.rst
deleted file mode 100644
index 7348cc09b301dd7105ffbf77d67d64d07015c13c..0000000000000000000000000000000000000000
--- a/docs/api_reference/query/response_synthesizer.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-.. _Ref-Response-Synthesizer:
-
-Response Synthesizer
-=====================
-
-.. automodule:: llama_index.core.response_synthesizers
-   :members:
-   :inherited-members:
diff --git a/docs/api_reference/query/retrievers.rst b/docs/api_reference/query/retrievers.rst
deleted file mode 100644
index af342a529715a6ffe7e0cfccc79ff24df57d7665..0000000000000000000000000000000000000000
--- a/docs/api_reference/query/retrievers.rst
+++ /dev/null
@@ -1,49 +0,0 @@
-.. _Ref-Retrievers:
-
-Retrievers
-=================
-
-Index Retrievers
-^^^^^^^^^^^^^^^^
-Below we show index-specific retriever classes.
-
-.. toctree::
-   :maxdepth: 1
-   :caption: Index Retrievers
-
-   retrievers/empty.rst
-   retrievers/kg.rst
-   retrievers/list.rst
-   retrievers/table.rst
-   retrievers/tree.rst
-   retrievers/vector_store.rst
-
-NOTE: our structured indices (e.g. PandasIndex) don't have
-any retrievers, since they are not designed to be used with the retriever API.
-Please see the :ref:`Query Engine <Ref-Query-Engines>` page for more details.
-
-
-Additional Retrievers
-^^^^^^^^^^^^^^^^^^^^^
-
-Here we show additional retriever classes; these classes
-can augment existing retrievers with new capabilities (e.g. query transforms).
-
-.. toctree::
-   :maxdepth: 1
-   :caption: Additional Retrievers
-
-   retrievers/transform.rst
-
-
-Base Retriever
-^^^^^^^^^^^^^^^^^^^^^
-
-Here we show the base retriever class, which contains the `retrieve`
-method which is shared amongst all retrievers.
-
-
-.. automodule:: llama_index.core.indices.base_retriever
-   :members:
-   :inherited-members:
-..    :exclude-members: index_struct, query, set_llm_predictor, set_prompt_helper
diff --git a/docs/api_reference/query/retrievers/empty.rst b/docs/api_reference/query/retrievers/empty.rst
deleted file mode 100644
index 76f533dcf06d21fb24e5368096499798ce9a1ae9..0000000000000000000000000000000000000000
--- a/docs/api_reference/query/retrievers/empty.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-Empty Index Retriever
-=======================
-
-.. automodule:: llama_index.core.indices.empty.retrievers
-   :members:
-   :inherited-members:
-..    :exclude-members: index_struct, query, set_llm_predictor, set_prompt_helper
diff --git a/docs/api_reference/query/retrievers/kg.rst b/docs/api_reference/query/retrievers/kg.rst
deleted file mode 100644
index 5a24b515b900360e74dc235e2bd3b8aa23c1ec4e..0000000000000000000000000000000000000000
--- a/docs/api_reference/query/retrievers/kg.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-Knowledge Graph Retriever
-==========================
-
-.. automodule:: llama_index.core.indices.knowledge_graph.retrievers
-   :members:
-   :inherited-members:
-..    :exclude-members: index_struct, query, set_llm_predictor, set_prompt_helper
diff --git a/docs/api_reference/query/retrievers/list.rst b/docs/api_reference/query/retrievers/list.rst
deleted file mode 100644
index 9a85f636db904ab18115b8934a0a8c8f329b8723..0000000000000000000000000000000000000000
--- a/docs/api_reference/query/retrievers/list.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-List Retriever
-=======================
-
-.. automodule:: llama_index.core.indices.list.retrievers
-   :members:
-   :inherited-members:
-..    :exclude-members: index_struct, query, set_llm_predictor, set_prompt_helper
diff --git a/docs/api_reference/query/retrievers/table.rst b/docs/api_reference/query/retrievers/table.rst
deleted file mode 100644
index ab5f5287d37261be06c8f0a68897e7f523083686..0000000000000000000000000000000000000000
--- a/docs/api_reference/query/retrievers/table.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-Keyword Table Retrievers
-=========================
-
-.. automodule:: llama_index.core.indices.keyword_table.retrievers
-   :members:
-   :inherited-members:
-..    :exclude-members: index_struct, query, set_llm_predictor, set_prompt_helper
diff --git a/docs/api_reference/query/retrievers/transform.rst b/docs/api_reference/query/retrievers/transform.rst
deleted file mode 100644
index 340f2f7d173822acaee06da097e8404a74783c42..0000000000000000000000000000000000000000
--- a/docs/api_reference/query/retrievers/transform.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-Transform Retriever
-=======================
-
-.. automodule:: llama_index.core.retrievers.transform_retriever
-   :members:
-   :inherited-members:
-..    :exclude-members: index_struct, query, set_llm_predictor, set_prompt_helper
diff --git a/docs/api_reference/query/retrievers/tree.rst b/docs/api_reference/query/retrievers/tree.rst
deleted file mode 100644
index c3e2d48795c096d33f95f95a74e20906f3c7101c..0000000000000000000000000000000000000000
--- a/docs/api_reference/query/retrievers/tree.rst
+++ /dev/null
@@ -1,17 +0,0 @@
-Tree Retrievers
-=======================
-
-.. automodule:: llama_index.core.indices.tree.all_leaf_retriever
-   :members:
-   :inherited-members:
-..    :exclude-members: index_struct, query, set_llm_predictor, set_prompt_helper
-
-.. automodule:: llama_index.core.indices.tree.select_leaf_retriever
-   :members:
-   :inherited-members:
-..    :exclude-members: index_struct, query, set_llm_predictor, set_prompt_helper
-
-.. automodule:: llama_index.core.indices.tree.select_leaf_embedding_retriever
-   :members:
-   :inherited-members:
-..    :exclude-members: index_struct, query, set_llm_predictor, set_prompt_helper
diff --git a/docs/api_reference/query/retrievers/vector_store.rst b/docs/api_reference/query/retrievers/vector_store.rst
deleted file mode 100644
index 66baa0f8256b1ae6aeb00b8ad2a91bfdeec03d09..0000000000000000000000000000000000000000
--- a/docs/api_reference/query/retrievers/vector_store.rst
+++ /dev/null
@@ -1,15 +0,0 @@
-Vector Store Retrievers
-=======================
-
-.. automodule:: llama_index.core.indices.vector_store.retrievers.retriever
-   :members:
-   :inherited-members:
-
-.. automodule:: llama_index.core.indices.vector_store.retrievers.auto_retriever.auto_retriever
-   :members:
-   :inherited-members:
-
-.. automodule:: llama_index.core.vector_stores.types
-   :members:
-   :inherited-members:
-   :exclude-members: VectorStore, VectorStoreQueryResult, NodeWithEmbedding, VectorStoreQuerySpec, VectorStoreQuery
diff --git a/docs/api_reference/readers.rst b/docs/api_reference/readers.rst
deleted file mode 100644
index 44ab8ba6dce7046c38fcdd47298fbdba97ebff62..0000000000000000000000000000000000000000
--- a/docs/api_reference/readers.rst
+++ /dev/null
@@ -1,10 +0,0 @@
-Data Connectors
-===============
-
-NOTE: Our data connectors are now offered through `LlamaHub <https://llamahub.ai/>`_ 🦙.
-LlamaHub is an open-source repository containing data loaders that you can easily plug and play into any LlamaIndex application.
-
-The following data connectors are still available in the core repo.
-
-.. automodapi:: llama_index.core.readers.base
-   :no-inheritance-diagram:
diff --git a/docs/api_reference/response.rst b/docs/api_reference/response.rst
deleted file mode 100644
index f51cb0aa1dcf3a3217fac989bf7a90b5cc2abb3c..0000000000000000000000000000000000000000
--- a/docs/api_reference/response.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-.. _Ref-Response:
-
-Response
-=================
-
-.. automodule:: llama_index.core.base.response.schema
-   :members:
-   :inherited-members:
diff --git a/docs/api_reference/service_context.rst b/docs/api_reference/service_context.rst
deleted file mode 100644
index 6a306c8c52b04f734d07ae661b4044e630de77d5..0000000000000000000000000000000000000000
--- a/docs/api_reference/service_context.rst
+++ /dev/null
@@ -1,28 +0,0 @@
-.. _Ref-Service-Context:
-
-Service Context
-=================
-
-The service context container is a utility container for LlamaIndex
-index and query classes. The container contains the following
-objects that are commonly used for configuring every index and
-query, such as the LLM,
-the PromptHelper (for configuring input size/chunk size),
-the BaseEmbedding (for configuring the embedding model), and more.
-
-|
-
-.. toctree::
-   :maxdepth: 1
-   :caption: Service Context Classes
-
-   service_context/embeddings.rst
-   service_context/node_parser.rst
-   service_context/prompt_helper.rst
-   llms.rst
-
-------------
-
-.. automodule:: llama_index.core.indices.service_context
-   :members:
-   :inherited-members:
diff --git a/docs/api_reference/service_context/embeddings.rst b/docs/api_reference/service_context/embeddings.rst
deleted file mode 100644
index 6196f304ffcd08784541fab046b917419ec37fe3..0000000000000000000000000000000000000000
--- a/docs/api_reference/service_context/embeddings.rst
+++ /dev/null
@@ -1,65 +0,0 @@
-.. _Ref-Embeddings:
-
-Embeddings
-=================
-
-Users have a few options to choose from when it comes to embeddings.
-
-- :code:`OpenAIEmbedding`: the default embedding class. Defaults to "text-embedding-ada-002"
-- :code:`HuggingFaceEmbedding`: a generic wrapper around HuggingFace's transformers models.
-- :code:`OptimumEmbedding`: support for usage and creation of ONNX models from Optimum and HuggingFace.
-- :code:`InstructorEmbedding`: a wrapper around Instructor embedding models.
-- :code:`LangchainEmbedding`: a wrapper around Langchain's embedding models.
-- :code:`GoogleUnivSentEncoderEmbedding`: a wrapper around Google's Universal Sentence Encoder.
-- :code:`AdapterEmbeddingModel`: an adapter around any embedding model.
-
-
-OpenAIEmbedding
-===============
-
-.. autopydantic_model:: llama_index.embeddings.openai.OpenAIEmbedding
-   :members:
-
-HuggingFaceEmbedding
-====================
-
-.. autopydantic_model:: llama_index.embeddings.huggingface.HuggingFaceEmbedding
-   :members:
-
-OptimumEmbedding
-================
-
-.. autopydantic_model:: llama_index.embeddings.huggingface_optimum.OptimumEmbedding
-   :members:
-
-InstructorEmbedding
-===================
-
-.. autopydantic_model:: llama_index.embeddings.instructor.InstructorEmbedding
-   :members:
-
-LangchainEmbedding
-==================
-
-.. autopydantic_model:: llama_index.embeddings.langchain.LangchainEmbedding
-   :members:
-
-GoogleUnivSentEncoderEmbedding
-==============================
-
-.. autopydantic_model:: llama_index.embeddings.google.GoogleUnivSentEncoderEmbedding
-   :members:
-
-
-.. .. automodule:: llama_index.embeddings.openai
-..    :members:
-..    :inherited-members:
-..    :exclude-members: OAEM, OpenAIEmbeddingMode
-
-
-.. We also introduce a :code:`LangchainEmbedding` class, which is a wrapper around Langchain's embedding models.
-.. A full list of embeddings can be found `here <https://langchain.readthedocs.io/en/latest/reference/modules/embeddings.html>`_.
-
-.. .. automodule:: llama_index.embeddings.langchain
-..    :members:
-..    :inherited-members:
diff --git a/docs/api_reference/service_context/node_parser.rst b/docs/api_reference/service_context/node_parser.rst
deleted file mode 100644
index 1dee28d11a3c63ea57b51da3cfcad0cd02e5561e..0000000000000000000000000000000000000000
--- a/docs/api_reference/service_context/node_parser.rst
+++ /dev/null
@@ -1,17 +0,0 @@
-Node Parser
-===========
-
-.. automodapi:: llama_index.core.node_parser
-   :no-inheritance-diagram:
-
-..  autopydantic_model:: llama_index.core.extractors.SummaryExtractor
-
-..  autopydantic_model:: llama_index.core.extractors.QuestionsAnsweredExtractor
-
-..  autopydantic_model:: llama_index.core.extractors.TitleExtractor
-
-..  autopydantic_model:: llama_index.core.extractors.KeywordExtractor
-
-..  autopydantic_model:: llama_index.core.extractors.EntityExtractor
-
-..  autopydantic_model:: llama_index.core.extractors.BaseExtractor
diff --git a/docs/api_reference/service_context/prompt_helper.rst b/docs/api_reference/service_context/prompt_helper.rst
deleted file mode 100644
index 800b13812f1c2bea3d249ecd12b17201be795b71..0000000000000000000000000000000000000000
--- a/docs/api_reference/service_context/prompt_helper.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-.. _Ref-Prompt-Helper:
-
-PromptHelper
-=================
-
-.. automodule:: llama_index.core.indices.prompt_helper
-   :members:
-   :inherited-members:
diff --git a/docs/api_reference/storage.rst b/docs/api_reference/storage.rst
deleted file mode 100644
index 6d8838e09dba0d37e1dc4347de329ba725f1ac46..0000000000000000000000000000000000000000
--- a/docs/api_reference/storage.rst
+++ /dev/null
@@ -1,40 +0,0 @@
-.. _Ref-Storage:
-
-
-Storage Context
-=================
-
-LlamaIndex offers core abstractions around storage of Nodes, indices, and vectors.
-A key abstraction is the `StorageContext` - this contains the underlying
-`BaseDocumentStore` (for nodes), `BaseIndexStore` (for indices), and `VectorStore` (for vectors).
-
-
-The Document/Node and index stores rely on a common `KVStore` abstraction, which is also detailed below.
-
-
-We show the API references for the Storage Classes, loading indices from the Storage Context, and the Storage Context class itself below.
-
-|
-
-.. toctree::
-   :maxdepth: 1
-   :caption: Storage Classes
-
-   storage/docstore.rst
-   storage/index_store.rst
-   storage/vector_store.rst
-   storage/kv_store.rst
-
-|
-
-.. toctree::
-   :maxdepth: 1
-   :caption: Loading Indices
-
-   storage/indices_save_load.rst
-
-------------
-
-.. automodule:: llama_index.core.storage.storage_context
-   :members:
-   :inherited-members:
diff --git a/docs/api_reference/storage/docstore.rst b/docs/api_reference/storage/docstore.rst
deleted file mode 100644
index 27d41907f2ff59d7c6ba18065bce4d75cd4ab969..0000000000000000000000000000000000000000
--- a/docs/api_reference/storage/docstore.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-.. _Ref-Storage-Docstore:
-
-Document Store
-=====================
-
-.. automodule:: llama_index.core.storage.docstore
-   :members:
-   :inherited-members:
diff --git a/docs/api_reference/storage/index_store.rst b/docs/api_reference/storage/index_store.rst
deleted file mode 100644
index c5792218e7a09187be0f615308332afd34274dec..0000000000000000000000000000000000000000
--- a/docs/api_reference/storage/index_store.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-.. _Ref-Storage-Index-Store:
-
-Index Store
-=====================
-
-.. automodule:: llama_index.core.storage.index_store
-   :members:
-   :inherited-members:
diff --git a/docs/api_reference/storage/indices_save_load.rst b/docs/api_reference/storage/indices_save_load.rst
deleted file mode 100644
index f07993d84c9db58e47aae8f842f851c38de3c79f..0000000000000000000000000000000000000000
--- a/docs/api_reference/storage/indices_save_load.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-.. _Ref-Indices-SaveLoad:
-
-Loading Indices
-=====================
-
-.. automodule:: llama_index.core.indices.loading
-   :members:
-   :inherited-members:
diff --git a/docs/api_reference/storage/kv_store.rst b/docs/api_reference/storage/kv_store.rst
deleted file mode 100644
index b969f430d2e9a9bbf537cc4bd9923491b18b97c6..0000000000000000000000000000000000000000
--- a/docs/api_reference/storage/kv_store.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-.. _Ref-Storage-KVStore:
-
-
-KV Storage
-=================
-
-.. automodule:: llama_index.core.storage.kvstore
-   :members:
-   :inherited-members:
diff --git a/docs/api_reference/storage/vector_store.rst b/docs/api_reference/storage/vector_store.rst
deleted file mode 100644
index f3a142fe9e25f66bd4cfbd8d73280f0f5bd0924f..0000000000000000000000000000000000000000
--- a/docs/api_reference/storage/vector_store.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-.. _Ref-Storage-Vector-Store:
-
-Vector Store
-=====================
-
-.. automodapi:: llama_index.core.vector_stores
-   :no-inheritance-diagram:
diff --git a/docs/api_reference/struct_store.rst b/docs/api_reference/struct_store.rst
deleted file mode 100644
index 8cbd5a7b6efe0e56242927a4ef17cf1e7286a675..0000000000000000000000000000000000000000
--- a/docs/api_reference/struct_store.rst
+++ /dev/null
@@ -1,19 +0,0 @@
-.. _Ref-Struct-Store:
-
-Structured Index Configuration
-==============================
-
-Our structured indices are documented in :ref:`Ref-Indices-StructStore`.
-Below, we provide a reference of the classes that are used to configure our structured indices.
-
-.. automodule:: llama_index.core.utilities.sql_wrapper
-   :members:
-   :inherited-members:
-
-.. automodule:: llama_index.core.indices.struct_store.container_builder
-   :members:
-   :inherited-members:
-
-.. automodule:: llama_index.core.indices.common.struct_store.base
-   :members:
-   :inherited-members:
diff --git a/docs/changes/changelog.rst b/docs/changes/changelog.rst
deleted file mode 100644
index ab37940f47dab23514e863ad79865a2279dcc33b..0000000000000000000000000000000000000000
--- a/docs/changes/changelog.rst
+++ /dev/null
@@ -1 +0,0 @@
-.. mdinclude:: ../../CHANGELOG.md
diff --git a/docs/community/full_stack_projects.md b/docs/community/full_stack_projects.md
deleted file mode 100644
index 1fbb5e358881ac6a079969636f73b042b568f913..0000000000000000000000000000000000000000
--- a/docs/community/full_stack_projects.md
+++ /dev/null
@@ -1,63 +0,0 @@
-# Full-Stack Projects
-
-We've created both tooling and a variety of example projects (all open-source) to help you get started building a full-stack LLM application.
-
-## create-llama
-
-`create-llama` is a command-line tool that will generate a full-stack application template for you. It supports both FastAPI, Vercel, and Node backends. This is one of the easiest ways to get started!
-
-```{toctree}
----
-maxdepth: 1
----
-create-llama Blog <https://blog.llamaindex.ai/create-llama-a-command-line-tool-to-generate-llamaindex-apps-8f7683021191>
-create-llama Repo <https://github.com/run-llama/LlamaIndexTS/tree/main/packages/create-llama>
-create-llama Additional Templates <https://github.com/jerryjliu/create_llama_projects>
-```
-
-## Full-Stack Applications
-
-The LlamaIndex team has also built some in-house projects - all of them open-sourced with MIT license - that you can use out of the box, or use as a template to kickstart your own project.
-
-Check them out below.
-
-### SEC Insights
-
-```{toctree}
----
-maxdepth: 1
----
-SEC Insights App <https://secinsights.ai/>
-SEC Insights Repo <https://github.com/run-llama/sec-insights>
-```
-
-### Chat LlamaIndex
-
-```{toctree}
----
-maxdepth: 1
----
-Chat LlamaIndex App <https://chat-llamaindex.vercel.app/>
-Chat LlamaIndex Repo <https://github.com/run-llama/chat-llamaindex>
-
-```
-
-### RAGs
-
-```{toctree}
----
-maxdepth: 1
----
-RAGs Repo <https://github.com/run-llama/rags>
-
-```
-
-### RAG CLI
-
-```{toctree}
----
-maxdepth: 1
----
-RAG CLI </use_cases/q_and_a/rag_cli.md>
-
-```
diff --git a/docs/community/integrations.md b/docs/community/integrations.md
deleted file mode 100644
index 2b0a08250a4e9e1db81f5a969b3d0c51381de21e..0000000000000000000000000000000000000000
--- a/docs/community/integrations.md
+++ /dev/null
@@ -1,102 +0,0 @@
-# Integrations
-
-LlamaIndex has a number of community integrations, from vector stores, to prompt trackers, tracers, and more!
-
-## LlamaPacks -- Code Templates
-
-LlamaHub hosts a full suite of LlamaPacks -- templates for features that you can download, edit, and try out! This offers a quick way to learn about new features and try new techniques.
-
-The full set of LlamaPacks is available on [LlamaHub](https://llamahub.ai/). Check out our dedicated page below.
-
-```{toctree}
----
-maxdepth: 1
----
-llama_packs/root.md
-```
-
-## Data Loaders
-
-The full set of data loaders are found on [LlamaHub](https://llamahub.ai/)
-
-## Agent Tools
-
-The full set of agent tools are found on [LlamaHub](https://llamahub.ai/)
-
-## LLMs
-
-We support [a huge number of LLMs](/module_guides/models/llms/modules.md).
-
-## Observability/Tracing/Evaluation
-
-Check out our [one-click observability](/module_guides/observability/observability.md) page
-for full tracing integrations.
-
-```{toctree}
----
-maxdepth: 1
----
-/module_guides/observability/observability.md
-integrations/uptrain.md
-integrations/deepeval.md
-integrations/graphsignal.md
-integrations/trulens.md
-
-```
-
-## Structured Outputs
-
-```{toctree}
----
-maxdepth: 1
----
-integrations/guidance.md
-integrations/lmformatenforcer.md
-Guardrails </examples/output_parsing/GuardrailsDemo.ipynb>
-OpenAI Function Calling </examples/output_parsing/openai_pydantic_program.ipynb>
-```
-
-## Storage and Managed Indexes
-
-```{toctree}
----
-maxdepth: 1
----
-integrations/vector_stores.md
-integrations/graph_stores.md
-integrations/managed_indices.md
-```
-
-## Application Frameworks
-
-```{toctree}
----
-maxdepth: 1
----
-integrations/using_with_langchain.md
-Streamlit <https://blog.streamlit.io/build-a-chatbot-with-custom-data-sources-powered-by-llamaindex/>
-Chainlit <https://docs.chainlit.io/integrations/llama-index>
-```
-
-## Distributed Compute
-
-```{toctree}
----
-maxdepth: 1
----
-LlamaIndex + Ray <https://www.anyscale.com/blog/build-and-scale-a-powerful-query-engine-with-llamaindex-ray>
-
-```
-
-## Other
-
-```{toctree}
----
-maxdepth: 1
----
-integrations/chatgpt_plugins.md
-Poe <https://github.com/poe-platform/poe-protocol/tree/main/llama_poe>
-Airbyte <https://airbyte.com/tutorials/airbyte-and-llamaindex-elt-and-chat-with-your-data-warehouse-without-writing-sql>
-integrations/fleet_libraries_context.md
-
-```
diff --git a/docs/community/integrations/using_with_langchain.md b/docs/community/integrations/using_with_langchain.md
deleted file mode 100644
index de553e5c7a53d1e0d53f543aba09b597ed3cac42..0000000000000000000000000000000000000000
--- a/docs/community/integrations/using_with_langchain.md
+++ /dev/null
@@ -1,46 +0,0 @@
-# Using with Langchain 🦜🔗
-
-LlamaIndex provides both Tool abstractions for a Langchain agent as well as a memory module.
-
-The API reference of the Tool abstractions + memory modules are [here](/api_reference/langchain_integrations/base.rst).
-
-### Use any data loader as a Langchain Tool
-
-LlamaIndex allows you to use any data loader within the LlamaIndex core repo or in [LlamaHub](https://llamahub.ai/) as an "on-demand" data query Tool within a LangChain agent.
-
-The Tool will 1) load data using the data loader, 2) index the data, and 3) query the data and return the response in an ad-hoc manner.
-
-**Resources**
-
-- [OnDemandLoaderTool Tutorial](/examples/tools/OnDemandLoaderTool.ipynb)
-
-### Use a query engine as a Langchain Tool
-
-LlamaIndex provides Tool abstractions so that you can use a LlamaIndex query engine along with a Langchain agent.
-
-For instance, you can choose to create a "Tool" from an `QueryEngine` directly as follows:
-
-```python
-from llama_index.core.langchain_helpers.agents import (
-    IndexToolConfig,
-    LlamaIndexTool,
-)
-
-tool_config = IndexToolConfig(
-    query_engine=query_engine,
-    name=f"Vector Index",
-    description=f"useful for when you want to answer queries about X",
-    tool_kwargs={"return_direct": True},
-)
-
-tool = LlamaIndexTool.from_tool_config(tool_config)
-```
-
-### Llama Demo Notebook: Tool + Memory module
-
-We provide another demo notebook showing how you can build a chat agent with the following components.
-
-- Using LlamaIndex as a generic callable tool with a Langchain agent
-- Using LlamaIndex as a memory module; this allows you to insert arbitrary amounts of conversation history with a Langchain chatbot!
-
-Please see the [notebook here](https://github.com/jerryjliu/llama_index/blob/main/examples/langchain_demo/LangchainDemo.ipynb).
diff --git a/docs/conf.py b/docs/conf.py
deleted file mode 100644
index 97cc30b66d54b516db1475363f870c598e7262da..0000000000000000000000000000000000000000
--- a/docs/conf.py
+++ /dev/null
@@ -1,123 +0,0 @@
-"""Configuration for sphinx."""
-# Configuration file for the Sphinx documentation builder.
-#
-# For the full list of built-in configuration values, see the documentation:
-# https://www.sphinx-doc.org/en/master/usage/configuration.html
-
-# -- Path setup --------------------------------------------------------------
-
-# If extensions (or modules to document with autodoc) are in another directory,
-# add these directories to sys.path here. If the directory is relative to the
-# documentation root, use os.path.abspath to make it absolute, like shown here.
-#
-import pkg_resources
-import os
-import sys
-
-sys.path.insert(0, os.path.abspath("../"))
-
-version = "v" + pkg_resources.get_distribution("llama-index-core").version
-
-# -- Project information -----------------------------------------------------
-# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information
-
-
-project = "LlamaIndex 🦙"
-copyright = "2023, Jerry Liu"
-author = "Jerry Liu"
-
-# -- General configuration ---------------------------------------------------
-# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration
-
-extensions = [
-    "sphinx.ext.autodoc",
-    "sphinx.ext.coverage",
-    "sphinx.ext.autodoc.typehints",
-    "sphinx.ext.autosummary",
-    "sphinx.ext.napoleon",
-    "sphinx_rtd_theme",
-    "sphinx.ext.mathjax",
-    "m2r2",
-    "myst_nb",
-    "sphinxcontrib.autodoc_pydantic",
-    "sphinx_reredirects",
-    "sphinx_automodapi.automodapi",
-    "sphinxcontrib.gtagjs",
-]
-
-# automodapi requires this to avoid duplicates apparently
-numpydoc_show_class_members = False
-
-myst_heading_anchors = 5
-# TODO: Fix the non-consecutive header level in our docs, until then
-# disable the sphinx/myst warnings
-suppress_warnings = ["myst.header"]
-
-templates_path = ["_templates"]
-exclude_patterns = ["_build", "Thumbs.db", ".DS_Store", "DOCS_README.md"]
-
-
-# -- Options for HTML output -------------------------------------------------
-# https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output
-
-html_theme = "furo"
-html_title = project + " " + version
-html_static_path = ["_static"]
-
-html_css_files = [
-    "css/custom.css",
-    "css/algolia.css",
-    "https://cdn.jsdelivr.net/npm/@docsearch/css@3",
-]
-html_js_files = [
-    "js/mendablesearch.js",
-    (
-        "https://cdn.jsdelivr.net/npm/@docsearch/js@3.3.3/dist/umd/index.js",
-        {"defer": "defer"},
-    ),
-    ("js/algolia.js", {"defer": "defer"}),
-    ("js/leadfeeder.js", {"defer": "defer"}),
-]
-html_permalinks_icon = "#"
-nb_execution_mode = "off"
-autodoc_pydantic_model_show_json_error_strategy = "coerce"
-nitpicky = True
-
-## Redirects
-
-redirects = {
-    "end_to_end_tutorials/usage_pattern": "/en/stable/understanding/understanding.html",
-    "end_to_end_tutorials/one_click_observability": "/en/stable/module_guides/observability/observability.html",
-    "end_to_end_tutorials/dev_practices/production_rag": "/en/stable/optimizing/production_rag.html",
-    "end_to_end_tutorials/dev_practices/evaluation": "/en/stable/optimizing/evaluation/evaluation.html",
-    "end_to_end_tutorials/discover_llamaindex": "/en/stable/getting_started/discover_llamaindex.html",
-    "end_to_end_tutorials/finetuning": "/en/stable/optimizing/fine-tuning/fine-tuning.html",
-    "end_to_end_tutorials/low_level/root": "/en/stable/optimizing/building_rag_from_scratch.html",
-    "end_to_end_tutorials/use_cases": "/en/stable/use_cases/q_and_a/root.html",
-    "core_modules/data_modules/connector": "/en/stable/module_guides/loading/connector/root.html",
-    "core_modules/data_modules/documents_and_nodes/root": "/en/stable/module_guides/loading/documents_and_nodes/root.html",
-    "core_modules/data_modules/node_parsers/root": "/en/stable/module_guides/loading/node_parsers/root.html",
-    "core_modules/data_modules/storage/root": "/en/stable/module_guides/storing/storing.html",
-    "core_modules/data_modules/index/root": "/en/stable/module_guides/indexing/indexing.html",
-    "core_modules/query_modules/query_engine/root": "/en/stable/module_guides/deploying/query_engine/root.html",
-    "core_modules/query_modules/chat_engines/root": "/en/stable/module_guides/deploying/chat_engines/root.html",
-    "core_modules/query_modules/retriever/root": "/en/stable/module_guides/querying/retriever/root.html",
-    "core_modules/query_modules/router/root": "/en/stable/module_guides/querying/router/root.html",
-    "core_modules/query_modules/node_postprocessors/root": "/en/stable/module_guides/querying/node_postprocessors/root.html",
-    "core_modules/query_modules/response_synthesizers/root": "/en/stable/module_guides/querying/response_synthesizers/root.html",
-    "core_modules/query_modules/structured_outputs/root": "/en/stable/optimizing/advanced_retrieval/structured_outputs/structured_outputs.html",
-    "core_modules/agent_modules/agents/root": "/en/stable/module_guides/deploying/agents/root.html",
-    "core_modules/agent_modules/tools/root": "/en/stable/module_guides/deploying/agents/tools/root.html",
-    "core_modules/model_modules/llms/root": "/en/stable/module_guides/models/llms.html",
-    "core_modules/model_modules/embeddings/root": "/en/stable/module_guides/models/embeddings.html",
-    "core_modules/model_modules/prompts": "/en/stable/module_guides/models/prompts.html",
-    "core_modules/supporting_modules/service_context": "/en/stable/module_guides/supporting_modules/service_context.html",
-    "core_modules/supporting_modules/callbacks/root": "/en/stable/module_guides/observability/callbacks/root.html",
-    "core_modules/supporting_modules/evaluation/root": "/en/stable/module_guides/evaluating/root.html",
-    "core_modules/supporting_modules/cost_analysis/root": "/en/stable/understanding/evaluating/cost_analysis/root.html",
-    "api/llama_index.vector_stores.MongoDBAtlasVectorSearch": "/en/stable/examples/vector_stores/MongoDBAtlasVectorSearch.html",
-}
-
-gtagjs_ids = [
-    "G-BYVB1ZVE6J",
-]
diff --git a/docs/contributing/contributing.rst b/docs/contributing/contributing.rst
deleted file mode 100644
index f2c987c718a978aefb2e2e0d46777cf9c45e3f6f..0000000000000000000000000000000000000000
--- a/docs/contributing/contributing.rst
+++ /dev/null
@@ -1 +0,0 @@
-.. mdinclude:: ../../CONTRIBUTING.md
diff --git a/docs/contributing/documentation.rst b/docs/contributing/documentation.rst
deleted file mode 100644
index 7d105fcfbb004146161c8d051d654bcc2f616c59..0000000000000000000000000000000000000000
--- a/docs/contributing/documentation.rst
+++ /dev/null
@@ -1 +0,0 @@
-.. mdinclude:: ../DOCS_README.md
diff --git a/docs/docs/CHANGELOG.md b/docs/docs/CHANGELOG.md
new file mode 100644
index 0000000000000000000000000000000000000000..d881644901546e2d6071883749b8cb677b74a7e1
--- /dev/null
+++ b/docs/docs/CHANGELOG.md
@@ -0,0 +1,2948 @@
+# ChangeLog
+
+## [2024-03-20]
+
+### `llama-index-core` [0.10.21]
+
+- Lazy init for async elements StreamingAgentChatResponse (#12116)
+- Fix streaming generators get bug by SynthesisEndEvent (#12092)
+- CLIP embedding more models (#12063)
+
+### `llama-index-packs-raptor` [0.1.3]
+
+- Add `num_workers` to summary module (#)
+
+### `llama-index-readers-telegram` [0.1.5]
+
+- Fix datetime fields (#12112)
+- Add ability to select time period of posts/messages (#12078)
+
+### `llama-index-embeddings-openai` [0.1.7]
+
+- Add api version/base api as optional for open ai embedding (#12091)
+
+### `llama-index-networks` [0.2.1]
+
+- Add node postprocessing to network retriever (#12027)
+- Add privacy-safe networks demo (#12027)
+
+### `llama-index-callbacks-langfuse` [0.1.3]
+
+- Chore: bumps min version of langfuse dep (#12077)
+
+### `llama-index-embeddings-google` [0.1.4]
+
+- Chore: bumps google-generativeai dep (#12085)
+
+### `llama-index-embeddings-gemini` [0.1.5]
+
+- Chore: bumps google-generativeai dep (#12085)
+
+### `llama-index-llms-gemini` [0.1.6]
+
+- Chore: bumps google-generativeai dep (#12085)
+
+### `llama-index-llms-palm` [0.1.4]
+
+- Chore: bumps google-generativeai dep (#12085)
+
+### `llama-index-multi-modal-llms-google` [0.1.4]
+
+- Chore: bumps google-generativeai dep (#12085)
+
+### `llama-index-vector-stores-google` [0.1.5]
+
+- Chore: bumps google-generativeai dep (#12085)
+
+### `llama-index-storage-kvstore-elasticsearch` [0.1.0]
+
+- New integration (#12068)
+
+### `llama-index-readers-google` [0.1.7]
+
+- Fix - Google Drive Issue of not loading same name files (#12022)
+
+### `llama-index-vector-stores-upstash` [0.1.3]
+
+- Adding Metadata Filtering support for UpstashVectorStore (#12054)
+
+### `llama-index-packs-raptor` [0.1.2]
+
+- Fix: prevent RaptorPack infinite recursion (#12008)
+
+### `llama-index-embeddings-huggingface-optimum` [0.1.4]
+
+- Fix(OptimumEmbedding): removing token_type_ids causing ONNX validation issues
+
+### `llama-index-llms-anthropic` [0.1.7]
+
+- Fix: Anthropic LLM merge consecutive messages with same role (#12013)
+
+### `llama-index-packs-diff-private-simple-dataset` [0.1.0]
+
+- DiffPrivacy ICL Pack - OpenAI Completion LLMs (#11881)
+
+### `llama-index-cli` [0.1.11]
+
+- Remove llama_hub_url keyword from download_llama_dataset of command (#12038)
+
+## [2024-03-14]
+
+### `llama-index-core` [0.10.20]
+
+- New `instrumentation` module for observability (#11831)
+- Allow passing in LLM for `CitationQueryEngine` (#11914)
+- Updated keyval docstore to allow changing suffix in addition to namespace (#11873)
+- Add (some) async streaming support to query_engine #11949
+
+### `llama-index-embeddings-dashscope` [0.1.3]
+
+- Fixed embedding type for query texts (#11901)
+
+### `llama-index-embeddings-premai` [0.1.3]
+
+- Support for premai embeddings (#11954)
+
+### `llama-index-networks` [0.2.0]
+
+- Added support for network retrievers (#11800)
+
+### `llama-index-llms-anthropic` [0.1.6]
+
+- Added support for haiku (#11916)
+
+### `llama-index-llms-mistralai` [0.1.6]
+
+- Fixed import error for ChatMessage (#11902)
+
+### `llama-index-llms-openai` [0.1.11]
+
+- added gpt-35-turbo-0125 for AZURE_TURBO_MODELS (#11956)
+- fixed error with nontype in logprobs (#11967)
+
+### `llama-index-llms-premai` [0.1.4]
+
+- Support for premai llm (#11954)
+
+### `llama-index-llms-solar` [0.1.3]
+
+- Support for solar as an LLM class (#11710)
+
+### `llama-index-llms-vertex` [0.1.5]
+
+- Add support for medlm in vertex (#11911)
+
+### `llama-index-readers-goolge` [0.1.6]
+
+- added README files and query string for google drive reader (#11724)
+
+### `llama-index-readers-file` [0.1.11]
+
+- Updated ImageReader to add `plain_text` option to trigger pytesseract (#11913)
+
+### `llama-index-readers-pathway` [0.1.3]
+
+- use pure requests to reduce deps, simplify code (#11924)
+
+### `llama-index-retrievers-pathway` [0.1.3]
+
+- use pure requests to reduce deps, simplify code (#11924)
+
+### `llama-index-storage-docstore-mongodb` [0.1.3]
+
+- Allow changing suffix for mongodb docstore (#11873)
+
+### `llama-index-vector-stores-databricks` [0.1.1]
+
+- Support for databricks vector search as a vector store (#10754)
+
+### `llama-index-vector-stores-opensearch` [0.1.8]
+
+- (re)implement proper delete (#11959)
+
+### `llama-index-vector-stores-postgres` [0.1.4]
+
+- Fixes for IN filters and OR text search (#11872, #11927)
+
+## [2024-03-12]
+
+### `llama-index-cli` [0.1.9]
+
+- Removed chroma as a bundled dep to reduce `llama-index` deps
+
+### `llama-index-core` [0.10.19]
+
+- Introduce retries for rate limits in `OpenAI` llm class (#11867)
+- Added table comments to SQL table schemas in `SQLDatabase` (#11774)
+- Added `LogProb` type to `ChatResponse` object (#11795)
+- Introduced `LabelledSimpleDataset` (#11805)
+- Fixed insert `IndexNode` objects with unserializable objects (#11836)
+- Fixed stream chat type error when writing response to history in `CondenseQuestionChatEngine` (#11856)
+- Improve post-processing for json query engine (#11862)
+
+### `llama-index-embeddings-cohere` [0.1.4]
+
+- Fixed async kwarg error (#11822)
+
+### `llama-index-embeddings-dashscope` [0.1.2]
+
+- Fixed pydantic import (#11765)
+
+### `llama-index-graph-stores-neo4j` [0.1.3]
+
+- Properly close connection after verifying connectivity (#11821)
+
+### `llama-index-llms-cohere` [0.1.3]
+
+- Add support for new `command-r` model (#11852)
+
+### `llama-index-llms-huggingface` [0.1.4]
+
+- Fixed streaming decoding with special tokens (#11807)
+
+### `llama-index-llms-mistralai` [0.1.5]
+
+- Added support for latest and open models (#11792)
+
+### `llama-index-tools-finance` [0.1.1]
+
+- Fixed small bug when passing in the API get for stock news (#11772)
+
+### `llama-index-vector-stores-chroma` [0.1.6]
+
+- Slimmed down chroma deps (#11775)
+
+### `llama-index-vector-stores-lancedb` [0.1.3]
+
+- Fixes for deleting (#11825)
+
+### `llama-index-vector-stores-postgres` [0.1.3]
+
+- Support for nested metadata filters (#11778)
+
+## [2024-03-07]
+
+### `llama-index-callbacks-deepeval` [0.1.3]
+
+- Update import path for callback handler (#11754)
+
+### `llama-index-core` [0.10.18]
+
+- Ensure `LoadAndSearchToolSpec` loads document objects (#11733)
+- Fixed bug for no nodes in `QueryFusionRetriever` (#11759)
+- Allow using different runtime kwargs for different evaluators in `BatchEvalRunner` (#11727)
+- Fixed issues with fsspec + `SimpleDirectoryReader` (#11665)
+- Remove `asyncio.run()` requirement from guideline evaluator (#11719)
+
+### `llama-index-embeddings-voyageai` [0.1.3]
+
+- Update voyage embeddings to use proper clients (#11721)
+
+### `llama-index-indices-managed-vectara` [0.1.3]
+
+- Fixed issues with vectara query engine in non-summary mode (#11668)
+
+### `llama-index-llms-mymagic` [0.1.5]
+
+- Add `return_output` option for json output with query and response (#11761)
+
+### `llama-index-packs-code-hierarchy` [0.1.0]
+
+- Added support for a `CodeHiearchyAgentPack` that allows for agentic traversal of a codebase (#10671)
+
+### `llama-index-packs-cohere-citation-chat` [0.1.3]
+
+- Added a new llama-pack for citations + chat with cohere (#11697)
+
+### `llama-index-vector-stores-milvus` [0.1.6]
+
+- Prevent forced `flush()` on document add (#11734)
+
+### `llama-index-vector-stores-opensearch` [0.1.7]
+
+- Small typo in metadata column name (#11751)
+
+### `llama-index-vector-stores-tidbvector` [0.1.0]
+
+- Initial support for TiDB vector store (#11635)
+
+### `llama-index-vector-stores-weaviate` [0.1.4]
+
+- Small fix for `int` fields in metadata filters (#11742)
+
+## [2024-03-06]
+
+New format! Going to try out reporting changes per package.
+
+### `llama-index-cli` [0.1.8]
+
+- Update mappings for `upgrade` command (#11699)
+
+### `llama-index-core` [0.10.17]
+
+- add `relative_score` and `dist_based_score` to `QueryFusionRetriever` (#11667)
+- check for `none` in async agent queue (#11669)
+- allow refine template for `BaseSQLTableQueryEngine` (#11378)
+- update mappings for llama-packs (#11699)
+- fixed index error for extracting rel texts in KG index (#11695)
+- return proper response types from synthesizer when no nodes (#11701)
+- Inherit metadata to summaries in DocumentSummaryIndex (#11671)
+- Inherit callback manager in sql query engines (#11662)
+- Fixed bug with agent streaming not being written to chat history (#11675)
+- Fixed a small bug with `none` deltas when streaming a function call with an agent (#11713)
+
+### `llama-index-multi-modal-llms-anthropic` [0.1.2]
+
+- Added support for new multi-modal models `haiku` and `sonnet` (#11656)
+
+### `llama-index-packs-finchat` [0.1.0]
+
+- Added a new llama-pack for hierarchical agents + finance chat (#11387)
+
+### `llama-index-readers-file` [0.1.8]
+
+- Added support for checking if NLTK files are already downloaded (#11676)
+
+### `llama-index-readers-json` [0.1.4]
+
+- Use the metadata passed in when creating documents (#11626)
+
+### `llama-index-vector-stores-astra-db` [0.1.4]
+
+- Update wording in warning message (#11702)
+
+### `llama-index-vector-stores-opensearch` [0.1.7]
+
+- Avoid calling `nest_asyncio.apply()` in code to avoid confusing errors for users (#11707)
+
+### `llama-index-vector-stores-qdrant` [0.1.4]
+
+- Catch RPC errors (#11657)
+
+## [0.10.16] - 2024-03-05
+
+### New Features
+
+- Anthropic support for new models (#11623, #11612)
+- Easier creation of chat prompts (#11583)
+- Added a raptor retriever llama-pack (#11527)
+- Improve batch cohere embeddings through bedrock (#11572)
+- Added support for vertex AI embeddings (#11561)
+
+### Bug Fixes / Nits
+
+- Ensure order in async embeddings generation (#11562)
+- Fixed empty metadata for csv reader (#11563)
+- Serializable fix for composable retrievers (#11617)
+- Fixed milvus metadata filter support (#11566)
+- FIxed pydantic import in clickhouse vector store (#11631)
+- Fixed system prompts for gemini/vertext-gemini (#11511)
+
+## [0.10.15] - 2024-03-01
+
+### New Features
+
+- Added FeishuWikiReader (#11491)
+- Added videodb retriever integration (#11463)
+- Added async to opensearch vector store (#11513)
+- New LangFuse one-click callback handler (#11324)
+
+### Bug Fixes / Nits
+
+- Fixed deadlock issue with async chat streaming (#11548)
+- Improved hidden file check in SimpleDirectoryReader (#11496)
+- Fixed null values in document metadata when using SimpleDirectoryReader (#11501)
+- Fix for sqlite utils in jsonalyze query engine (#11519)
+- Added base url and timeout to ollama multimodal LLM (#11526)
+- Updated duplicate handling in query fusion retriever (#11542)
+- Fixed bug in kg indexx struct updating (#11475)
+
+## [0.10.14] - 2024-02-28
+
+### New Features
+
+- Released llama-index-networks (#11413)
+- Jina reranker (#11291)
+- Added DuckDuckGo agent search tool (#11386)
+- helper functions for chatml (#10272)
+- added brave search tool for agents (#11468)
+- Added Friendli LLM integration (#11384)
+- metadata only queries for chromadb (#11328)
+
+### Bug Fixes / Nits
+
+- Fixed inheriting llm callback in synthesizers (#11404)
+- Catch delete error in milvus (#11315)
+- Fixed pinecone kwargs issue (#11422)
+- Supabase metadata filtering fix (#11428)
+- api base fix in gemini embeddings (#11393)
+- fix elasticsearch vector store await (#11438)
+- vllm server cuda fix (#11442)
+- fix for passing LLM to context chat engine (#11444)
+- set input types for cohere embeddings (#11288)
+- default value for azure ad token (#10377)
+- added back prompt mixin for react agent (#10610)
+- fixed system roles for gemini (#11481)
+- fixed mean agg pooling returning numpy float values (#11458)
+- improved json path parsing for JSONQueryEngine (#9097)
+
+## [0.10.13] - 2024-02-26
+
+### New Features
+
+- Added a llama-pack for KodaRetriever, for on-the-fly alpha tuning (#11311)
+- Added support for `mistral-large` (#11398)
+- Last token pooling mode for huggingface embeddings models like SFR-Embedding-Mistral (#11373)
+- Added fsspec support to SimpleDirectoryReader (#11303)
+
+### Bug Fixes / Nits
+
+- Fixed an issue with context window + prompt helper (#11379)
+- Moved OpenSearch vector store to BasePydanticVectorStore (#11400)
+- Fixed function calling in fireworks LLM (#11363)
+- Made cohere embedding types more automatic (#11288)
+- Improve function calling in react agent (#11280)
+- Fixed MockLLM imports (#11376)
+
+## [0.10.12] - 2024-02-22
+
+### New Features
+
+- Added `llama-index-postprocessor-colbert-rerank` package (#11057)
+- `MyMagicAI` LLM (#11263)
+- `MariaTalk` LLM (#10925)
+- Add retries to github reader (#10980)
+- Added FireworksAI embedding and LLM modules (#10959)
+
+### Bug Fixes / Nits
+
+- Fixed string formatting in weaviate (#11294)
+- Fixed off-by-one error in semantic splitter (#11295)
+- Fixed `download_llama_pack` for multiple files (#11272)
+- Removed `BUILD` files from packages (#11267)
+- Loosened python version reqs for all packages (#11267)
+- Fixed args issue with chromadb (#11104)
+
+## [0.10.11] - 2024-02-21
+
+### Bug Fixes / Nits
+
+- Fixed multi-modal LLM for async acomplete (#11064)
+- Fixed issue with llamaindex-cli imports (#11068)
+
+## [0.10.10] - 2024-02-20
+
+I'm still a bit wonky with our publishing process -- apologies. This is just a version
+bump to ensure the changes that were supposed to happen in 0.10.9 actually
+did get published. (AF)
+
+## [0.10.9] - 2024-02-20
+
+- add llama-index-cli dependency
+
+## [0.10.7] - 2024-02-19
+
+### New Features
+
+- Added Self-Discover llamapack (#10951)
+
+### Bug Fixes / Nits
+
+- Fixed linting in CICD (#10945)
+- Fixed using remote graph stores (#10971)
+- Added missing LLM kwarg in NoText response synthesizer (#10971)
+- Fixed openai import in rankgpt (#10971)
+- Fixed resolving model name to string in openai embeddings (#10971)
+- Off by one error in sentence window node parser (#10971)
+
+## [0.10.6] - 2024-02-17
+
+First, apologies for missing the changelog the last few versions. Trying to figure out the best process with 400+ packages.
+
+At some point, each package will have a dedicated changelog.
+
+But for now, onto the "master" changelog.
+
+### New Features
+
+- Added `NomicHFEmbedding` (#10762)
+- Added `MinioReader` (#10744)
+
+### Bug Fixes / Nits
+
+- Various fixes for clickhouse vector store (#10799)
+- Fix index name in neo4j vector store (#10749)
+- Fixes to sagemaker embeddings (#10778)
+- Fixed performance issues when splitting nodes (#10766)
+- Fix non-float values in reranker + b25 (#10930)
+- OpenAI-agent should be a dep of openai program (#10930)
+- Add missing shortcut imports for query pipeline components (#10930)
+- Fix NLTK and tiktoken not being bundled properly with core (#10930)
+- Add back `llama_index.core.__version__` (#10930)
+
+## [0.10.3] - 2024-02-13
+
+### Bug Fixes / Nits
+
+- Fixed passing in LLM to `as_chat_engine` (#10605)
+- Fixed system prompt formatting for anthropic (#10603)
+- Fixed elasticsearch vector store error on `__version__` (#10656)
+- Fixed import on openai pydantic program (#10657)
+- Added client back to opensearch vector store exports (#10660)
+- Fixed bug in SimpleDirectoryReader not using file loaders properly (#10655)
+- Added lazy LLM initialization to RankGPT (#10648)
+- Fixed bedrock embedding `from_credentials` passing ing the model name (#10640)
+- Added back recent changes to TelegramReader (#10625)
+
+## [0.10.0, 0.10.1] - 2024-02-12
+
+### Breaking Changes
+
+- Several changes are introduced. See the [full blog post](https://blog.llamaindex.ai/llamaindex-v0-10-838e735948f8) for complete details.
+
+## [0.9.48] - 2024-02-12
+
+### Bug Fixes / Nits
+
+- Add back deprecated API for BedrockEmbdding (#10581)
+
+## [0.9.47] - 2024-02-11
+
+Last patch before v0.10!
+
+### New Features
+
+- add conditional links to query pipeline (#10520)
+- refactor conditional links + add to cookbook (#10544)
+- agent + query pipeline cleanups (#10563)
+
+### Bug Fixes / Nits
+
+- Add sleep to fix lag in chat stream (#10339)
+- OllamaMultiModal kwargs (#10541)
+- Update Ingestion Pipeline to handle empty documents (#10543)
+- Fixing minor spelling error (#10516)
+- fix elasticsearch async check (#10549)
+- Docs/update slack demo colab (#10534)
+- Adding the possibility to use the IN operator for PGVectorStore (#10547)
+- fix agent reset (#10562)
+- Fix MD duplicated Node id from multiple docs (#10564)
+
+## [0.9.46] - 2024-02-08
+
+### New Features
+
+- Update pooling strategy for embedding models (#10536)
+- Add Multimodal Video RAG example (#10530)
+- Add SECURITY.md (#10531)
+- Move agent module guide up one-level (#10519)
+
+### Bug Fixes / Nits
+
+- Deeplake fixes (#10529)
+- Add Cohere section for llamaindex (#10523)
+- Fix md element (#10510)
+
+## [0.9.45.post1] - 2024-02-07
+
+### New Features
+
+- Upgraded deeplake vector database to use BasePydanticVectorStore (#10504)
+
+### Bug Fixes / Nits
+
+- Fix MD parser for inconsistency tables (#10488)
+- Fix ImportError for pypdf in MetadataExtractionSEC.ipynb (#10491)
+
+## [0.9.45] - 2024-02-07
+
+### New Features
+
+- Refactor: add AgentRunner.from_llm method (#10452)
+- Support custom prompt formatting for non-chat LLMS (#10466)
+- Bump cryptography from 41.0.7 to 42.0.0 (#10467)
+- Add persist and load method for Colbert Index (#10477)
+- Allow custom agent to take in user inputs (#10450)
+
+### Bug Fixes / Nits
+
+- remove exporter from arize-phoenix global callback handler (#10465)
+- Fixing Dashscope qwen llm bug (#10471)
+- Fix: calling AWS Bedrock models (#10443)
+- Update Azure AI Search (fka Azure Cognitive Search) vector store integration to latest client SDK 11.4.0 stable + updating jupyter notebook sample (#10416)
+- fix some imports (#10485)
+
+## [0.9.44] - 2024-02-05
+
+### New Features
+
+- ollama vision cookbook (#10438)
+- Support Gemini "transport" configuration (#10457)
+- Add Upstash Vector (#10451)
+
+## [0.9.43] - 2024-02-03
+
+### New Features
+
+- Add multi-modal ollama (#10434)
+
+### Bug Fixes / Nits
+
+- update base class for astradb (#10435)
+
+## [0.9.42.post1] - 2024-02-02
+
+### New Features
+
+- Add Async support for Base nodes parser (#10418)
+
+## [0.9.42] - 2024-02-02
+
+### New Features
+
+- Add support for `gpt-3.5-turbo-0125` (#10412)
+- Added `create-llama` support to rag cli (#10405)
+
+### Bug Fixes / Nits
+
+- Fixed minor bugs in lance-db vector store (#10404)
+- Fixed streaming bug in ollama (#10407)
+
+## [0.9.41] - 2024-02-01
+
+### New Features
+
+- Nomic Embedding (#10388)
+- Dashvector support sparse vector (#10386)
+- Table QA with MarkDownParser and Benchmarking (#10382)
+- Simple web page reader (#10395)
+
+### Bug Fixes / Nits
+
+- fix full node content in KeywordExtractor (#10398)
+
+## [0.9.40] - 2024-01-30
+
+### New Features
+
+- Improve and fix bugs for MarkdownElementNodeParser (#10340)
+- Fixed and improve Perplexity support for new models (#10319)
+- Ensure system_prompt is passed to Perplexity LLM (#10326)
+- Extended BaseRetrievalEvaluator to include an optional PostProcessor (#10321)
+
+## [0.9.39] - 2024-01-26
+
+### New Features
+
+- Support for new GPT Turbo Models (#10291)
+- Support Multiple docs for Sentence Transformer Fine tuning(#10297)
+
+### Bug Fixes / Nits
+
+- Marvin imports fixed (#9864)
+
+## [0.9.38] - 2024-01-25
+
+### New Features
+
+- Support for new OpenAI v3 embedding models (#10279)
+
+### Bug Fixes / Nits
+
+- Extra checks on sparse embeddings for qdrant (#10275)
+
+## [0.9.37] - 2024-01-24
+
+### New Features
+
+- Added a RAG CLI utility (#10193)
+- Added a textai vector store (#10240)
+- Added a Postgresql based docstore and index store (#10233)
+- specify tool spec in tool specs (#10263)
+
+### Bug Fixes / Nits
+
+- Fixed serialization error in ollama chat (#10230)
+- Added missing fields to `SentenceTransformerRerank` (#10225)
+- Fixed title extraction (#10209, #10226)
+- nit: make chainable output parser more exposed in library/docs (#10262)
+- :bug: summary index not carrying over excluded metadata keys (#10259)
+
+## [0.9.36] - 2024-01-23
+
+### New Features
+
+- Added support for `SageMakerEmbedding` (#10207)
+
+### Bug Fixes / Nits
+
+- Fix duplicated `file_id` on openai assistant (#10223)
+- Fix circular dependencies for programs (#10222)
+- Run `TitleExtractor` on groups of nodes from the same parent document (#10209)
+- Improve vectara auto-retrieval (#10195)
+
+## [0.9.35] - 2024-01-22
+
+### New Features
+
+- `beautifulsoup4` dependency to new optional extra `html` (#10156)
+- make `BaseNode.hash` an `@property` (#10163)
+- Neutrino (#10150)
+- feat: JSONalyze Query Engine (#10067)
+- [wip] add custom hybrid retriever notebook (#10164)
+- add from_collection method to ChromaVectorStore class (#10167)
+- CLI experiment v0: ask (#10168)
+- make react agent prompts more editable (#10154)
+- Add agent query pipeline (#10180)
+
+### Bug Fixes / Nits
+
+- Update supabase vecs metadata filter function to support multiple fields (#10133)
+- Bugfix/code improvement for LanceDB integration (#10144)
+- `beautifulsoup4` optional dependency (#10156)
+- Fix qdrant aquery hybrid search (#10159)
+- make hash a @property (#10163)
+- fix: bug on poetry install of llama-index[postgres] (#10171)
+- [doc] update jaguar vector store documentation (#10179)
+- Remove use of not-launched finish_message (#10188)
+- Updates to Lantern vector stores docs (#10192)
+- fix typo in multi_document_agents.ipynb (#10196)
+
+## [0.9.34] - 2024-01-19
+
+### New Features
+
+- Added SageMakerEndpointLLM (#10140)
+- Added support for Qdrant filters (#10136)
+
+### Bug Fixes / Nits
+
+- Update bedrock utils for Claude 2:1 (#10139)
+- BugFix: deadlocks using multiprocessing (#10125)
+
+## [0.9.33] - 2024-01-17
+
+### New Features
+
+- Added RankGPT as a postprocessor (#10054)
+- Ensure backwards compatibility with new Pinecone client version bifucation (#9995)
+- Recursive retriever all the things (#10019)
+
+### Bug Fixes / Nits
+
+- BugFix: When using markdown element parser on a table containing comma (#9926)
+- extend auto-retrieval notebook (#10065)
+- Updated the Attribute name in llm_generators (#10070)
+- jaguar vector store add text_tag to add_kwargs in add() (#10057)
+
+## [0.9.32] - 2024-01-16
+
+### New Features
+
+- added query-time row retrieval + fix nits with query pipeline over structured data (#10061)
+- ReActive Agents w/ Context + updated stale link (#10058)
+
+## [0.9.31] - 2024-01-15
+
+### New Features
+
+- Added selectors and routers to query pipeline (#9979)
+- Added sparse-only search to qdrant vector store (#10041)
+- Added Tonic evaluators (#10000)
+- Adding async support to firestore docstore (#9983)
+- Implement mongodb docstore `put_all` method (#10014)
+
+### Bug Fixes / Nits
+
+- Properly truncate sql results based on `max_string_length` (#10015)
+- Fixed `node.resolve_image()` for base64 strings (#10026)
+- Fixed cohere system prompt role (#10020)
+- Remove redundant token counting operation in SentenceSplitter (#10053)
+
+## [0.9.30] - 2024-01-11
+
+### New Features
+
+- Implements a Node Parser using embeddings for Semantic Splitting (#9988)
+- Add Anyscale Embedding model support (#9470)
+
+### Bug Fixes / Nits
+
+- nit: fix pandas get prompt (#10001)
+- Fix: Token counting bug (#9912)
+- Bump jinja2 from 3.1.2 to 3.1.3 (#9997)
+- Fix corner case for qdrant hybrid search (#9993)
+- Bugfix: sphinx generation errors (#9944)
+- Fix: `language` used before assignment in `CodeSplitter` (#9987)
+- fix inconsistent name "text_parser" in section "Use a Text Splitter… (#9980)
+- :bug: fixing batch size (#9982)
+- add auto-async execution to query pipelines (#9967)
+- :bug: fixing init (#9977)
+- Parallel Loading with SimpleDirectoryReader (#9965)
+- do not force delete an index in milvus (#9974)
+
+## [0.9.29] - 2024-01-10
+
+### New Features
+
+- Added support for together.ai models (#9962)
+- Added support for batch redis/firestore kvstores, async firestore kvstore (#9827)
+- Parallelize `IngestionPipeline.run()` (#9920)
+- Added new query pipeline components: function, argpack, kwargpack (#9952)
+
+### Bug Fixes / Nits
+
+- Updated optional langchain imports to avoid warnings (#9964)
+- Raise an error if empty nodes are embedded (#9953)
+
+## [0.9.28] - 2024-01-09
+
+### New Features
+
+- Added support for Nvidia TenorRT LLM (#9842)
+- Allow `tool_choice` to be set during agent construction (#9924)
+- Added streaming support for `QueryPipeline` (#9919)
+
+### Bug Fixes / Nits
+
+- Set consistent doc-ids for llama-index readers (#9923, #9916)
+- Remove unneeded model inputs for HuggingFaceEmbedding (#9922)
+- Propagate `tool_choice` flag to downstream APIs (#9901)
+- Add `chat_store_key` to chat memory `from_defaults()` (#9928)
+
+## [0.9.27] - 2024-01-08
+
+### New Features
+
+- add query pipeline (#9908)
+- Feature: Azure Multi Modal (fixes: #9471) (#9843)
+- add postgres docker (#9906)
+- Vectara auto_retriever (#9865)
+- Redis Chat Store support (#9880)
+- move more classes to core (#9871)
+
+### Bug Fixes / Nits / Smaller Features
+
+- Propagate `tool_choice` flag to downstream APIs (#9901)
+- filter out negative indexes from faiss query (#9907)
+- added NE filter for qdrant payloads (#9897)
+- Fix incorrect id assignment in MyScale query result (#9900)
+- Qdrant Text Match Filter (#9895)
+- Fusion top k for hybrid search (#9894)
+- Fix (#9867) sync_to_async to avoid blocking during asynchronous calls (#9869)
+- A single node passed into compute_scores returns as a float (#9866)
+- Remove extra linting steps (#9878)
+- add vectara links (#9886)
+
+## [0.9.26] - 2024-01-05
+
+### New Features
+
+- Added a `BaseChatStore` and `SimpleChatStore` abstraction for dedicated chat memory storage (#9863)
+- Enable custom `tree_sitter` parser to be passed into `CodeSplitter` (#9845)
+- Created a `BaseAutoRetriever` base class, to allow other retrievers to extend to auto modes (#9846)
+- Added support for Nvidia Triton LLM (#9488)
+- Added `DeepEval` one-click observability (#9801)
+
+### Bug Fixes / Nits
+
+- Updated the guidance integration to work with the latest version (#9830)
+- Made text storage optional for doctores/ingestion pipeline (#9847)
+- Added missing `sphinx-automodapi` dependency for docs (#9852)
+- Return actual node ids in weaviate query results (#9854)
+- Added prompt formatting to LangChainLLM (#9844)
+
+## [0.9.25] - 2024-01-03
+
+### New Features
+
+- Added concurrancy limits for dataset generation (#9779)
+- New `deepeval` one-click observability handler (#9801)
+- Added jaguar vector store (#9754)
+- Add beta multimodal ReAct agent (#9807)
+
+### Bug Fixes / Nits
+
+- Changed default batch size for OpenAI embeddings to 100 (#9805)
+- Use batch size properly for qdrant upserts (#9814)
+- `_verify_source_safety` uses AST, not regexes, for proper safety checks (#9789)
+- use provided LLM in element node parsers (#9776)
+- updated legacy vectordb loading function to be more robust (#9773)
+- Use provided http client in AzureOpenAI (#9772)
+
+## [0.9.24] - 2023-12-30
+
+### New Features
+
+- Add reranker for BEIR evaluation (#9743)
+- Add Pathway integration. (#9719)
+- custom agents implementation + notebook (#9746)
+
+### Bug Fixes / Nits
+
+- fix beam search for vllm: add missing parameter (#9741)
+- Fix alpha for hrbrid search (#9742)
+- fix token counter (#9744)
+- BM25 tokenizer lowercase (#9745)
+
+## [0.9.23] - 2023-12-28
+
+### Bug Fixes / Nits
+
+- docs: fixes qdrant_hybrid.ipynb typos (#9729)
+- make llm completion program more general (#9731)
+- Refactor MM Vector store and Index for empty collection (#9717)
+- Adding IF statement to check for Schema using "Select" (#9712)
+- allow skipping module loading in `download_module` and `download_llama_pack` (#9734)
+
+## [0.9.22] - 2023-12-26
+
+### New Features
+
+- Added `.iter_data()` method to `SimpleDirectoryReader` (#9658)
+- Added async support to `Ollama` LLM (#9689)
+- Expanding pinecone filter support for `in` and `not in` (#9683)
+
+### Bug Fixes / Nits
+
+- Improve BM25Retriever performance (#9675)
+- Improved qdrant hybrid search error handling (#9707)
+- Fixed `None` handling in `ChromaVectorStore` (#9697)
+- Fixed postgres schema creation if not existing (#9712)
+
+## [0.9.21] - 2023-12-23
+
+### New Features
+
+- Added zilliz cloud as a managed index (#9605)
+
+### Bug Fixes / Nits
+
+- Bedrock client and LLM fixes (#9671, #9646)
+
+## [0.9.20] - 2023-12-21
+
+### New Features
+
+- Added `insert_batch_size` to limit number of embeddings held in memory when creating an index, defaults to 2048 (#9630)
+- Improve auto-retrieval (#9647)
+- Configurable Node ID Generating Function (#9574)
+- Introduced action input parser (#9575)
+- qdrant sparse vector support (#9644)
+- Introduced upserts and delete in ingestion pipeline (#9643)
+- Add Zilliz Cloud Pipeline as a Managed Index (#9605)
+- Add support for Google Gemini models via VertexAI (#9624)
+- support allowing additional metadata filters on autoretriever (#9662)
+
+### Bug Fixes / Nits
+
+- Fix pip install commands in LM Format Enforcer notebooks (#9648)
+- Fixing some more links and documentations (#9633)
+- some bedrock nits and fixes (#9646)
+
+## [0.9.19] - 2023-12-20
+
+### New Features
+
+- new llama datasets `LabelledEvaluatorDataset` & `LabelledPairwiseEvaluatorDataset` (#9531)
+
+## [0.9.18] - 2023-12-20
+
+### New Features
+
+- multi-doc auto-retrieval guide (#9631)
+
+### Bug Fixes / Nits
+
+- fix(vllm): make Vllm's 'complete' method behave the same as other LLM class (#9634)
+- FIx Doc links and other documentation issue (#9632)
+
+## [0.9.17] - 2023-12-19
+
+### New Features
+
+- [example] adding user feedback (#9601)
+- FEATURE: Cohere ReRank Relevancy Metric for Retrieval Eval (#9495)
+
+### Bug Fixes / Nits
+
+- Fix Gemini Chat Mode (#9599)
+- Fixed `types-protobuf` from being a primary dependency (#9595)
+- Adding an optional auth token to the TextEmbeddingInference class (#9606)
+- fix: out of index get latest tool call (#9608)
+- fix(azure_openai.py): add missing return to subclass override (#9598)
+- fix mix up b/w 'formatted' and 'format' params for ollama api call (#9594)
+
+## [0.9.16] - 2023-12-18
+
+### New Features
+
+- agent refactor: step-wise execution (#9584)
+- Add OpenRouter, with Mixtral demo (#9464)
+- Add hybrid search to neo4j vector store (#9530)
+- Add support for auth service accounts for Google Semantic Retriever (#9545)
+
+### Bug Fixes / Nits
+
+- Fixed missing `default=None` for `LLM.system_prompt` (#9504)
+- Fix #9580 : Incorporate metadata properly (#9582)
+- Integrations: Gradient[Embeddings,LLM] - sdk-upgrade (#9528)
+- Add mixtral 8x7b model to anyscale available models (#9573)
+- Gemini Model Checks (#9563)
+- Update OpenAI fine-tuning with latest changes (#9564)
+- fix/Reintroduce `WHERE` filter to the Sparse Query for PgVectorStore (#9529)
+- Update Ollama API to ollama v0.1.16 (#9558)
+- ollama: strip invalid `formatted` option (#9555)
+- add a device in optimum push #9541 (#9554)
+- Title vs content difference for Gemini Embedding (#9547)
+- fix pydantic fields to float (#9542)
+
+## [0.9.15] - 2023-12-13
+
+### New Features
+
+- Added full support for Google Gemini text+vision models (#9452)
+- Added new Google Semantic Retriever (#9440)
+- added `from_existing()` method + async support to OpenAI assistants (#9367)
+
+### Bug Fixes / Nits
+
+- Fixed huggingface LLM system prompt and messages to prompt (#9463)
+- Fixed ollama additional kwargs usage (#9455)
+
+## [0.9.14] - 2023-12-11
+
+### New Features
+
+- Add MistralAI LLM (#9444)
+- Add MistralAI Embeddings (#9441)
+- Add `Ollama` Embedding class (#9341)
+- Add `FlagEmbeddingReranker` for reranking (#9285)
+- feat: PgVectorStore support advanced metadata filtering (#9377)
+- Added `sql_only` parameter to SQL query engines to avoid executing SQL (#9422)
+
+### Bug Fixes / Nits
+
+- Feat/PgVector Support custom hnsw.ef_search and ivfflat.probes (#9420)
+- fix F1 score definition, update copyright year (#9424)
+- Change more than one image input for Replicate Multi-modal models from error to warning (#9360)
+- Removed GPT-Licensed `aiostream` dependency (#9403)
+- Fix result of BedrockEmbedding with Cohere model (#9396)
+- Only capture valid tool names in react agent (#9412)
+- Fixed `top_k` being multiplied by 10 in azure cosmos (#9438)
+- Fixed hybrid search for OpenSearch (#9430)
+
+### Breaking Changes
+
+- Updated the base `LLM` interface to match `LLMPredictor` (#9388)
+- Deprecated `LLMPredictor` (#9388)
+
+## [0.9.13] - 2023-12-06
+
+### New Features
+
+- Added batch prediction support for `LabelledRagDataset` (#9332)
+
+### Bug Fixes / Nits
+
+- Fixed save and load for faiss vector store (#9330)
+
+## [0.9.12] - 2023-12-05
+
+### New Features
+
+- Added an option `reuse_client` to openai/azure to help with async timeouts. Set to `False` to see improvements (#9301)
+- Added support for `vLLM` llm (#9257)
+- Add support for python 3.12 (#9304)
+- Support for `claude-2.1` model name (#9275)
+
+### Bug Fixes / Nits
+
+- Fix embedding format for bedrock cohere embeddings (#9265)
+- Use `delete_kwargs` for filtering in weaviate vector store (#9300)
+- Fixed automatic qdrant client construction (#9267)
+
+## [0.9.11] - 2023-12-03
+
+### New Features
+
+- Make `reference_contexts` optional in `LabelledRagDataset` (#9266)
+- Re-organize `download` module (#9253)
+- Added document management to ingestion pipeline (#9135)
+- Add docs for `LabelledRagDataset` (#9228)
+- Add submission template notebook and other doc updates for `LabelledRagDataset` (#9273)
+
+### Bug Fixes / Nits
+
+- Convert numpy to list for `InstructorEmbedding` (#9255)
+
+## [0.9.10] - 2023-11-30
+
+### New Features
+
+- Advanced Metadata filter for vector stores (#9216)
+- Amazon Bedrock Embeddings New models (#9222)
+- Added PromptLayer callback integration (#9190)
+- Reuse file ids for `OpenAIAssistant` (#9125)
+
+### Breaking Changes / Deprecations
+
+- Deprecate ExactMatchFilter (#9216)
+
+## [0.9.9] - 2023-11-29
+
+### New Features
+
+- Add new abstractions for `LlamaDataset`'s (#9165)
+- Add metadata filtering and MMR mode support for `AstraDBVectorStore` (#9193)
+- Allowing newest `scikit-learn` versions (#9213)
+
+### Breaking Changes / Deprecations
+
+- Added `LocalAI` demo and began deprecation cycle (#9151)
+- Deprecate `QueryResponseDataset` and `DatasetGenerator` of `evaluation` module (#9165)
+
+### Bug Fixes / Nits
+
+- Fix bug in `download_utils.py` with pointing to wrong repo (#9215)
+- Use `azure_deployment` kwarg in `AzureOpenAILLM` (#9174)
+- Fix similarity score return for `AstraDBVectorStore` Integration (#9193)
+
+## [0.9.8] - 2023-11-26
+
+### New Features
+
+- Add `persist` and `persist_from_dir` methods to `ObjectIndex` that are able to support it (#9064)
+- Added async metadata extraction + pipeline support (#9121)
+- Added back support for start/end char idx in nodes (#9143)
+
+### Bug Fixes / Nits
+
+- Fix for some kwargs not being set properly in global service context (#9137)
+- Small fix for `memory.get()` when system/prefix messages are large (#9149)
+- Minor fixes for global service context (#9137)
+
+## [0.9.7] - 2023-11-24
+
+### New Features
+
+- Add support for `PGVectoRsStore` (#9087)
+- Enforcing `requests>=2.31` for security, while unpinning `urllib3` (#9108)
+
+### Bug Fixes / Nits
+
+- Increased default memory token limit for context chat engine (#9123)
+- Added system prompt to `CondensePlusContextChatEngine` that gets prepended to the `context_prompt` (#9123)
+- Fixed bug in `CondensePlusContextChatEngine` not using chat history properly (#9129)
+
+## [0.9.6] - 2023-11-22
+
+### New Features
+
+- Added `default_headers` argument to openai LLMs (#9090)
+- Added support for `download_llama_pack()` and LlamaPack integrations
+- Added support for `llamaindex-cli` command line tool
+
+### Bug Fixed / Nits
+
+- store normalize as bool for huggingface embedding (#9089)
+
+## [0.9.5] - 2023-11-21
+
+### Bug Fixes / Nits
+
+- Fixed bug with AzureOpenAI logic for inferring if stream chunk is a tool call (#9018)
+
+### New Features
+
+- `FastEmbed` embeddings provider (#9043)
+- More precise testing of `OpenAILike` (#9026)
+- Added callback manager to each retriever (#8871)
+- Ability to bypass `max_tokens` inference with `OpenAILike` (#9032)
+
+### Bug Fixes / Nits
+
+- Fixed bug in formatting chat prompt templates when estimating chunk sizes (#9025)
+- Sandboxed Pandas execution, remediate CVE-2023-39662 (#8890)
+- Restored `mypy` for Python 3.8 (#9031)
+- Loosened `dataclasses-json` version range,
+  and removes unnecessary `jinja2` extra from `pandas` (#9042)
+
+## [0.9.4] - 2023-11-19
+
+### New Features
+
+- Added `CondensePlusContextChatEngine` (#8949)
+
+### Smaller Features / Bug Fixes / Nits
+
+- Fixed bug with `OpenAIAgent` inserting errors into chat history (#9000)
+- Fixed various bugs with LiteLLM and the new OpenAI client (#9003)
+- Added context window attribute to perplexity llm (#9012)
+- Add `node_parser` attribute back to service context (#9013)
+- Refactor MM retriever classes (#8998)
+- Fix TextNode instantiation on SupabaseVectorIndexDemo (#8994)
+
+## [0.9.3] - 2023-11-17
+
+### New Features
+
+- Add perplexity LLM integration (#8734)
+
+### Bug Fixes / Nits
+
+- Fix token counting for new openai client (#8981)
+- Fix small pydantic bug in postgres vector db (#8962)
+- Fixed `chunk_overlap` and `doc_id` bugs in `HierarchicalNodeParser` (#8983)
+
+## [0.9.2] - 2023-11-16
+
+### New Features
+
+- Added new notebook guide for Multi-Modal Rag Evaluation (#8945)
+- Added `MultiModalRelevancyEvaluator`, and `MultiModalFaithfulnessEvaluator` (#8945)
+
+## [0.9.1] - 2023-11-15
+
+### New Features
+
+- Added Cohere Reranker fine-tuning (#8859)
+- Support for custom httpx client in `AzureOpenAI` LLM (#8920)
+
+### Bug Fixes / Nits
+
+- Fixed issue with `set_global_service_context` not propagating settings (#8940)
+- Fixed issue with building index with Google Palm embeddings (#8936)
+- Fixed small issue with parsing ImageDocuments/Nodes that have no text (#8938)
+- Fixed issue with large data inserts in Astra DB (#8937)
+- Optimize `QueryEngineTool` for agents (#8933)
+
+## [0.9.0] - 2023-11-15
+
+### New Features / Breaking Changes / Deprecations
+
+- New `IngestionPipeline` concept for ingesting and transforming data
+- Data ingestion and transforms are now automatically cached
+- Updated interface for node parsing/text splitting/metadata extraction modules
+- Changes to the default tokenizer, as well as customizing the tokenizer
+- Packaging/Installation changes with PyPi (reduced bloat, new install options)
+- More predictable and consistent import paths
+- Plus, in beta: MultiModal RAG Modules for handling text and images!
+- Find more details at: `https://medium.com/@llama_index/719f03282945`
+
+## [0.8.69.post1] - 2023-11-13
+
+### Bug Fixes / Nits
+
+- Increase max weaivate delete size to max of 10,000 (#8887)
+- Final pickling remnant fix (#8902)
+
+## [0.8.69] - 2023-11-13
+
+### Bug Fixes / Nits
+
+- Fixed bug in loading pickled objects (#8880)
+- Fix `custom_path` vs `custom_dir` in `download_loader` (#8865)
+
+## [0.8.68] - 2023-11-11
+
+### New Features
+
+- openai assistant agent + advanced retrieval cookbook (#8863)
+- add retrieval API benchmark (#8850)
+- Add JinaEmbedding class (#8704)
+
+### Bug Fixes / Nits
+
+- Improved default timeouts/retries for OpenAI (#8819)
+- Add back key validation for OpenAI (#8819)
+- Disable automatic LLM/Embedding model downloads, give informative error (#8819)
+- fix openai assistant tool creation + retrieval notebook (#8862)
+- Quick fix Replicate MultiModal example (#8861)
+- fix: paths treated as hidden (#8860)
+- fix Replicate multi-modal LLM + notebook (#8854)
+- Feature/citation metadata (#8722)
+- Fix ImageNode type from NodeWithScore for SimpleMultiModalQueryEngine (#8844)
+
+## [0.8.67] - 2023-11-10
+
+### New Features
+
+- Advanced Multi Modal Retrieval Example and docs (#8822, #8823)
+
+### Bug Fixes / Nits
+
+- Fix retriever node postprocessors for `CitationQueryEngine` (#8818)
+- Fix `cannot pickle 'builtins.CoreBPE' object` in most scenarios (#8835)
+
+## [0.8.66] - 2023-11-09
+
+### New Features
+
+- Support parallel function calling with new OpenAI client in `OpenAIPydanticProgram` (#8793)
+
+### Bug Fixes / Nits
+
+- Fix bug in pydantic programs with new OpenAI client (#8793)
+- Fixed bug with un-listable fsspec objects (#8795)
+
+## [0.8.65] - 2023-11-08
+
+### New Features
+
+- `OpenAIAgent` parallel function calling (#8738)
+
+### New Features
+
+- Properly supporting Hugging Face recommended model (#8784)
+
+### Bug Fixes / Nits
+
+- Fixed missing import for `embeddings.__all__` (#8779)
+
+### Breaking Changes / Deprecations
+
+- Use `tool_choice` over `function_call` and `tool` over `functions` in `OpenAI(LLM)` (#8738)
+- Deprecate `to_openai_function` in favor of `to_openai_tool` (#8738)
+
+## [0.8.64] - 2023-11-06
+
+### New Features
+
+- `OpenAIAgent` parallel function calling (#8738)
+- Add AI assistant agent (#8735)
+- OpenAI GPT4v Abstraction (#8719)
+- Add support for `Lantern` VectorStore (#8714)
+
+### Bug Fixes / Nits
+
+- Fix returning zero nodes in elastic search vector store (#8746)
+- Add try/except for `SimpleDirectoryReader` loop to avoid crashing on a single document (#8744)
+- Fix for `deployment_name` in async embeddings (#8748)
+
+## [0.8.63] - 2023-11-05
+
+### New Features
+
+- added native sync and async client support for the lasted `openai` client package (#8712)
+- added support for `AzureOpenAIEmbedding` (#8712)
+
+### Bug Fixes / Nits
+
+- Fixed errors about "no host supplied" with `download_loader` (#8723)
+
+### Breaking Changes
+
+- `OpenAIEmbedding` no longer supports azure, moved into the `AzureOpenAIEmbedding` class (#8712)
+
+## [0.8.62.post1] - 2023-11-05
+
+### Breaking Changes
+
+- add new devday models (#8713)
+- moved `max_docs` parameter from constructor to `lazy_load_data()` for `SimpleMongoReader` (#8686)
+
+## [0.8.61] - 2023-11-05
+
+### New Features
+
+- [experimental] Hyperparameter tuner (#8687)
+
+### Bug Fixes / Nits
+
+- Fix typo error in CohereAIModelName class: cohere light models was missing v3 (#8684)
+- Update deeplake.py (#8683)
+
+## [0.8.60] - 2023-11-04
+
+### New Features
+
+- prompt optimization guide (#8659)
+- VoyageEmbedding (#8634)
+- Multilingual support for `YoutubeTranscriptReader` (#8673)
+- emotion prompt guide (#8674)
+
+### Bug Fixes / Nits
+
+- Adds mistral 7b instruct v0.1 to available anyscale models (#8652)
+- Make pgvector's setup (extension, schema, and table creation) optional (#8656)
+- Allow init of stores_text variable for Pinecone vector store (#8633)
+- fix: azure ad support (#8667)
+- Fix nltk bug in multi-threaded environments (#8668)
+- Fix google colab link in cohereai notebook (#8677)
+- passing max_tokens to the `Cohere` llm (#8672)
+
+## [0.8.59] - 2023-11-02
+
+- Deepmemory support (#8625)
+- Add CohereAI embeddings (#8650)
+- Add Azure AD (Microsoft Entra ID) support (#8667)
+
+## [0.8.58] - 2023-11-02
+
+### New Features
+
+- Add `lm-format-enforcer` integration for structured output (#8601)
+- Google Vertex Support (#8626)
+
+## [0.8.57] - 2023-10-31
+
+### New Features
+
+- Add `VoyageAIEmbedding` integration (#8634)
+- Add fine-tuning evaluator notebooks (#8596)
+- Add `SingleStoreDB` integration (#7991)
+- Add support for ChromaDB PersistentClient (#8582)
+- Add DataStax Astra DB support (#8609)
+
+### Bug Fixes / Nits
+
+- Update dataType in Weaviate (#8608)
+- In Knowledge Graph Index with hybrid retriever_mode,
+  - return the nodes found by keyword search when 'No Relationship found'
+- Fix exceed context length error in chat engines (#8530)
+- Retrieve actual content of all the triplets from KG (#8579)
+- Return the nodes found by Keywords when no relationship is found by embeddings in hybrid retriever_mode in `KnowledgeGraphIndex` (#8575)
+- Optimize content of retriever tool and minor bug fix (#8588)
+
+## [0.8.56] - 2023-10-30
+
+### New Features
+
+- Add Amazon `BedrockEmbedding` (#8550)
+- Moves `HuggingFaceEmbedding` to center on `Pooling` enum for pooling (#8467)
+- Add IBM WatsonX LLM support (#8587)
+
+### Bug Fixes / Nits
+
+- [Bug] Patch Clarifai classes (#8529)
+- fix retries for bedrock llm (#8528)
+- Fix : VectorStore’s QueryResult always returns saved Node as TextNode (#8521)
+- Added default file_metadata to get basic metadata that many postprocessors use, for SimpleDirectoryReader (#8486)
+- Handle metadata with None values in chromadb (#8584)
+
+## [0.8.55] - 2023-10-29
+
+### New Features
+
+- allow prompts to take in functions with `function_mappings` (#8548)
+- add advanced prompt + "prompt engineering for RAG" notebook (#8555)
+- Leverage Replicate API for serving LLaVa modal (#8539)
+
+### Bug Fixes / Nits
+
+- Update pull request template with google colab support inclusion (#8525)
+
+## [0.8.54] - 2023-10-28
+
+### New Features
+
+- notebook showing how to fine-tune llama2 on structured outputs (#8540)
+  - added GradientAIFineTuningHandler
+  - added pydantic_program_mode to ServiceContext
+- Initialize MultiModal Retrieval using LlamaIndex (#8507)
+
+### Bug Fixes / Nits
+
+- Add missing import to `ChatEngine` usage pattern `.md` doc (#8518)
+- :bug: fixed async add (#8531)
+- fix: add the needed CondenseQuestionChatEngine import in the usage_pa… (#8518)
+- Add import LongLLMLinguaPostprocessor for LongLLMLingua.ipynb (#8519)
+
+## [0.8.53] - 2023-10-27
+
+### New Features
+
+- Docs refactor (#8500)
+  An overhaul of the docs organization. Major changes
+  - Added a big new "understanding" section
+  - Added a big new "optimizing" section
+  - Overhauled Getting Started content
+  - Categorized and moved module guides to a single section
+
+## [0.8.52] - 2023-10-26
+
+### New Features
+
+- Add longllmlingua (#8485)
+- Add google colab support for notebooks (#7560)
+
+### Bug Fixes / Nits
+
+- Adapt Cassandra VectorStore constructor DB connection through cassio.init (#8255)
+- Allow configuration of service context and storage context in managed index (#8487)
+
+## [0.8.51.post1] - 2023-10-25
+
+### New Features
+
+- Add Llava MultiModal QA examples for Tesla 10k RAG (#8271)
+- fix bug streaming on react chat agent not working as expected (#8459)
+
+### Bug Fixes / Nits
+
+- patch: add selected result to response metadata for router query engines, fix bug (#8483)
+- add Jina AI embeddings notebook + huggingface embedding fix (#8478)
+- add `is_chat_model` to replicate (#8469)
+- Brought back `toml-sort` to `pre-commit` (#8267)
+- Added `LocationConstraint` for local `test_s3_kvstore` (#8263)
+
+## [0.8.50] - 2023-10-24
+
+### New Features
+
+- Expose prompts in different modules (query engines, synthesizers, and more) (#8275)
+
+## [0.8.49] - 2023-10-23
+
+### New Features
+
+- New LLM integrations
+  - Support for Hugging Face Inference API's `conversational`, `text_generation`,
+    and `feature_extraction` endpoints via `huggingface_hub[inference]` (#8098)
+  - Add Amazon Bedrock LLMs (#8223)
+  - Add AI21 Labs LLMs (#8233)
+  - Add OpenAILike LLM class for OpenAI-compatible api servers (#7973)
+- New / updated vector store integrations
+  - Add DashVector (#7772)
+  - Add Tencent VectorDB (#8173)
+  - Add option for custom Postgres schema on PGVectorStore instead of only allowing public schema (#8080)
+- Add Gradient fine tuning engine (#8208)
+- docs(FAQ): frequently asked questions (#8249)
+
+### Bug Fixes / Nits
+
+- Fix inconsistencies with `ReActAgent.stream_chat` (#8147)
+- Deprecate some functions for GuardrailsOutputParser (#8016)
+- Simplify dependencies (#8236)
+- Bug fixes for LiteLLM (#7885)
+- Update for Predibase LLM (#8211)
+
+## [0.8.48] - 2023-10-20
+
+### New Features
+
+- Add `DELETE` for MyScale vector store (#8159)
+- Add SQL Retriever (#8197)
+- add semantic kernel document format (#8226)
+- Improve MyScale Hybrid Search and Add `DELETE` for MyScale vector store (#8159)
+
+### Bug Fixes / Nits
+
+- Fixed additional kwargs in ReActAgent.from_tools() (#8206)
+- Fixed missing spaces in prompt templates (#8190)
+- Remove auto-download of llama2-13B on exception (#8225)
+
+## [0.8.47] - 2023-10-19
+
+### New Features
+
+- add response synthesis to text-to-SQL (#8196)
+- Added support for `LLMRailsEmbedding` (#8169)
+- Inferring MPS device with PyTorch (#8195)
+- Consolidated query/text prepending (#8189)
+
+## [0.8.46] - 2023-10-18
+
+### New Features
+
+- Add fine-tuning router support + embedding selector (#8174)
+- add more document converters (#8156)
+
+### Bug Fixes / Nits
+
+- Add normalization to huggingface embeddings (#8145)
+- Improve MyScale Hybrid Search (#8159)
+- Fixed duplicate `FORMAT_STR` being inside prompt (#8171)
+- Added: support for output_kwargs={'max_colwidth': xx} for PandasQueryEngine (#8110)
+- Minor fix in the description for an argument in cohere llm (#8163)
+- Fix Firestore client info (#8166)
+
+## [0.8.45] - 2023-10-13
+
+### New Features
+
+- Added support for fine-tuning cross encoders (#7705)
+- Added `QueryFusionRetriever` for merging multiple retrievers + query augmentation (#8100)
+- Added `nb-clean` to `pre-commit` to minimize PR diffs (#8108)
+- Support for `TextEmbeddingInference` embeddings (#8122)
+
+### Bug Fixes / Nits
+
+- Improved the `BM25Retriever` interface to accept `BaseNode` objects (#8096)
+- Fixed bug with `BM25Retriever` tokenizer not working as expected (#8096)
+- Brought mypy to pass in Python 3.8 (#8107)
+- `ReActAgent` adding missing `super().__init__` call (#8125)
+
+## [0.8.44] - 2023-10-12
+
+### New Features
+
+- add pgvector sql query engine (#8087)
+- Added HoneyHive one-click observability (#7944)
+- Add support for both SQLAlchemy V1 and V2 (#8060)
+
+## [0.8.43.post1] - 2023-10-11
+
+### New Features
+
+- Moves `codespell` to `pre-commit` (#8040)
+- Added `prettier` for autoformatting extensions besides `.py` (#8072)
+
+### Bug Fixes / Nits
+
+- Fixed forgotten f-str in `HuggingFaceLLM` (#8075)
+- Relaxed numpy/panadas reqs
+
+## [0.8.43] - 2023-10-10
+
+### New Features
+
+- Added support for `GradientEmbedding` embed models (#8050)
+
+### Bug Fixes / Nits
+
+- added `messages_to_prompt` kwarg to `HuggingFaceLLM` (#8054)
+- improved selection and sql parsing for open-source models (#8054)
+- fixed bug when agents hallucinate too many kwargs for a tool (#8054)
+- improved prompts and debugging for selection+question generation (#8056)
+
+## [0.8.42] - 2023-10-10
+
+### New Features
+
+- `LocalAI` more intuitive module-level var names (#8028)
+- Enable `codespell` for markdown docs (#7972)
+- add unstructured table element node parser (#8036)
+- Add: Async upserting for Qdrant vector store (#7968)
+- Add cohere llm (#8023)
+
+### Bug Fixes / Nits
+
+- Parse multi-line outputs in react agent answers (#8029)
+- Add properly named kwargs to keyword `as_retriever` calls (#8011)
+- Updating Reference to RAGAS LlamaIndex Integration (#8035)
+- Vectara bugfix (#8032)
+- Fix: ChromaVectorStore can attempt to add in excess of chromadb batch… (#8019)
+- Fix get_content method in Mbox reader (#8012)
+- Apply kwarg filters in WeaviateVectorStore (#8017)
+- Avoid ZeroDivisionError (#8027)
+- `LocalAI` intuitive module-level var names (#8028)
+- zep/fix: imports & typing (#8030)
+- refactor: use `str.join` (#8020)
+- use proper metadata str for node parsing (#7987)
+
+## [0.8.41] - 2023-10-07
+
+### New Features
+
+- You.com retriever (#8024)
+- Pull fields from mongodb into metadata with `metadata_names` argument (#8001)
+- Simplified `LocalAI.__init__` preserving the same behaviors (#7982)
+
+### Bug Fixes / Nits
+
+- Use longest metadata string for metadata aware text splitting (#7987)
+- Handle lists of strings in mongodb reader (#8002)
+- Removes `OpenAI.class_type` as it was dead code (#7983)
+- Fixing `HuggingFaceLLM.device_map` type hint (#7989)
+
+## [0.8.40] - 2023-10-05
+
+### New Features
+
+- Added support for `Clarifai` LLM (#7967)
+- Add support for function fine-tuning (#7971)
+
+### Breaking Changes
+
+- Update document summary index (#7815)
+  - change default retrieval mode to embedding
+  - embed summaries into vector store by default at indexing time (instead of calculating embedding on the fly)
+  - support configuring top k in llm retriever
+
+## [0.8.39] - 2023-10-03
+
+### New Features
+
+- Added support for pydantic object outputs with query engines (#7893)
+- `ClarifaiEmbedding` class added for embedding support (#7940)
+- Markdown node parser, flat file reader and simple file node parser (#7863)
+- Added support for mongdb atlas `$vectorSearch` (#7866)
+
+### Bug Fixes / Nits
+
+- Adds support for using message metadata in discord reader (#7906)
+- Fix `LocalAI` chat capability without `max_tokens` (#7942)
+- Added `codespell` for automated checking (#7941)
+- `ruff` modernization and autofixes (#7889)
+- Implement own SQLDatabase class (#7929)
+- Update LlamaCPP context_params property (#7945)
+- fix duplicate embedding (#7949)
+- Adds `codespell` tool for enforcing good spelling (#7941)
+- Supporting `mypy` local usage with `venv` (#7952)
+- Vectara - minor update (#7954)
+- Avoiding `pydantic` reinstalls in CI (#7956)
+- move tree_sitter_languages into data_requirements.txt (#7955)
+- Add `cache_okay` param to `PGVectorStore` to help suppress TSVector warnings (#7950)
+
+## [0.8.38] - 2023-10-02
+
+### New Features
+
+- Updated `KeywordNodePostprocessor` to use spacy to support more languages (#7894)
+- `LocalAI` supporting global or per-query `/chat/completions` vs `/completions` (#7921)
+- Added notebook on using REBEL + Wikipedia filtering for knowledge graphs (#7919)
+- Added support for `ElasticsearchEmbedding` (#7914)
+
+## [0.8.37] - 2023-09-30
+
+### New Features
+
+- Supporting `LocalAI` LLMs (#7913)
+- Validations protecting against misconfigured chunk sizes (#7917)
+
+### Bug Fixes / Nits
+
+- Simplify NL SQL response to SQL parsing, with expanded NL SQL prompt (#7868)
+- Improve vector store retrieval speed for vectordb integrations (#7876)
+- Added replacing {{ and }}, and fixed JSON parsing recursion (#7888)
+- Nice-ified JSON decoding error (#7891)
+- Nice-ified SQL error from LLM not providing SQL (#7900)
+- Nice-ified `ImportError` for `HuggingFaceLLM` (#7904)
+- eval fixes: fix dataset response generation, add score to evaluators (#7915)
+
+## [0.8.36] - 2023-09-27
+
+### New Features
+
+- add "build RAG from scratch notebook" - OSS/local (#7864)
+
+### Bug Fixes / Nits
+
+- Fix elasticsearch hybrid scoring (#7852)
+- Replace `get_color_mapping` and `print_text` Langchain dependency with internal implementation (#7845)
+- Fix async streaming with azure (#7856)
+- Avoid `NotImplementedError()` in sub question generator (#7855)
+- Patch predibase initialization (#7859)
+- Bumped min langchain version and changed prompt imports from langchain (#7862)
+
+## [0.8.35] - 2023-09-27
+
+### Bug Fixes / Nits
+
+- Fix dropping textnodes in recursive retriever (#7840)
+- share callback_manager between agent and its llm when callback_manager is None (#7844)
+- fix pandas query engine (#7847)
+
+## [0.8.34] - 2023-09-26
+
+### New Features
+
+- Added `Konko` LLM support (#7775)
+- Add before/after context sentence (#7821)
+- EverlyAI integration with LlamaIndex through OpenAI library (#7820)
+- add Arize Phoenix tracer to global handlers (#7835)
+
+### Bug Fixes / Nits
+
+- Normalize scores returned from ElasticSearch vector store (#7792)
+- Fixed `refresh_ref_docs()` bug with order of operations (#7664)
+- Delay postgresql connection for `PGVectorStore` until actually needed (#7793)
+- Fix KeyError in delete method of `SimpleVectorStore` related to metadata filters (#7829)
+- Fix KeyError in delete method of `SimpleVectorStore` related to metadata filters (#7831)
+- Addressing PyYAML import error (#7784)
+- ElasticsearchStore: Update User-Agent + Add example docker compose (#7832)
+- `StorageContext.persist` supporting `Path` (#7783)
+- Update ollama.py (#7839)
+- fix bug for self.\_session_pool (#7834)
+
+## [0.8.33] - 2023-09-25
+
+### New Features
+
+- add pairwise evaluator + benchmark auto-merging retriever (#7810)
+
+### Bug Fixes / Nits
+
+- Minor cleanup in embedding class (#7813)
+- Misc updates to `OpenAIEmbedding` (#7811)
+
+## [0.8.32] - 2023-09-24
+
+### New Features
+
+- Added native support for `HuggingFaceEmbedding`, `InstructorEmbedding`, and `OptimumEmbedding` (#7795)
+- Added metadata filtering and hybrid search to MyScale vector store (#7780)
+- Allowing custom text field name for Milvus (#7790)
+- Add support for `vector_store_query_mode` to `VectorIndexAutoRetriever` (#7797)
+
+### Bug Fixes / Nits
+
+- Update `LanceDBVectorStore` to handle score and distance (#7754)
+- Pass LLM to `memory_cls` in `CondenseQuestionChatEngine` (#7785)
+
+## [0.8.31] - 2023-09-22
+
+### New Features
+
+- add pydantic metadata extractor (#7778)
+- Allow users to set the embedding dimensions in azure cognitive vector store (#7734)
+- Add semantic similarity evaluator (#7770)
+
+### Bug Fixes / Nits
+
+- 📝docs: Update Chatbot Tutorial and Notebook (#7767)
+- Fixed response synthesizers with empty nodes (#7773)
+- Fix `NotImplementedError` in auto vector retriever (#7764)
+- Multiple kwargs values in "KnowledgeGraphQueryEngine" bug-fix (#7763)
+- Allow setting azure cognitive search dimensionality (#7734)
+- Pass service context to index for dataset generator (#7748)
+- Fix output parsers for selector templates (#7774)
+- Update Chatbot_SEC.ipynb (#7711)
+- linter/typechecker-friendly improvements to cassandra test (#7771)
+- Expose debug option of `PgVectorStore` (#7776)
+- llms/openai: fix Azure OpenAI by considering `prompt_filter_results` field (#7755)
+
+## [0.8.30] - 2023-09-21
+
+### New Features
+
+- Add support for `gpt-3.5-turbo-instruct` (#7729)
+- Add support for `TimescaleVectorStore` (#7727)
+- Added `LongContextReorder` for lost-in-the-middle issues (#7719)
+- Add retrieval evals (#7738)
+
+### Bug Fixes / Nits
+
+- Added node post-processors to async context chat engine (#7731)
+- Added unique index name for postgres tsv column (#7741)
+
+## [0.8.29.post1] - 2023-09-18
+
+### Bug Fixes / Nits
+
+- Fix langchain import error for embeddings (#7714)
+
+## [0.8.29] - 2023-09-18
+
+### New Features
+
+- Added metadata filtering to the base simple vector store (#7564)
+- add low-level router guide (#7708)
+- Add CustomQueryEngine class (#7703)
+
+### Bug Fixes / Nits
+
+- Fix context window metadata in lite-llm (#7696)
+
+## [0.8.28] - 2023-09-16
+
+### New Features
+
+- Add CorrectnessEvaluator (#7661)
+- Added support for `Ollama` LLMs (#7635)
+- Added `HWPReader` (#7672)
+- Simplified portkey LLM interface (#7669)
+- Added async operation support to `ElasticsearchStore` vector store (#7613)
+- Added support for `LiteLLM` (#7600)
+- Added batch evaluation runner (#7692)
+
+### Bug Fixes / Nits
+
+- Avoid `NotImplementedError` for async langchain embeddings (#7668)
+- Imrpoved reliability of LLM selectors (#7678)
+- Fixed `query_wrapper_prompt` and `system_prompt` for output parsers and completion models (#7678)
+- Fixed node attribute inheritance in citation query engine (#7675)
+
+### Breaking Changes
+
+- Refactor and update `BaseEvaluator` interface to be more consistent (#7661)
+  - Use `evaluate` function for generic input
+  - Use `evaluate_response` function with `Response` objects from llama index query engine
+- Update existing evaluators with more explicit naming
+  - `ResponseEvaluator` -> `FaithfulnessEvaluator`
+  - `QueryResponseEvaluator` -> `RelevancyEvaluator`
+  - old names are kept as class aliases for backwards compatibility
+
+## [0.8.27] - 2023-09-14
+
+### New Features
+
+- add low-level tutorial section (#7673)
+
+### Bug Fixes / Nits
+
+- default delta should be a dict (#7665)
+- better query wrapper logic on LLMPredictor (#7667)
+
+## [0.8.26] - 2023-09-12
+
+### New Features
+
+- add non-linear embedding adapter (#7658)
+- Add "finetune + RAG" evaluation to knowledge fine-tuning notebook (#7643)
+
+### Bug Fixes / Nits
+
+- Fixed chunk-overlap for sentence splitter (#7590)
+
+## [0.8.25] - 2023-09-12
+
+### New Features
+
+- Added `AGENT_STEP` callback event type (#7652)
+
+### Bug Fixes / Nits
+
+- Allowed `simple` mode to work with `as_chat_engine()` (#7637)
+- Fixed index error in azure streaming (#7646)
+- Removed `pdb` from llama-cpp (#7651)
+
+## [0.8.24] - 2023-09-11
+
+## New Features
+
+- guide: fine-tuning to memorize knowledge (#7626)
+- added ability to customize prompt template for eval modules (#7626)
+
+### Bug Fixes
+
+- Properly detect `llama-cpp-python` version for loading the default GGML or GGUF `llama2-chat-13b` model (#7616)
+- Pass in `summary_template` properly with `RetrieverQueryEngine.from_args()` (#7621)
+- Fix span types in wandb callback (#7631)
+
+## [0.8.23] - 2023-09-09
+
+### Bug Fixes
+
+- Make sure context and system prompt is included in prompt for first chat for llama2 (#7597)
+- Avoid negative chunk size error in refine process (#7607)
+- Fix relationships for small documents in hierarchical node parser (#7611)
+- Update Anyscale Endpoints integration with full streaming and async support (#7602)
+- Better support of passing credentials as LLM constructor args in `OpenAI`, `AzureOpenAI`, and `Anyscale` (#7602)
+
+### Breaking Changes
+
+- Update milvus vector store to support filters and dynamic schemas (#7286)
+  - See the [updated notebook](https://docs.llamaindex.ai/en/stable/examples/vector_stores/MilvusIndexDemo.html) for usage
+- Added NLTK to core dependencies to support the default sentence splitter (#7606)
+
+## [0.8.22] - 2023-09-07
+
+### New Features
+
+- Added support for ElasticSearch Vector Store (#7543)
+
+### Bug Fixes / Nits
+
+- Fixed small `_index` bug in `ElasticSearchReader` (#7570)
+- Fixed bug with prompt helper settings in global service contexts (#7576)
+- Remove newlines from openai embeddings again (#7588)
+- Fixed small bug with setting `query_wrapper_prompt` in the service context (#7585)
+
+### Breaking/Deprecated API Changes
+
+- Clean up vector store interface to use `BaseNode` instead of `NodeWithEmbedding`
+  - For majority of users, this is a no-op change
+  - For users directly operating with the `VectorStore` abstraction and manually constructing `NodeWithEmbedding` objects, this is a minor breaking change. Use `TextNode` with `embedding` set directly, instead of `NodeWithEmbedding`.
+
+## [0.8.21] - 2023-09-06
+
+### New Features
+
+- add embedding adapter fine-tuning engine + guide (#7565)
+- Added support for Azure Cognitive Search vector store (#7469)
+- Support delete in supabase (#6951)
+- Added support for Espilla vector store (#7539)
+- Added support for AnyScale LLM (#7497)
+
+### Bug Fixes / Nits
+
+- Default to user-configurable top-k in `VectorIndexAutoRetriever` (#7556)
+- Catch validation errors for structured responses (#7523)
+- Fix streaming refine template (#7561)
+
+## [0.8.20] - 2023-09-04
+
+### New Features
+
+- Added Portkey LLM integration (#7508)
+- Support postgres/pgvector hybrid search (#7501)
+- upgrade recursive retriever node reference notebook (#7537)
+
+## [0.8.19] - 2023-09-03
+
+### New Features
+
+- replace list index with summary index (#7478)
+- rename list index to summary index part 2 (#7531)
+
+## [0.8.18] - 2023-09-03
+
+### New Features
+
+- add agent finetuning guide (#7526)
+
+## [0.8.17] - 2023-09-02
+
+### New Features
+
+- Make (some) loaders serializable (#7498)
+- add node references to recursive retrieval (#7522)
+
+### Bug Fixes / Nits
+
+- Raise informative error when metadata is too large during splitting (#7513)
+- Allow langchain splitter in simple node parser (#7517)
+
+## [0.8.16] - 2023-09-01
+
+### Bug Fixes / Nits
+
+- fix link to Marvin notebook in docs (#7504)
+- Ensure metadata is not `None` in `SimpleWebPageReader` (#7499)
+- Fixed KGIndex visualization (#7493)
+- Improved empty response in KG Index (#7493)
+
+## [0.8.15] - 2023-08-31
+
+### New Features
+
+- Added support for `MarvinEntityExtractor` metadata extractor (#7438)
+- Added a url_metadata callback to SimpleWebPageReader (#7445)
+- Expanded callback logging events (#7472)
+
+### Bug Fixes / Nits
+
+- Only convert newlines to spaces for text 001 embedding models in OpenAI (#7484)
+- Fix `KnowledgeGraphRagRetriever` for non-nebula indexes (#7488)
+- Support defined embedding dimension in `PGVectorStore` (#7491)
+- Greatly improved similarity calculation speed for the base vector store (#7494)
+
+## [0.8.14] - 2023-08-30
+
+### New Features
+
+- feat: non-kg heterogeneous graph support in Graph RAG (#7459)
+- rag guide (#7480)
+
+### Bug Fixes / Nits
+
+- Improve openai fine-tuned model parsing (#7474)
+- doing some code de-duplication (#7468)
+- support both str and templates for query_wrapper_prompt in HF LLMs (#7473)
+
+## [0.8.13] - 2023-08-29
+
+### New Features
+
+- Add embedding finetuning (#7452)
+- Added support for RunGPT LLM (#7401)
+- Integration guide and notebook with DeepEval (#7425)
+- Added `VectorIndex` and `VectaraRetriever` as a managed index (#7440)
+- Added support for `to_tool_list` to detect and use async functions (#7282)
+
+## [0.8.12] - 2023-08-28
+
+### New Features
+
+- add openai finetuning class (#7442)
+- Service Context to/from dict (#7395)
+- add finetuning guide (#7429)
+
+### Smaller Features / Nits / Bug Fixes
+
+- Add example how to run FalkorDB docker (#7441)
+- Update root.md to use get_response_synthesizer expected type. (#7437)
+- Bugfix MonsterAPI Pydantic version v2/v1 support. Doc Update (#7432)
+
+## [0.8.11.post3] - 2023-08-27
+
+### New Features
+
+- AutoMergingRetriever (#7420)
+
+## [0.8.10.post1] - 2023-08-25
+
+### New Features
+
+- Added support for `MonsterLLM` using MonsterAPI (#7343)
+- Support comments fields in NebulaGraphStore and int type VID (#7402)
+- Added configurable endpoint for DynamoDB (#6777)
+- Add structured answer filtering for Refine response synthesizer (#7317)
+
+### Bug Fixes / Nits
+
+- Use `utf-8` for json file reader (#7390)
+- Fix entity extractor initialization (#7407)
+
+## [0.8.9] - 2023-08-24
+
+### New Features
+
+- Added support for FalkorDB/RedisGraph graph store (#7346)
+- Added directed sub-graph RAG (#7378)
+- Added support for `BM25Retriever` (#7342)
+
+### Bug Fixes / Nits
+
+- Added `max_tokens` to `Xinference` LLM (#7372)
+- Support cache dir creation in multithreaded apps (#7365)
+- Ensure temperature is a float for openai (#7382)
+- Remove duplicate subjects in knowledge graph retriever (#7378)
+- Added support for both pydantic v1 and v2 to allow other apps to move forward (#7394)
+
+### Breaking/Deprecated API Changes
+
+- Refactor prompt template (#7319)
+  - Use `BasePromptTemplate` for generic typing
+  - Use `PromptTemplate`, `ChatPromptTemplate`, `SelectorPromptTemplate` as core implementations
+  - Use `LangchainPromptTemplate` for compatibility with Langchain prompt templates
+  - Fully replace specific prompt classes (e.g. `SummaryPrompt`) with generic `BasePromptTemplate` for typing in codebase.
+  - Keep `Prompt` as an alias for `PromptTemplate` for backwards compatibility.
+  - BREAKING CHANGE: remove support for `Prompt.from_langchain_prompt`, please use `template=LangchainPromptTemplate(lc_template)` instead.
+
+## [0.8.8] - 2023-08-23
+
+### New Features
+
+- `OpenAIFineTuningHandler` for collecting LLM inputs/outputs for OpenAI fine tuning (#7367)
+
+### Bug Fixes / Nits
+
+- Add support for `claude-instant-1.2` (#7369)
+
+## [0.8.7] - 2023-08-22
+
+### New Features
+
+- Support fine-tuned OpenAI models (#7364)
+- Added support for Cassandra vector store (#6784)
+- Support pydantic fields in tool functions (#7348)
+
+### Bug Fixes / Nits
+
+- Fix infinite looping with forced function call in `OpenAIAgent` (#7363)
+
+## [0.8.6] - 2023-08-22
+
+### New Features
+
+- auto vs. recursive retriever notebook (#7353)
+- Reader and Vector Store for BagelDB with example notebooks (#7311)
+
+### Bug Fixes / Nits
+
+- Use service context for intermediate index in retry source query engine (#7341)
+- temp fix for prompt helper + chat models (#7350)
+- Properly skip unit-tests when packages not installed (#7351)
+
+## [0.8.5.post2] - 2023-08-20
+
+### New Features
+
+- Added FireStore docstore/index store support (#7305)
+- add recursive agent notebook (#7330)
+
+### Bug Fixes / Nits
+
+- Fix Azure pydantic error (#7329)
+- fix callback trace ids (make them a context var) (#7331)
+
+## [0.8.5.post1] - 2023-08-18
+
+### New Features
+
+- Awadb Vector Store (#7291)
+
+### Bug Fixes / Nits
+
+- Fix bug in OpenAI llm temperature type
+
+## [0.8.5] - 2023-08-18
+
+### New Features
+
+- Expose a system prompt/query wrapper prompt in the service context for open-source LLMs (#6647)
+- Changed default MyScale index format to `MSTG` (#7288)
+- Added tracing to chat engines/agents (#7304)
+- move LLM and embeddings to pydantic (#7289)
+
+### Bug Fixes / Nits
+
+- Fix sentence splitter bug (#7303)
+- Fix sentence splitter infinite loop (#7295)
+
+## [0.8.4] - 2023-08-17
+
+### Bug Fixes / Nits
+
+- Improve SQL Query parsing (#7283)
+- Fix loading embed_model from global service context (#7284)
+- Limit langchain version until we migrate to pydantic v2 (#7297)
+
+## [0.8.3] - 2023-08-16
+
+### New Features
+
+- Added Knowledge Graph RAG Retriever (#7204)
+
+### Bug Fixes / Nits
+
+- accept `api_key` kwarg in OpenAI LLM class constructor (#7263)
+- Fix to create separate queue instances for separate instances of `StreamingAgentChatResponse` (#7264)
+
+## [0.8.2.post1] - 2023-08-14
+
+### New Features
+
+- Added support for Rockset as a vector store (#7111)
+
+### Bug Fixes
+
+- Fixed bug in service context definition that could disable LLM (#7261)
+
+## [0.8.2] - 2023-08-14
+
+### New Features
+
+- Enable the LLM or embedding model to be disabled by setting to `None` in the service context (#7255)
+- Resolve nearly any huggingface embedding model using the `embed_model="local:<model_name>"` syntax (#7255)
+- Async tool-calling support (#7239)
+
+### Bug Fixes / Nits
+
+- Updated supabase kwargs for add and query (#7103)
+- Small tweak to default prompts to allow for more general purpose queries (#7254)
+- Make callback manager optional for `CustomLLM` + docs update (#7257)
+
+## [0.8.1] - 2023-08-13
+
+### New Features
+
+- feat: add node_postprocessors to ContextChatEngine (#7232)
+- add ensemble query engine tutorial (#7247)
+
+### Smaller Features
+
+- Allow EMPTY keys for Fastchat/local OpenAI API endpoints (#7224)
+
+## [0.8.0] - 2023-08-11
+
+### New Features
+
+- Added "LLAMA_INDEX_CACHE_DIR" to control cached files (#7233)
+- Default to pydantic selectors when possible (#7154, #7223)
+- Remove the need for langchain wrappers on `embed_model` in the service context (#7157)
+- Metadata extractors take an `LLM` object now, in addition to `LLMPredictor` (#7202)
+- Added local mode + fallback to llama.cpp + llama2 (#7200)
+- Added local fallback for embeddings to `BAAI/bge-small-en` (#7200)
+- Added `SentenceWindowNodeParser` + `MetadataReplacementPostProcessor` (#7211)
+
+### Breaking Changes
+
+- Change default LLM to gpt-3.5-turbo from text-davinci-003 (#7223)
+- Change prompts for compact/refine/tree_summarize to work better with gpt-3.5-turbo (#7150, #7179, #7223)
+- Increase default LLM temperature to 0.1 (#7180)
+
+## [0.7.24.post1] - 2023-08-11
+
+### Other Changes
+
+- Reverted #7223 changes to defaults (#7235)
+
+## [0.7.24] - 2023-08-10
+
+### New Features
+
+- Default to pydantic selectors when possible (#7154, #7223)
+- Remove the need for langchain wrappers on `embed_model` in the service context (#7157)
+- Metadata extractors take an `LLM` object now, in addition to `LLMPredictor` (#7202)
+- Added local mode + fallback to llama.cpp + llama2 (#7200)
+- Added local fallback for embeddings to `BAAI/bge-small-en` (#7200)
+- Added `SentenceWindowNodeParser` + `MetadataReplacementPostProcessor` (#7211)
+
+### Breaking Changes
+
+- Change default LLM to gpt-3.5-turbo from text-davinci-003 (#7223)
+- Change prompts for compact/refine/tree_summarize to work better with gpt-3.5-turbo (#7150, #7179, #7223)
+- Increase default LLM temperature to 0.1 (#7180)
+
+### Other Changes
+
+- docs: Improvements to Mendable Search (#7220)
+- Refactor openai agent (#7077)
+
+### Bug Fixes / Nits
+
+- Use `1 - cosine_distance` for pgvector/postgres vector db (#7217)
+- fix metadata formatting and extraction (#7216)
+- fix(readers): Fix non-ASCII JSON Reader bug (#7086)
+- Chore: change PgVectorStore variable name from `sim` to `distance` for clarity (#7226)
+
+## [0.7.23] - 2023-08-10
+
+### Bug Fixes / Nits
+
+- Fixed metadata formatting with custom tempalates and inheritance (#7216)
+
+## [0.7.23] - 2023-08-10
+
+### New Features
+
+- Add "one click observability" page to docs (#7183)
+- Added Xorbits inference for local deployments (#7151)
+- Added Zep vector store integration (#7203)
+- feat/zep vectorstore (#7203)
+
+### Bug Fixes / Nits
+
+- Update the default `EntityExtractor` model (#7209)
+- Make `ChatMemoryBuffer` pickleable (#7205)
+- Refactored `BaseOpenAIAgent` (#7077)
+
+## [0.7.22] - 2023-08-08
+
+### New Features
+
+- add ensemble retriever notebook (#7190)
+- DOCS: added local llama2 notebook (#7146)
+
+### Bug Fixes / Nits
+
+- Fix for `AttributeError: 'OpenAIAgent' object has no attribute 'callback_manager'` by calling super constructor within `BaseOpenAIAgent`
+- Remove backticks from nebula queries (#7192)
+
+## [0.7.21] - 2023-08-07
+
+### New Features
+
+- Added an `EntityExtractor` for metadata extraction (#7163)
+
+## [0.7.20] - 2023-08-06
+
+### New Features
+
+- add router module docs (#7171)
+- add retriever router (#7166)
+
+### New Features
+
+- Added a `RouterRetriever` for routing queries to specific retrievers (#7166)
+
+### Bug Fixes / Nits
+
+- Fix for issue where having multiple concurrent streamed responses from `OpenAIAgent` would result in interleaving of tokens across each response stream. (#7164)
+- fix llms callbacks issue (args[0] error) (#7165)
+
+## [0.7.19] - 2023-08-04
+
+### New Features
+
+- Added metadata filtering to weaviate (#7130)
+- Added token counting (and all callbacks) to agents and streaming (#7122)
+
+## [0.7.18] - 2023-08-03
+
+### New Features
+
+- Added `to/from_string` and `to/from_dict` methods to memory objects (#7128)
+- Include columns comments from db tables in table info for SQL queries (#7124)
+- Add Neo4j support (#7122)
+
+### Bug Fixes / Nits
+
+- Added `Azure AD` validation support to the `AzureOpenAI` class (#7127)
+- add `flush=True` when printing agent/chat engine response stream (#7129)
+- Added `Azure AD` support to the `AzureOpenAI` class (#7127)
+- Update LLM question generator prompt to mention JSON markdown (#7105)
+- Fixed `astream_chat` in chat engines (#7139)
+
+## [0.7.17] - 2023-08-02
+
+### New Features
+
+- Update `ReActAgent` to support memory modules (minor breaking change since the constructor takes `memory` instead of `chat_history`, but the main `from_tools` method remains backward compatible.) (#7116)
+- Update `ReActAgent` to support streaming (#7119)
+- Added Neo4j graph store and query engine integrations (#7122)
+- add object streaming (#7117)
+
+## [0.7.16] - 2023-07-30
+
+### New Features
+
+- Chat source nodes (#7078)
+
+## [0.7.15] - 2023-07-29
+
+### Bug Fixes / Nits
+
+- anthropic api key customization (#7082)
+- Fix broken link to API reference in Contributor Docs (#7080)
+- Update vector store docs (#7076)
+- Update comment (#7073)
+
+## [0.7.14] - 2023-07-28
+
+### New Features
+
+- Added HotpotQADistractor benchmark evaluator (#7034)
+- Add metadata filter and delete support for LanceDB (#7048)
+- Use MetadataFilters in opensearch (#7005)
+- Added support for `KuzuGraphStore` (#6970)
+- Added `kg_triplet_extract_fn` to customize how KGs are built (#7068)
+
+### Bug Fixes / Nits
+
+- Fix string formatting in context chat engine (#7050)
+- Fixed tracing for async events (#7052)
+- Less strict triplet extraction for KGs (#7059)
+- Add configurable limit to KG data retrieved (#7059)
+- Nebula connection improvements (#7059)
+- Bug fix in building source nodes for agent response (#7067)
+
+## [0.7.13] - 2023-07-26
+
+### New Features
+
+- Support function calling api for AzureOpenAI (#7041)
+
+### Bug Fixes / Nits
+
+- tune prompt to get rid of KeyError in SubQ engine (#7039)
+- Fix validation of Azure OpenAI keys (#7042)
+
+## [0.7.12] - 2023-07-25
+
+### New Features
+
+- Added `kwargs` to `ComposableGraph` for the underlying query engines (#6990)
+- Validate openai key on init (#6940)
+- Added async embeddings and async RetrieverQueryEngine (#6587)
+- Added async `aquery` and `async_add` to PGVectorStore (#7031)
+- Added `.source_nodes` attribute to chat engine and agent responses (#7029)
+- Added `OpenInferenceCallback` for storing generation data in OpenInference format (#6998)
+
+### Bug Fixes / Nits
+
+- Fix achat memory initialization for data agents (#7000)
+- Add `print_response_stream()` to agengt/chat engine response class (#7018)
+
+### Bug Fixes / Nits
+
+- Fix achat memory initialization for data agents (#7000)
+- Add `print_response_stream()` to agengt/chat engine response class (#7018)
+
+## [v0.7.11.post1] - 2023-07-20
+
+### New Features
+
+- Default to pydantic question generation when possible for sub-question query engine (#6979)
+
+### Bug Fixes / Nits
+
+- Fix returned order of messages in large chat memory (#6979)
+
+## [v0.7.11] - 2023-07-19
+
+### New Features
+
+- Added a `SentenceTransformerRerank` node post-processor for fast local re-ranking (#6934)
+- Add numpy support for evaluating queries in pandas query engine (#6935)
+- Add metadata filtering support for Postgres Vector Storage integration (#6968)
+- Proper llama2 support for agents and query engines (#6969)
+
+### Bug Fixes / Nits
+
+- Added `model_name` to LLMMetadata (#6911)
+- Fallback to retriever service context in query engines (#6911)
+- Fixed `as_chat_engine()` ValueError with extra kwargs (#6971
+
+## [v0.7.10.post1] - 2023-07-18
+
+### New Features
+
+- Add support for Replicate LLM (vicuna & llama 2!)
+
+### Bug Fixes / Nits
+
+- fix streaming for condense chat engine (#6958)
+
+## [v0.7.10] - 2023-07-17
+
+### New Features
+
+- Add support for chroma v0.4.0 (#6937)
+- Log embedding vectors to callback manager (#6962)
+
+### Bug Fixes / Nits
+
+- add more robust embedding timeouts (#6779)
+- improved connection session management on postgres vector store (#6843)
+
+## [v0.7.9] - 2023-07-15
+
+### New Features
+
+- specify `embed_model="local"` to use default local embbeddings in the service context (#6806)
+- Add async `acall` endpoint to `BasePydanticProgram` (defaults to sync version). Implement for `OpenAIPydanticProgram`
+
+### Bug Fixes / Nits
+
+- fix null metadata for searching existing vector dbs (#6912)
+- add module guide docs for `SimpleDirectoryReader` (#6916)
+- make sure `CondenseQuestionChatEngine` streaming chat endpoints work even if not explicitly setting `streaming=True` in the underlying query engine.
+
+## [v0.7.8] - 2023-07-13
+
+### New Features
+
+- Added embedding speed benchmark (#6876)
+- Added BEIR retrieval benchmark (#6825)
+
+### Bug Fixes / Nits
+
+- remove toctrees from deprecated_terms (#6895)
+- Relax typing dependencies (#6879)
+- docs: modification to evaluation notebook (#6840)
+- raise error if the model does not support functions (#6896)
+- fix(bench embeddings): bug not taking into account string length (#6899)x
+
+## [v0.7.7] - 2023-07-13
+
+### New Features
+
+- Improved milvus consistency support and output fields support (#6452)
+- Added support for knowledge graph querying w/ cypyer+nebula (#6642)
+- Added `Document.example()` to create documents for fast prototyping (#6739)
+- Replace react chat engine to use native reactive agent (#6870)
+
+### Bug Fixes / Nits
+
+- chore: added a help message to makefile (#6861)
+
+### Bug Fixes / Nits
+
+- Fixed support for using SQLTableSchema context_str attribute (#6891)
+
+## [v0.7.6] - 2023-07-12
+
+### New Features
+
+- Added sources to agent/chat engine responses (#6854)
+- Added basic chat buffer memory to agents / chat engines (#6857)
+- Adding load and search tool (#6871)
+- Add simple agent benchmark (#6869)
+- add agent docs (#6866)
+- add react agent (#6865)
+
+### Breaking/Deprecated API Changes
+
+- Replace react chat engine with native react agent (#6870)
+- Set default chat mode to "best": use openai agent when possible, otherwise use react agent (#6870)
+
+### Bug Fixes / Nits
+
+- Fixed support for legacy vector store metadata (#6867)
+- fix chroma notebook in docs (#6872)
+- update LC embeddings docs (#6868)
+
+## [v0.7.5] - 2023-07-11
+
+### New Features
+
+- Add `Anthropic` LLM implementation (#6855)
+
+### Bug Fixes / Nits
+
+- Fix indexing error in `SentenceEmbeddingOptimizer` (#6850)
+- fix doc for custom embedding model (#6851)
+- fix(silent error): Add validation to `SimpleDirectoryReader` (#6819)
+- Fix link in docs (#6833)
+- Fixes Azure gpt-35-turbo model not recognized (#6828)
+- Update Chatbot_SEC.ipynb (#6808)
+- Rename leftover original name to LlamaIndex (#6792)
+- patch nested traces of the same type (#6791)
+
+## [v0.7.4] - 2023-07-08
+
+### New Features
+
+- `MetadataExtractor` - Documnent Metadata Augmentation via LLM-based feature extractors (#6764)
+
+### Bug Fixes / Nits
+
+- fixed passing in query bundle to node postprocessors (#6780)
+- fixed error in callback manager with nested traces (#6791)
+
+## [v0.7.3] - 2023-07-07
+
+### New Features
+
+- Sub question query engine returns source nodes of sub questions in the callback manager (#6745)
+- trulens integration (#6741)
+- Add sources to subquestion engine (#6745)
+
+### Bug Fixes / Nits
+
+- Added/Fixed streaming support to simple and condense chat engines (#6717)
+- fixed `response_mode="no_text"` response synthesizer (#6755)
+- fixed error setting `num_output` and `context_window` in service context (#6766)
+- Fix missing as_query_engine() in tutorial (#6747)
+- Fixed variable sql_query_engine in the notebook (#6778)
+- fix required function fields (#6761)
+- Remove usage of stop token in Prompt, SQL gen (#6782)
+
+## [v0.7.2] - 2023-07-06
+
+### New Features
+
+- Support Azure OpenAI (#6718)
+- Support prefix messages (e.g. system prompt) in chat engine and OpenAI agent (#6723)
+- Added `CBEventType.SUB_QUESTIONS` event type for tracking sub question queries/responses (#6716)
+
+### Bug Fixes / Nits
+
+- Fix HF LLM output error (#6737)
+- Add system message support for langchain message templates (#6743)
+- Fixed applying node-postprocessors (#6749)
+- Add missing `CustomLLM` import under `llama_index.llms` (#6752)
+- fix(typo): `get_transformer_tokenizer_fn` (#6729)
+- feat(formatting): `black[jupyter]` (#6732)
+- fix(test): `test_optimizer_chinese` (#6730)
+
+## [v0.7.1] - 2023-07-05
+
+### New Features
+
+- Streaming support for OpenAI agents (#6694)
+- add recursive retriever + notebook example (#6682)
+
+## [v0.7.0] - 2023-07-04
+
+### New Features
+
+- Index creation progress bars (#6583)
+
+### Bug Fixes/ Nits
+
+- Improved chat refine template (#6645)
+
+### Breaking/Deprecated API Changes
+
+- Change `BaseOpenAIAgent` to use `llama_index.llms.OpenAI`. Adjust `chat_history` to use `List[ChatMessage]]` as type.
+- Remove (previously deprecated) `llama_index.langchain_helpers.chain_wrapper` module.
+- Remove (previously deprecated) `llama_index.token_counter.token_counter` module. See [migration guide](/how_to/callbacks/token_counting_migration.html) for more details on new callback based token counting.
+- Remove `ChatGPTLLMPredictor` and `HuggingFaceLLMPredictor`. See [migration guide](/how_to/customization/llms_migration_guide.html) for more details on replacements.
+- Remove support for setting `cache` via `LLMPredictor` constructor.
+- Update `BaseChatEngine` interface:
+  - adjust `chat_history` to use `List[ChatMessage]]` as type
+  - expose `chat_history` state as a property
+  - support overriding `chat_history` in `chat` and `achat` endpoints
+- Remove deprecated arguments for `PromptHelper`: `max_input_size`, `embedding_limit`, `max_chunk_overlap`
+- Update all notebooks to use native openai integration (#6696)
+
+## [v0.6.38] - 2023-07-02
+
+### New Features
+
+- add optional tqdm progress during index creation (#6583)
+- Added async support for "compact" and "refine" response modes (#6590)
+- [feature]add transformer tokenize functionalities for optimizer (chinese) (#6659)
+- Add simple benchmark for vector store (#6670)
+- Introduce `llama_index.llms` module, with new `LLM` interface, and `OpenAI`, `HuggingFaceLLM`, `LangChainLLM` implementations. (#6615)
+- Evaporate pydantic program (#6666)
+
+### Bug Fixes / Nits
+
+- Improve metadata/node storage and retrieval for RedisVectorStore (#6678)
+- Fixed node vs. document filtering in vector stores (#6677)
+- add context retrieval agent notebook link to docs (#6660)
+- Allow null values for the 'image' property in the ImageNode class and se… (#6661)
+- Fix broken links in docs (#6669)
+- update milvus to store node content (#6667)
+
+## [v0.6.37] - 2023-06-30
+
+### New Features
+
+- add context augmented openai agent (#6655)
+
+## [v0.6.36] - 2023-06-29
+
+### New Features
+
+- Redis support for index stores and docstores (#6575)
+- DuckDB + SQL query engine notebook (#6628)
+- add notebook showcasing deplot data loader (#6638)
+
+### Bug Fixes / Nits
+
+- More robust JSON parsing from LLM for `SelectionOutputParser` (#6610)
+- bring our loaders back in line with llama-hub (#6630)
+- Remove usage of SQLStructStoreIndex in notebooks (#6585)
+- MD reader: remove html tags and leave linebreaks alone (#6618)
+- bump min langchain version to latest version (#6632)
+- Fix metadata column name in postgres vector store (#6622)
+- Postgres metadata fixes (#6626, #6634)
+- fixed links to dataloaders in contribution.md (#6636)
+- fix: typo in docs in creating custom_llm huggingface example (#6639)
+- Updated SelectionOutputParser to handle JSON objects and arrays (#6610)
+- Fixed docstring argument typo (#6652)
+
+## [v0.6.35] - 2023-06-28
+
+- refactor structured output + pydantic programs (#6604)
+
+### Bug Fixes / Nits
+
+- Fix serialization for OpenSearch vector stores (#6612)
+- patch docs relationships (#6606)
+- Bug fix for ignoring directories while parsing git repo (#4196)
+- updated Chroma notebook (#6572)
+- Backport old node name (#6614)
+- Add the ability to change chroma implementation (#6601)
+
+## [v0.6.34] - 2023-06-26
+
+### Patch Update (v0.6.34.post1)
+
+- Patch imports for Document obj for backwards compatibility (#6597)
+
+### New Features
+
+- New `TextNode`/`Document` object classes based on pydantic (#6586)
+- `TextNode`/`Document` objects support metadata customization (metadata templates, exclude metadata from LLM or embeddings) (#6586)
+- Nodes no longer require flat metadata dictionaries, unless the vector store you use requires it (#6586)
+
+### Bug Fixes / Nits
+
+- use `NLTK_DATA` env var to control NLTK download location (#6579)
+- [discord] save author as metadata in group_conversations.py (#6592)
+- bs4 -> beautifulsoup4 in requirements (#6582)
+- negate euclidean distance (#6564)
+- add df output parser notebook link to docs (#6581)
+
+### Breaking/Deprecated API Changes
+
+- `Node` has been renamed to `TextNode` and is imported from `llama_index.schema` (#6586)
+- `TextNode` and `Document` must be instantiated with kwargs: `Document(text=text)` (#6586)
+- `TextNode` (fka `Node`) has a `id_` or `node_id` property, rather than `doc_id` (#6586)
+- `TextNode` and `Document` have a metadata property, which replaces the extra_info property (#6586)
+- `TextNode` no longer has a `node_info` property (start/end indexes are accessed directly with `start/end_char_idx` attributes) (#6586)
+
+## [v0.6.33] - 2023-06-25
+
+### New Features
+
+- Add typesense vector store (#6561)
+- add df output parser (#6576)
+
+### Bug Fixes / Nits
+
+- Track langchain dependency via bridge module. (#6573)
+
+## [v0.6.32] - 2023-06-23
+
+### New Features
+
+- add object index (#6548)
+- add SQL Schema Node Mapping + SQLTableRetrieverQueryEngine + obj index fixes (#6569)
+- sql refactor (NLSQLTableQueryEngine) (#6529)
+
+### Bug Fixes / Nits
+
+- Update vector_stores.md (#6562)
+- Minor `BaseResponseBuilder` interface cleanup (#6557)
+- Refactor TreeSummarize (#6550)
+
+## [v0.6.31] - 2023-06-22
+
+### Bug Fixes / Nits
+
+- properly convert weaviate distance to score (#6545)
+- refactor tree summarize and fix bug to not truncate context (#6550)
+- fix custom KG retrieval notebook nits (#6551)
+
+## [v0.6.30] - 2023-06-21
+
+### New Features
+
+- multi-selector support in router query engine (#6518)
+- pydantic selector support in router query engine using OpenAI function calling API (#6518)
+- streaming response support in `CondenseQuestionChatEngine` and `SimpleChatEngine` (#6524)
+- metadata filtering support in `QdrantVectorStore` (#6476)
+- add `PGVectorStore` to support postgres with pgvector (#6190)
+
+### Bug Fixes / Nits
+
+- better error handling in the mbox reader (#6248)
+- Fix blank similarity score when using weaviate (#6512)
+- fix for sorted nodes in `PrevNextNodePostprocessor` (#6048)
+
+### Breaking/Deprecated API Changes
+
+- Refactor PandasQueryEngine to take in df directly, deprecate PandasIndex (#6527)
+
+## [v0.6.29] - 2023-06-20
+
+### New Features
+
+- query planning tool with OpenAI Function API (#6520)
+- docs: example of kg+vector index (#6497)
+- Set context window sizes for Cohere and AI21(J2 model) (#6485)
+
+### Bug Fixes / Nits
+
+- add default input size for Cohere and AI21 (#6485)
+- docs: replace comma with colon in dict object (#6439)
+- extra space in prompt and error message update (#6443)
+- [Issue 6417] Fix prompt_templates docs page (#6499)
+- Rip out monkey patch and update model to context window mapping (#6490)
+
+## [v0.6.28] - 2023-06-19
+
+### New Features
+
+- New OpenAI Agent + Query Engine Cookbook (#6496)
+- allow recursive data extraction (pydantic program) (#6503)
+
+### Bug Fixes / Nits
+
+- update mongo interface (#6501)
+- fixes that we forgot to include for openai pydantic program (#6503) (#6504)
+- Fix github pics in Airbyte notebook (#6493)
+
+## [v0.6.27] - 2023-06-16
+
+### New Features
+
+- Add node doc_id filtering to weaviate (#6467)
+- New `TokenCountingCallback` to customize and track embedding, prompt, and completion token usage (#6440)
+- OpenAI Retrieval Function Agent (#6491)
+
+### Breaking/Deprecated API Changes
+
+- Deprecated current token tracking (llm predictor and embed model will no longer track tokens in the future, please use the `TokenCountingCallback` (#6440)
+- Add maximal marginal relevance to the Simple Vector Store, which can be enabled as a query mode (#6446)
+
+### Bug Fixes / Nits
+
+- `as_chat_engine` properly inherits the current service context (#6470)
+- Use namespace when deleting from pinecone (#6475)
+- Fix paths when using fsspec on windows (#3778)
+- Fix for using custom file readers in `SimpleDirectoryReader` (#6477)
+- Edit MMR Notebook (#6486)
+- FLARE fixes (#6484)
+
+## [v0.6.26] - 2023-06-14
+
+### New Features
+
+- Add OpenAIAgent and tutorial notebook for "build your own agent" (#6461)
+- Add OpenAIPydanticProgram (#6462)
+
+### Bug Fixes / Nits
+
+- Fix citation engine import (#6456)
+
+## [v0.6.25] - 2023-06-13
+
+### New Features
+
+- Added FLARE query engine (#6419).
+
+## [v0.6.24] - 2023-06-12
+
+### New Features
+
+- Added better support for vector store with existing data (e.g. allow configurable text key) for Pinecone and Weaviate. (#6393)
+- Support batched upsert for Pineone (#6393)
+- Added initial [guidance](https://github.com/microsoft/guidance/) integration. Added `GuidancePydanticProgram` for generic structured output generation and `GuidanceQuestionGenerator` for generating sub-questions in `SubQuestionQueryEngine` (#6246).
+
+## [v0.6.23] - 2023-06-11
+
+### Bug Fixes / Nits
+
+- Remove hardcoded chunk size for citation query engine (#6408)
+- Mongo demo improvements (#6406)
+- Fix notebook (#6418)
+- Cleanup RetryQuery notebook (#6381)
+
+## [v0.6.22] - 2023-06-10
+
+### New Features
+
+- Added `SQLJoinQueryEngine` (generalization of `SQLAutoVectorQueryEngine`) (#6265)
+- Added support for graph stores under the hood, and initial support for Nebula KG. More docs coming soon! (#2581)
+- Added guideline evaluator to allow llm to provide feedback based on user guidelines (#4664)
+- Added support for MongoDB Vector stores to enable Atlas knnbeta search (#6379)
+- Added new CitationQueryEngine for inline citations of sources in response text (#6239)
+
+### Bug Fixes
+
+- Fixed bug with `delete_ref_doc` not removing all metadata from the docstore (#6192)
+- FIxed bug with loading existing QDrantVectorStore (#6230)
+
+### Miscellaneous
+
+- Added changelog officially to github repo (#6191)
+
+## [v0.6.21] - 2023-06-06
+
+### New Features
+
+- SimpleDirectoryReader has new `filename_as_id` flag to automatically set the doc_id (useful for `refresh_ref_docs()`)
+- DocArray vector store integration
+- Tair vector store integration
+- Weights and Biases callback handler for tracing and versioning indexes
+- Can initialize indexes directly from a vector store: `index = VectorStoreIndex.from_vector_store(vector_store=vector_store)`
+
+### Bug Fixes
+
+- Fixed multimodal notebook
+- Updated/fixed the SQL tutorial in the docs
+
+### Miscellaneous
+
+- Minor docs updates
+- Added github pull-requset templates
+- Added github issue-forms
+
+## [v0.6.20] - 2023-06-04
+
+### New Features
+
+- Added new JSONQueryEngine that uses JSON schema to deliver more accurate JSON query answers
+- Metadata support for redis vector-store
+- Added Supabase vector store integration
+
+### Bug Fixes
+
+- Fixed typo in text-to-sql prompt
+
+### Breaking/Deprecated API Changes
+
+- Removed GPT prefix from indexes (old imports/names are still supported though)
+
+### Miscellaneous
+
+- Major docs updates, brought important modules to the top level
+
+## [v0.6.19] - 2023-06-02
+
+### New Features
+
+- Added agent tool abstraction for llama-hub data loaders
+
+### Miscellaneous
+
+- Minor doc updates
+
+## [v0.6.18] - 2023-06-02
+
+### Miscellaneous
+
+- Added `Discover LlamaIndex` video series to the tutorials docs section
+- Minor docs updates
diff --git a/docs/docs/CONTRIBUTING.md b/docs/docs/CONTRIBUTING.md
new file mode 100644
index 0000000000000000000000000000000000000000..d80321b7f33534b50bc6cabce6ad24d4cfa1d86b
--- /dev/null
+++ b/docs/docs/CONTRIBUTING.md
@@ -0,0 +1,443 @@
+# Contributing to LlamaIndex
+
+Interested in contributing to LlamaIndex? Here's how to get started!
+
+## Contribution Guideline
+
+The best part of LlamaIndex is our community of users and contributors.
+
+### What should I work on?
+
+1. 🆕 Extend core modules by contributing an integration
+2. 📦 Contribute a Tool, Reader, Pack, or Dataset (formerly from llama-hub)
+3. 🧠 Add new capabilities to core
+4. 🐛 Fix bugs
+5. 🎉 Add usage examples
+6. 🧪 Add experimental features
+7. 📄 Improve code quality & documentation
+
+Also, join our Discord for ideas and discussions: <https://discord.gg/dGcwcsnxhU>.
+
+### 1. 🆕 Extend Core Modules
+
+The most impactful way to contribute to LlamaIndex is by extending our core modules:
+![LlamaIndex modules](https://github.com/jerryjliu/llama_index/raw/main/docs/_static/contribution/contrib.png)
+
+We welcome contributions in _all_ modules shown above.
+So far, we have implemented a core set of functionalities for each, all of
+which are encapsulated in the LlamaIndex core package. As a contributor,
+you can help each module unlock its full potential. Provided below are
+brief description of these modules. You can also refer to their respective
+folders within this Github repository for some example integrations.
+
+Contributing an integration involves submitting the source code for a new Python
+package. For now, these integrations will live in the LlamaIndex Github repository
+and the team will be responsible for publishing the package to PyPi. (Having
+these packages live outside of this repository and maintained by our community
+members is in consideration.)
+
+#### Creating A New Integration Package
+
+Both `llama-index` and `llama-index-core` come equipped
+with a command-line tool that can be used to initialize a new integration package.
+
+```shell
+cd ./llama-index-integrations/llms
+llamaindex-cli new-package --kind "llms" --name "gemini"
+```
+
+Executing the above commands will create a new folder called `llama-index-llms-gemini`
+within the `llama-index-integrations/llms` directory.
+
+Please ensure to add a detailed README for your new package as it will appear in
+both [llamahub.ai](https://llamahub.ai) as well as the PyPi.org website.
+In addition to preparing your source code and supplying a detailed README, we
+also ask that you fill in some
+metadata for your package to appear in [llamahub.ai](https://llamahub.ai) with the
+correct information. You do so by adding the required metadata under the `[tool.llamahub]`
+section with your new package's `pyproject.toml`.
+
+Below is the example of the metadata required for all of our integration packages. Please
+replace the default author "llama-index" with your own Github user name.
+
+```toml
+[tool.llamahub]
+contains_example = false
+import_path = "llama_index.llms.anthropic"
+
+[tool.llamahub.class_authors]
+Anthropic = "llama-index"
+```
+
+([source](https://github.com/run-llama/llama_index/blob/main/llama-index-integrations/llms/llama-index-llms-anthropic/pyproject.toml))
+
+**NOTE**: We are making rapid improvements to the project, and as a result,
+some interfaces are still volatile. Specifically, we are actively working on making the following components more modular and extensible (uncolored boxes above): core indexes, document stores, index queries, query runner
+
+#### Module Details
+
+Below, we will describe what each module does, give a high-level idea of the interface, show existing implementations, and give some ideas for contribution.
+
+---
+
+#### Data Loaders
+
+A data loader ingests data of any format from anywhere into `Document` objects, which can then be parsed and indexed.
+
+**Interface**:
+
+- `load_data` takes arbitrary arguments as input (e.g. path to data), and outputs a sequence of `Document` objects.
+- `lazy_load_data` takes arbitrary arguments as input (e.g. path to data), and outputs an iterable object of `Document` objects. This is a lazy version of `load_data`, which is useful for large datasets.
+
+> **Note**: If only `lazy_load_data` is implemented, `load_data` will be delegated to it.
+
+**Examples**:
+
+- [Google Sheets Loader](https://github.com/emptycrown/llama-hub/tree/main/llama_hub/google_sheets)
+- [Gmail Loader](https://github.com/emptycrown/llama-hub/tree/main/llama_hub/gmail)
+- [Github Repository Loader](https://github.com/emptycrown/llama-hub/tree/main/llama_hub/github_repo)
+
+Contributing a data loader is easy and super impactful for the community.
+The preferred way to contribute is by making a PR at [LlamaHub Github](https://github.com/emptycrown/llama-hub).
+
+**Ideas**
+
+- Want to load something but there's no LlamaHub data loader for it yet? Make a PR!
+
+---
+
+#### Node Parser
+
+A node parser parses `Document` objects into `Node` objects (atomic units of data that LlamaIndex operates over, e.g., chunk of text, image, or table).
+It is responsible for splitting text (via text splitters) and explicitly modeling the relationship between units of data (e.g. A is the source of B, C is a chunk after D).
+
+**Interface**: `get_nodes_from_documents` takes a sequence of `Document` objects as input, and outputs a sequence of `Node` objects.
+
+**Examples**:
+
+- [Simple Node Parser](https://github.com/jerryjliu/llama_index/blob/main/llama_index/node_parser/simple.py)
+
+See [the API reference](https://docs.llamaindex.ai/en/latest/api_reference/index.html) for full details.
+
+**Ideas**:
+
+- Add new `Node` relationships to model hierarchical documents (e.g. play-act-scene, chapter-section-heading).
+
+---
+
+#### Text Splitters
+
+Text splitter splits a long text `str` into smaller text `str` chunks with desired size and splitting "strategy" since LLMs have a limited context window size, and the quality of text chunk used as context impacts the quality of query results.
+
+**Interface**: `split_text` takes a `str` as input, and outputs a sequence of `str`
+
+**Examples**:
+
+- [Token Text Splitter](https://github.com/jerryjliu/llama_index/blob/main/llama_index/langchain_helpers/text_splitter.py#L26)
+- [Sentence Splitter](https://github.com/jerryjliu/llama_index/blob/main/llama_index/langchain_helpers/text_splitter.py#L276)
+- [Code Splitter](https://github.com/jerryjliu/llama_index/blob/main/llama_index/langchain_helpers/text_splitter.py#L476)
+
+---
+
+#### Document/Index/KV Stores
+
+Under the hood, LlamaIndex also supports a swappable **storage layer** that allows you to customize Document Stores (where ingested documents (i.e., `Node` objects) are stored), and Index Stores (where index metadata are stored)
+
+We have an underlying key-value abstraction backing the document/index stores.
+Currently we support in-memory and MongoDB storage for these stores. Open to contributions!
+
+See [Storage guide](https://docs.llamaindex.ai/en/stable/module_guides/storing/kv_stores.html) for details.
+
+---
+
+#### Managed Index
+
+A managed index is used to represent an index that's managed via an API, exposing API calls to index documents and query documents.
+
+Currently we support the [VectaraIndex](https://github.com/run-llama/llama_index/tree/ca09272af000307762d301c99da46ddc70d3bfd2/llama_index/indices/managed/vectara).
+Open to contributions!
+
+See [Managed Index docs](https://docs.llamaindex.ai/en/stable/community/integrations/managed_indices.html) for details.
+
+---
+
+#### Vector Stores
+
+Our vector store classes store embeddings and support lookup via similarity search.
+These serve as the main data store and retrieval engine for our vector index.
+
+**Interface**:
+
+- `add` takes in a sequence of `NodeWithEmbeddings` and inserts the embeddings (and possibly the node contents & metadata) into the vector store.
+- `delete` removes entries given document IDs.
+- `query` retrieves top-k most similar entries given a query embedding.
+
+**Examples**:
+
+- [Pinecone](https://github.com/jerryjliu/llama_index/blob/main/llama_index/vector_stores/pinecone.py)
+- [Faiss](https://github.com/jerryjliu/llama_index/blob/main/llama_index/vector_stores/faiss.py)
+- [Chroma](https://github.com/jerryjliu/llama_index/blob/main/llama_index/vector_stores/chroma.py)
+- [DashVector](https://github.com/jerryjliu/llama_index/blob/main/llama_index/vector_stores/dashvector.py)
+
+**Ideas**:
+
+- See a vector database out there that we don't support yet? Make a PR!
+
+See [reference](https://docs.llamaindex.ai/en/stable/api_reference/indices/vector_store.html) for full details.
+
+---
+
+#### Retrievers
+
+Our retriever classes are lightweight classes that implement a `retrieve` method.
+They may take in an index class as input - by default, each of our indices
+(list, vector, keyword) has an associated retriever. The output is a set of
+`NodeWithScore` objects (a `Node` object with an extra `score` field).
+
+You may also choose to implement your own retriever classes on top of your own
+data if you wish.
+
+**Interface**:
+
+- `retrieve` takes in a `str` or `QueryBundle` as input, and outputs a list of `NodeWithScore` objects
+
+**Examples**:
+
+- [Vector Index Retriever](https://github.com/jerryjliu/llama_index/blob/main/llama_index/indices/vector_store/retrievers.py)
+- [List Index Retriever](https://github.com/jerryjliu/llama_index/blob/main/llama_index/indices/list/retrievers.py)
+- [Transform Retriever](https://github.com/jerryjliu/llama_index/blob/main/llama_index/retrievers/transform_retriever.py)
+
+**Ideas**:
+
+- Besides the "default" retrievers built on top of each index, what about fancier retrievers? E.g. retrievers that take in other retrievers as input? Or other
+  types of data?
+
+---
+
+#### Query Engines
+
+Our query engine classes are lightweight classes that implement a `query` method; the query returns a response type.
+For instance, they may take in a retriever class as input; our `RetrieverQueryEngine`
+takes in a `retriever` as input as well as a `BaseSynthesizer` class for response synthesis, and
+the `query` method performs retrieval and synthesis before returning the final result.
+They may take in other query engine classes as input too.
+
+**Interface**:
+
+- `query` takes in a `str` or `QueryBundle` as input, and outputs a `Response` object.
+
+**Examples**:
+
+- [Retriever Query Engine](https://github.com/jerryjliu/llama_index/blob/main/llama_index/query_engine/retriever_query_engine.py)
+- [Transform Query Engine](https://github.com/jerryjliu/llama_index/blob/main/llama_index/query_engine/transform_query_engine.py)
+
+---
+
+#### Query Transforms
+
+A query transform augments a raw query string with associated transformations to improve index querying.
+This can interpreted as a pre-processing stage, before the core index query logic is executed.
+
+**Interface**: `run` takes in a `str` or `Querybundle` as input, and outputs a transformed `QueryBundle`.
+
+**Examples**:
+
+- [Hypothetical Document Embeddings](https://github.com/jerryjliu/llama_index/blob/main/llama_index/indices/query/query_transform/base.py#L77)
+- [Query Decompose](https://github.com/jerryjliu/llama_index/blob/main/llama_index/indices/query/query_transform/base.py#L124)
+
+See [guide](https://docs.llamaindex.ai/en/stable/optimizing/advanced_retrieval/query_transformations.html#hyde-hypothetical-document-embeddings) for more information.
+
+---
+
+#### Token Usage Optimizers
+
+A token usage optimizer refines the retrieved `Nodes` to reduce token usage during response synthesis.
+
+**Interface**: `optimize` takes in the `QueryBundle` and a text chunk `str`, and outputs a refined text chunk `str` that yields a more optimized response
+
+**Examples**:
+
+- [Sentence Embedding Optimizer](https://github.com/jerryjliu/llama_index/blob/main/llama_index/optimization/optimizer.py)
+
+---
+
+#### Node Postprocessors
+
+A node postprocessor refines a list of retrieved nodes given configuration and context.
+
+**Interface**: `postprocess_nodes` takes a list of `Nodes` and extra metadata (e.g. similarity and query), and outputs a refined list of `Nodes`.
+
+**Examples**:
+
+- [Keyword Postprocessor](https://github.com/run-llama/llama_index/blob/main/llama_index/postprocessor/node.py#L32): filters nodes based on keyword match
+- [Similarity Postprocessor](https://github.com/run-llama/llama_index/blob/main/llama_index/postprocessor/node.py#L74): filers nodes based on similarity threshold
+- [Prev Next Postprocessor](https://github.com/run-llama/llama_index/blob/main/llama_index/postprocessor/node.py#L175): fetches additional nodes to augment context based on node relationships.
+
+---
+
+#### Output Parsers
+
+An output parser enables us to extract structured output from the plain text output generated by the LLM.
+
+**Interface**:
+
+- `format`: formats a query `str` with structured output formatting instructions, and outputs the formatted `str`
+- `parse`: takes a `str` (from LLM response) as input, and gives a parsed structured output (optionally also validated, error-corrected).
+
+**Examples**:
+
+- [Guardrails Output Parser](https://github.com/jerryjliu/llama_index/blob/main/llama_index/output_parsers/guardrails.py)
+- [Langchain Output Parser](https://github.com/jerryjliu/llama_index/blob/main/llama_index/output_parsers/langchain.py)
+
+See [guide](https://docs.llamaindex.ai/en/stable/module_guides/querying/structured_outputs/output_parser.html) for more information.
+
+---
+
+### 2. 📦 Contribute a Pack, Reader, Tool, or Dataset (formerly from llama-hub)
+
+Tools, Readers, and Packs have all been migrated from [llama-hub](https://github.com/run-llama/llama-hub) to the main
+llama-index repo (i.e., this one). Datasets still reside in llama-hub, but will be
+migrated here in the near future.
+
+Contributing a new Reader or Tool involves submitting a new package within
+the [llama-index-integrations/readers](https://github.com/run-llama/llama_index/tree/main/llama-index-integrations/readers) and [llama-index-integrations/tools](https://github.com/run-llama/llama_index/tree/main/llama-index-integrations/tools),
+folders respectively.
+
+The LlamaIndex command-line tool can be used to initialize new Packs and Integrations. (NOTE: `llama-index-cli` comes installed with `llama-index`.)
+
+```shell
+cd ./llama-index-packs
+llamaindex-cli new-package --kind "packs" --name "my new pack"
+
+cd ./llama-index-integrations/readers
+llamaindex-cli new-package --kind "readers" --name "new reader"
+```
+
+Executing the first set of shell commands will create a new folder called `llama-index-packs-my-new-pack`
+within the `llama-index-packs` directory. While the second set will create a new
+package directory called `llama-index-readers-new-reader` within the `llama-index-integrations/readers` directory.
+
+Please ensure to add a detailed README for your new package as it will appear in
+both [llamahub.ai](https://llamahub.ai) as well as the PyPi.org website.
+In addition to preparing your source code and supplying a detailed README, we
+also ask that you fill in some
+metadata for your package to appear in [llamahub.ai](https://llamahub.ai) with the
+correct information. You do so by adding the required metadata under the `[tool.llamahub]`
+section with your new package's `pyproject.toml`.
+
+Below is the example of the metadata required for packs, readers and tools:
+
+```toml
+[tool.llamahub]
+contains_example = true
+import_path = "llama_index.packs.agent_search_retriever"
+
+[tool.llamahub.class_authors]
+AgentSearchRetrieverPack = "logan-markewich"
+```
+
+([source](https://github.com/run-llama/llama_index/blob/main/llama-index-packs/llama-index-packs-agent-search-retriever/pyproject.toml))
+
+### 3. 🧠 Add new capabilities to core
+
+We would greatly appreciate any and all contributions to our core abstractions
+that represent enhancements from the current set of capabilities.
+General improvements that make these core abstractions more robust and thus
+easier to build on are also welcome!
+
+A [Requests For Contribution Project Board](https://github.com/orgs/run-llama/projects/2)
+has been curated and can provide some ideas for what contributions can be made
+into core.
+
+### 4. 🐛 Fix Bugs
+
+Most bugs are reported and tracked in the [Github Issues Page](https://github.com/jerryjliu/llama_index/issues).
+We try our best in triaging and tagging these issues:
+
+- Issues tagged as `bug` are confirmed bugs.
+- New contributors may want to start with issues tagged with `good first issue`.
+
+Please feel free to open an issue and/or assign an issue to yourself.
+
+### 5. 🎉 Add Usage Examples
+
+If you have applied LlamaIndex to a unique use-case (e.g. interesting dataset, customized index structure, complex query), we would love your contribution in the form of:
+
+1. a guide: e.g. [Guide to LlamIndex + Structured Data](https://docs.llamaindex.ai/en/stable/understanding/putting_it_all_together/structured_data.html)
+2. an example notebook: e.g. [Email Info Extraction](/examples/usecases/email_data_extraction.ipynb)
+
+### 6. 🧪 Add Experimental Features
+
+If you have a crazy idea, make a PR for it!
+Whether if it's the latest research, or what you thought of in the shower, we'd love to see creative ways to improve LlamaIndex.
+
+### 7. 📄 Improve Code Quality & Documentation
+
+We would love your help in making the project cleaner, more robust, and more understandable. If you find something confusing, it most likely is for other people as well. Help us be better!
+
+## Development Guideline
+
+### Environment Setup
+
+LlamaIndex is a Python package. We've tested primarily with Python versions >= 3.8. Here's a quick
+and dirty guide to getting your environment setup.
+
+First, create a fork of LlamaIndex, by clicking the "Fork" button on the [LlamaIndex Github page](https://github.com/jerryjliu/llama_index).
+Following [these steps](https://docs.github.com/en/get-started/quickstart/fork-a-repo) for more details
+on how to fork the repo and clone the forked repo.
+
+Then, create a new Python virtual environment using poetry.
+
+- [Install poetry](https://python-poetry.org/docs/#installation) - this will help you manage package dependencies
+- `poetry shell` - this command creates a virtual environment, which keeps installed packages contained to this project
+- `poetry install --with dev,docs` - this will install all dependencies needed for most local development
+
+Now you should be set!
+
+### Validating your Change
+
+Let's make sure to `format/lint` our change. For bigger changes,
+let's also make sure to `test` it and perhaps create an `example notebook`.
+
+#### Formatting/Linting
+
+You can format and lint your changes with the following commands in the root directory:
+
+```bash
+make format; make lint
+```
+
+You can also make use of our pre-commit hooks by setting up git hook scripts:
+
+```bash
+pre-commit install
+```
+
+We run an assortment of linters: `black`, `ruff`, `mypy`.
+
+#### Testing
+
+For bigger changes, you'll want to create a unit test. Our tests are in the `tests` folder.
+We use `pytest` for unit testing. To run all unit tests, run the following in the root dir:
+
+```bash
+pytest tests
+```
+
+or
+
+```bash
+make test
+```
+
+### Creating an Example Notebook
+
+For changes that involve entirely new features, it may be worth adding an example Jupyter notebook to showcase
+this feature.
+
+Example notebooks can be found in this folder: <https://github.com/run-llama/llama_index/tree/main/docs/examples>.
+
+### Creating a pull request
+
+See [these instructions](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request-from-a-fork)
+to open a pull request against the main LlamaIndex repo.
diff --git a/docs/docs/DOCS_README.md b/docs/docs/DOCS_README.md
new file mode 100644
index 0000000000000000000000000000000000000000..d5ed4b63ace9535befd50f39007ddc98b8be5dcf
--- /dev/null
+++ b/docs/docs/DOCS_README.md
@@ -0,0 +1,42 @@
+# Documentation Guide
+
+## A guide for docs contributors
+
+The `docs` directory contains the sphinx source text for LlamaIndex docs, visit
+https://docs.llamaindex.ai/en/stable/ to read the full documentation.
+
+This guide is made for anyone who's interested in running LlamaIndex documentation locally,
+making changes to it and making contributions. LlamaIndex is made by the thriving community
+behind it, and you're always welcome to make contributions to the project and the
+documentation.
+
+## Build Docs
+
+If you haven't already, clone the LlamaIndex Github repo to a local directory:
+
+```bash
+git clone https://github.com/run-llama/llama_index.git && cd llama_index
+```
+
+Install all dependencies required for building docs (mainly `mkdocs` and its extension):
+
+- [Install poetry](https://python-poetry.org/docs/#installation) - this will help you manage package dependencies
+- `poetry shell` - this command creates a virtual environment, which keeps installed packages contained to this project
+- `poetry install --with docs` - this will install all dependencies needed for building docs
+
+Build with mkdocs:
+
+```bash
+cd docs
+mkdocs serve
+```
+
+And open your browser at http://localhost:8000/ to view the generated docs.
+
+This hosted version will re-build and update as changes are made to the docs.
+
+## Config
+
+All config for mkdocs is in the `mkdocs.yml` file.
+
+Running the command `python docs/prepare_for_build.py` from the root of the llama-index repo will update the mkdocs.yml API Reference and examples nav with the latest changes, as well as writing new api reference files.
diff --git a/docs/_static/agents/agent_step_execute.png b/docs/docs/_static/agents/agent_step_execute.png
similarity index 100%
rename from docs/_static/agents/agent_step_execute.png
rename to docs/docs/_static/agents/agent_step_execute.png
diff --git a/docs/docs/_static/assets/LlamaLogoBrowserTab.png b/docs/docs/_static/assets/LlamaLogoBrowserTab.png
new file mode 100644
index 0000000000000000000000000000000000000000..a87e3c2e38b2d37f12945900cfa255f02fba5567
Binary files /dev/null and b/docs/docs/_static/assets/LlamaLogoBrowserTab.png differ
diff --git a/docs/docs/_static/assets/LlamaSquareBlack.svg b/docs/docs/_static/assets/LlamaSquareBlack.svg
new file mode 100644
index 0000000000000000000000000000000000000000..fdcc834c6f3060994eb7d6f473b6919fee761622
--- /dev/null
+++ b/docs/docs/_static/assets/LlamaSquareBlack.svg
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg id="LlamaIndexSquare" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 1920 1920">
+  <defs>
+    <linearGradient id="linear-gradient" x1="223.68" y1="733.57" x2="1594.48" y2="1521.74" gradientUnits="userSpaceOnUse">
+      <stop offset="0" stop-color="#f6ddd7"/>
+      <stop offset=".25" stop-color="#fcabe6"/>
+      <stop offset=".3" stop-color="#f3ade6"/>
+      <stop offset=".38" stop-color="#ddb3e8"/>
+      <stop offset=".48" stop-color="#b8bcec"/>
+      <stop offset=".59" stop-color="#85caf1"/>
+      <stop offset=".7" stop-color="#50d8f6"/>
+      <stop offset=".76" stop-color="#50d8f6"/>
+      <stop offset=".86" stop-color="#b58fe8"/>
+    </linearGradient>
+  </defs>
+  <rect id="SquareBG" x="96" y="96" width="1728" height="1728" rx="360.19" ry="360.19" style="fill: #000; stroke-width: 0px;"/>
+  <path d="M1227.57,1375.94c-3.92-4.37-7.85-8.74-11.77-13.1-27.64-30.21-41.35-65.1-30.46-111.35-104.67,33.94-205.19,41.62-308.99,17.88-2.72,31.05-3.81,59.43-8.02,87.34-5.15,34.16-13.02,67.9-19.47,101.86-2.25,11.83-4.72,23.74-5.46,35.71-2.2,35.64-1.41,71.63-6.21,106.88-2.47,18.13-14.33,34.99-21.3,50.93h-77.71l.42-.97c4.15-11.29,8.29-22.58,12.44-33.87,0,0-.21.27-.21.27,4.2-4.21,8.39-8.43,12.59-12.64l-.27.27c2.12-2.13,4.24-4.25,6.36-6.38l11.44-1.32c1.11-18.89.94-11.95,1.11-18.89.83-33.72.34-67.53-1.47-101.21-.67-12.36-6.26-24.46-9.6-36.68-2.32.06-4.64.12-6.96.18-12.39,44.7-24.78,89.41-37.17,134.11,0,0,.55-.24.55-.24-8.87,16.08-21.35,47.27-30.22,63.35-11.03,1-42.13-.92-67.88-.77,2.1-21.24,9.98-32.37,23.37-44.39,28.79-25.84,36.54-63.75,36.43-100.05-.15-50.7-6.92-101.37-10.86-152.06,5.59-10.19,8.83-23.19,17.14-30.11,56.24-46.85,102.12-102.83,144.95-161.48,41.46-56.78,83.19-113.45,122.26-171.88,43.03-64.36,87.61-128.6,97.48-208.71,72.88,7.68,142.46,25.43,207.78,60.42,19.96,10.69,45.01,11.89,67.72,17.44,8.42,6.5,20.9,11.26,24.57,19.8,18.5,43.03,36.6,86.42,51.23,130.87,17.99,54.67,22.8,110.74,13.5,168.57-11.14,69.24-41.63,128.83-80.9,185.36-6.53,9.41-8.65,21.88-12.81,32.94,0,0,.15-.18.15-.18-6.82,4.82-14.03,9.18-20.38,14.54-17.18,14.49-21.33,42.61-48.67,46.55-.37-1.49-.55-2.99-.52-4.53-1.44-2.72-2.87-5.43-4.31-8.15-9.96-18.77-19.93-37.53-29.89-56.3ZM517.28,570.6c-10.46-.44-21.29,7.69-31.95,11.86,0,0-9.76,80.82-9.76,121.49s13.91,75.15,16.27,113.41c1.68,27.25,3.01,56.38,13.57,80.73,12.68,29.21,18.19,57.44,16.61,88.5-4.38,86.3,40.37,144.69,108.96,189.16,30.85-33.52,64.34-65,91.99-100.98,55.34-72.02,102.6-149.18,128.62-237.37,5.42-18.37,8.99-37.27,14.28-59.58,2.88-2.94,8.79-8.99,14.7-15.04l-141.94-.4c-2.09-1.89-3.55-3.22-5.64-5.11l-17.96-175.16c-65.91-4.05-131.8-8.74-197.77-11.52ZM665.84,361.83c-23.76-47.96-58.65-85.02-111.51-106.14-.84,14.47-1.52,26.06-2.26,38.88-17.66-12.73-33.28-23.98-53.45-38.52,2.58,25.98,5.08,44.11,6.04,62.33,1.89,36.02-13.58,54.11-49.86,59.15-7.07.98-14.41,0-21.52.83-21.28,2.46-32.65,14.43-35.51,35.63-3.74,27.68,10.41,45.81,33.06,56.83,23.57,11.47,48.7,19.75,77.45,31.13-4.21,14.19-8.49,28.22-12.51,42.32-3.62,12.69-6.95,25.46-10.41,38.2,10.66-4.17,21.48-12.3,31.95-11.86,65.97,2.78,131.86,7.46,197.77,11.52-3.72-76.27-14.91-151.03-49.22-220.28ZM1363.96,1424.58c1.96,2.05,3.91,4.09,5.87,6.14,2.05,2.06,4.1,4.12,6.15,6.17,2.04,1.96,4.07,3.92,6.11,5.88,7.5,4.99,15,9.99,22.49,14.98,3.64-19.55,25.85-47.67,44.43-61.31,7.67-5.63,11.05-16.91,16.99-25.18,3.32-4.62,7.89-8.34,11.9-12.46-1.62-13.04-4.17-26.03-4.67-39.11-1.43-37.53.92-74.57-10.84-112.04-14.13-45-8.64-92.52-6.02-140.17,43.12-8.67,61.47-36.79,63.89-74.64,2.92-45.72-5.65-89.82-34.29-127.23-20.53-26.81-48.34-41.86-82.84-36.43-22.85,3.59-45.04,11.37-67.53,17.28,8.42,6.5,20.9,11.26,24.57,19.8,18.5,43.03,36.6,86.42,51.23,130.87,17.99,54.67,22.8,110.74,13.5,168.57-11.14,69.24-41.63,128.83-80.9,185.36-6.53,9.41-8.65,21.88-12.81,32.94,10.93,13.53,21.85,27.05,32.78,40.58ZM985.74,765.38c-6.29,81.15-44.94,149.41-87.84,215.37-37.77,58.07-75.75,116.3-118.15,170.97-30.45,39.26-68.33,72.77-102.9,108.84.47,26.74.94,53.49,1.41,80.23,5.59-10.19,8.83-23.19,17.14-30.11,56.24-46.85,102.12-102.83,144.95-161.48,41.46-56.78,83.19-113.45,122.26-171.88,43.03-64.36,87.61-128.6,97.48-208.71-24.78-1.08-49.56-2.15-74.34-3.23ZM664.54,1198.77c31.99-35.25,67.97-67.72,95.05-106.41,41.85-59.77,79.26-122.86,115.33-186.36,20.46-36.01,35.34-75.24,37.26-118.13.34-7.72,8.23-15.09,12.63-22.63-3.62.1-7.23.2-10.85.3-4.64-.95-9.28-1.91-13.91-2.86-6.49.04-12.97.07-19.46.11-5.91,6.05-11.83,12.1-14.7,15.04-5.29,22.3-8.87,41.21-14.28,59.58-26.02,88.19-73.28,165.35-128.62,237.37-27.65,35.98-61.14,67.46-91.99,100.98,11.18,7.67,22.36,15.34,33.54,23.02ZM942.72,765.23c2.4,67.42-27.68,124.69-59.91,180.03-31.13,53.43-66.12,104.74-101.63,155.44-20.89,29.83-45.84,56.84-69.42,84.74-11.1,13.13-23.27,25.36-34.96,37.99.02,12.38.03,24.75.05,37.13,34.57-36.07,72.45-69.58,102.9-108.84,42.4-54.66,80.39-112.89,118.15-170.97,42.9-65.96,81.55-134.22,87.84-215.37-14.34-.05-28.68-.1-43.03-.15ZM1405.73,1462.64c5.46,11.19,15.47,22.34,15.54,33.56.25,39.8-2.64,79.65-5.17,119.42-.22,3.52-6.45,6.66-9.89,9.98-2.3,1.72-4.61,3.44-6.91,5.16-1.99,2.12-3.98,4.24-5.97,6.35-2.17,1.91-4.35,3.81-6.52,5.72,3.41,3.84,6.65,10.81,10.25,11,20.21,1.08,40.5.52,61.67.52,17.8-43.47,23.9-85.93,17.32-130.35-1.3-8.8-3.75-19.81.05-26.59,25.92-46.24,19.03-92.21,1.8-138.62-4.01,4.12-8.58,7.84-11.9,12.46-5.94,8.27-9.32,19.55-16.99,25.18-18.58,13.64-40.79,41.76-44.43,61.31.29,1.65.67,3.28,1.15,4.89ZM924.82,765.23c-4.4,7.53-12.29,14.91-12.63,22.63-1.92,42.89-16.8,82.12-37.26,118.13-36.08,63.51-73.48,126.6-115.33,186.36-27.09,38.69-63.06,71.15-95.05,106.41,4.09,8.22,8.17,16.44,12.26,24.66,11.69-12.64,23.86-24.86,34.96-37.99,23.58-27.89,48.53-54.91,69.42-84.74,35.5-50.7,70.5-102.01,101.63-155.44,32.23-55.34,62.31-112.61,59.91-180.03-5.97,0-11.93,0-17.9,0ZM900.05,762.67c4.64.95,9.28,1.91,13.91,2.86-4.64-.95-9.28-1.91-13.91-2.86ZM733.27,759.83c1.79.85,3.59,1.7,5.38,2.55-1.6-1.25-3.4-2.1-5.38-2.55ZM479.39,702.93c1.24,2.91-1.24,5.83,0,8.74-1.24-2.91,1.24-5.83,0-8.74ZM1215.35,1588.66c-8.44,5.86-16.88,11.72-25.32,17.58-1.64,9.45-3.28,18.9-5,28.8h72.24c0-14.59-.97-27.72.34-40.61.87-8.56,2.71-18.87,8.08-24.82,47.78-52.98,66.64-115.78,65.65-185.78-6.82,4.82-14.03,9.18-20.38,14.54-17.18,14.49-21.33,42.61-48.67,46.55.78,53.28-15.32,101.04-46.93,143.74ZM1257.46,1432.24c1.44,2.72,2.87,5.43,4.31,8.15-1.44-2.72-2.87-5.43-4.31-8.15Z" style="fill: url(#linear-gradient); stroke-width: 0px;"/>
+</svg>
diff --git a/docs/_static/composability/diagram.png b/docs/docs/_static/composability/diagram.png
similarity index 100%
rename from docs/_static/composability/diagram.png
rename to docs/docs/_static/composability/diagram.png
diff --git a/docs/_static/composability/diagram_b0.png b/docs/docs/_static/composability/diagram_b0.png
similarity index 100%
rename from docs/_static/composability/diagram_b0.png
rename to docs/docs/_static/composability/diagram_b0.png
diff --git a/docs/_static/composability/diagram_b1.png b/docs/docs/_static/composability/diagram_b1.png
similarity index 100%
rename from docs/_static/composability/diagram_b1.png
rename to docs/docs/_static/composability/diagram_b1.png
diff --git a/docs/_static/composability/diagram_q1.png b/docs/docs/_static/composability/diagram_q1.png
similarity index 100%
rename from docs/_static/composability/diagram_q1.png
rename to docs/docs/_static/composability/diagram_q1.png
diff --git a/docs/_static/composability/diagram_q2.png b/docs/docs/_static/composability/diagram_q2.png
similarity index 100%
rename from docs/_static/composability/diagram_q2.png
rename to docs/docs/_static/composability/diagram_q2.png
diff --git a/docs/_static/contribution/contrib.png b/docs/docs/_static/contribution/contrib.png
similarity index 100%
rename from docs/_static/contribution/contrib.png
rename to docs/docs/_static/contribution/contrib.png
diff --git a/docs/_static/css/algolia.css b/docs/docs/_static/css/algolia.css
similarity index 100%
rename from docs/_static/css/algolia.css
rename to docs/docs/_static/css/algolia.css
diff --git a/docs/_static/css/custom.css b/docs/docs/_static/css/custom.css
similarity index 100%
rename from docs/_static/css/custom.css
rename to docs/docs/_static/css/custom.css
diff --git a/docs/_static/data_connectors/llamahub.png b/docs/docs/_static/data_connectors/llamahub.png
similarity index 100%
rename from docs/_static/data_connectors/llamahub.png
rename to docs/docs/_static/data_connectors/llamahub.png
diff --git a/docs/_static/embeddings/doc_example.jpeg b/docs/docs/_static/embeddings/doc_example.jpeg
similarity index 100%
rename from docs/_static/embeddings/doc_example.jpeg
rename to docs/docs/_static/embeddings/doc_example.jpeg
diff --git a/docs/_static/evaluation/eval_query_response_context.png b/docs/docs/_static/evaluation/eval_query_response_context.png
similarity index 100%
rename from docs/_static/evaluation/eval_query_response_context.png
rename to docs/docs/_static/evaluation/eval_query_response_context.png
diff --git a/docs/_static/evaluation/eval_query_sources.png b/docs/docs/_static/evaluation/eval_query_sources.png
similarity index 100%
rename from docs/_static/evaluation/eval_query_sources.png
rename to docs/docs/_static/evaluation/eval_query_sources.png
diff --git a/docs/_static/evaluation/eval_response_context.png b/docs/docs/_static/evaluation/eval_response_context.png
similarity index 100%
rename from docs/_static/evaluation/eval_response_context.png
rename to docs/docs/_static/evaluation/eval_response_context.png
diff --git a/docs/_static/getting_started/basic_rag.png b/docs/docs/_static/getting_started/basic_rag.png
similarity index 100%
rename from docs/_static/getting_started/basic_rag.png
rename to docs/docs/_static/getting_started/basic_rag.png
diff --git a/docs/_static/getting_started/indexing.jpg b/docs/docs/_static/getting_started/indexing.jpg
similarity index 100%
rename from docs/_static/getting_started/indexing.jpg
rename to docs/docs/_static/getting_started/indexing.jpg
diff --git a/docs/_static/getting_started/querying.jpg b/docs/docs/_static/getting_started/querying.jpg
similarity index 100%
rename from docs/_static/getting_started/querying.jpg
rename to docs/docs/_static/getting_started/querying.jpg
diff --git a/docs/_static/getting_started/rag.jpg b/docs/docs/_static/getting_started/rag.jpg
similarity index 100%
rename from docs/_static/getting_started/rag.jpg
rename to docs/docs/_static/getting_started/rag.jpg
diff --git a/docs/_static/getting_started/stages.png b/docs/docs/_static/getting_started/stages.png
similarity index 100%
rename from docs/_static/getting_started/stages.png
rename to docs/docs/_static/getting_started/stages.png
diff --git a/docs/_static/indices/create_and_refine.png b/docs/docs/_static/indices/create_and_refine.png
similarity index 100%
rename from docs/_static/indices/create_and_refine.png
rename to docs/docs/_static/indices/create_and_refine.png
diff --git a/docs/_static/indices/keyword.png b/docs/docs/_static/indices/keyword.png
similarity index 100%
rename from docs/_static/indices/keyword.png
rename to docs/docs/_static/indices/keyword.png
diff --git a/docs/_static/indices/keyword_query.png b/docs/docs/_static/indices/keyword_query.png
similarity index 100%
rename from docs/_static/indices/keyword_query.png
rename to docs/docs/_static/indices/keyword_query.png
diff --git a/docs/_static/indices/list.png b/docs/docs/_static/indices/list.png
similarity index 100%
rename from docs/_static/indices/list.png
rename to docs/docs/_static/indices/list.png
diff --git a/docs/_static/indices/list_filter_query.png b/docs/docs/_static/indices/list_filter_query.png
similarity index 100%
rename from docs/_static/indices/list_filter_query.png
rename to docs/docs/_static/indices/list_filter_query.png
diff --git a/docs/_static/indices/list_query.png b/docs/docs/_static/indices/list_query.png
similarity index 100%
rename from docs/_static/indices/list_query.png
rename to docs/docs/_static/indices/list_query.png
diff --git a/docs/_static/indices/tree.png b/docs/docs/_static/indices/tree.png
similarity index 100%
rename from docs/_static/indices/tree.png
rename to docs/docs/_static/indices/tree.png
diff --git a/docs/_static/indices/tree_query.png b/docs/docs/_static/indices/tree_query.png
similarity index 100%
rename from docs/_static/indices/tree_query.png
rename to docs/docs/_static/indices/tree_query.png
diff --git a/docs/_static/indices/tree_summarize.png b/docs/docs/_static/indices/tree_summarize.png
similarity index 100%
rename from docs/_static/indices/tree_summarize.png
rename to docs/docs/_static/indices/tree_summarize.png
diff --git a/docs/_static/indices/vector_store.png b/docs/docs/_static/indices/vector_store.png
similarity index 100%
rename from docs/_static/indices/vector_store.png
rename to docs/docs/_static/indices/vector_store.png
diff --git a/docs/_static/indices/vector_store_query.png b/docs/docs/_static/indices/vector_store_query.png
similarity index 100%
rename from docs/_static/indices/vector_store_query.png
rename to docs/docs/_static/indices/vector_store_query.png
diff --git a/docs/_static/integrations/TonicValidate-Graph.png b/docs/docs/_static/integrations/TonicValidate-Graph.png
similarity index 100%
rename from docs/_static/integrations/TonicValidate-Graph.png
rename to docs/docs/_static/integrations/TonicValidate-Graph.png
diff --git a/docs/_static/integrations/arize_phoenix.png b/docs/docs/_static/integrations/arize_phoenix.png
similarity index 100%
rename from docs/_static/integrations/arize_phoenix.png
rename to docs/docs/_static/integrations/arize_phoenix.png
diff --git a/docs/_static/integrations/honeyhive.png b/docs/docs/_static/integrations/honeyhive.png
similarity index 100%
rename from docs/_static/integrations/honeyhive.png
rename to docs/docs/_static/integrations/honeyhive.png
diff --git a/docs/_static/integrations/openllmetry.png b/docs/docs/_static/integrations/openllmetry.png
similarity index 100%
rename from docs/_static/integrations/openllmetry.png
rename to docs/docs/_static/integrations/openllmetry.png
diff --git a/docs/_static/integrations/perfetto.png b/docs/docs/_static/integrations/perfetto.png
similarity index 100%
rename from docs/_static/integrations/perfetto.png
rename to docs/docs/_static/integrations/perfetto.png
diff --git a/docs/_static/integrations/trulens.png b/docs/docs/_static/integrations/trulens.png
similarity index 100%
rename from docs/_static/integrations/trulens.png
rename to docs/docs/_static/integrations/trulens.png
diff --git a/docs/_static/integrations/wandb.png b/docs/docs/_static/integrations/wandb.png
similarity index 100%
rename from docs/_static/integrations/wandb.png
rename to docs/docs/_static/integrations/wandb.png
diff --git a/docs/_static/js/algolia.js b/docs/docs/_static/js/algolia.js
similarity index 100%
rename from docs/_static/js/algolia.js
rename to docs/docs/_static/js/algolia.js
diff --git a/docs/_static/js/leadfeeder.js b/docs/docs/_static/js/leadfeeder.js
similarity index 100%
rename from docs/_static/js/leadfeeder.js
rename to docs/docs/_static/js/leadfeeder.js
diff --git a/docs/_static/js/mendablesearch.js b/docs/docs/_static/js/mendablesearch.js
similarity index 100%
rename from docs/_static/js/mendablesearch.js
rename to docs/docs/_static/js/mendablesearch.js
diff --git a/docs/_static/node_postprocessors/prev_next.png b/docs/docs/_static/node_postprocessors/prev_next.png
similarity index 100%
rename from docs/_static/node_postprocessors/prev_next.png
rename to docs/docs/_static/node_postprocessors/prev_next.png
diff --git a/docs/_static/node_postprocessors/recency.png b/docs/docs/_static/node_postprocessors/recency.png
similarity index 100%
rename from docs/_static/node_postprocessors/recency.png
rename to docs/docs/_static/node_postprocessors/recency.png
diff --git a/docs/_static/production_rag/decouple_chunks.png b/docs/docs/_static/production_rag/decouple_chunks.png
similarity index 100%
rename from docs/_static/production_rag/decouple_chunks.png
rename to docs/docs/_static/production_rag/decouple_chunks.png
diff --git a/docs/_static/production_rag/doc_agents.png b/docs/docs/_static/production_rag/doc_agents.png
similarity index 100%
rename from docs/_static/production_rag/doc_agents.png
rename to docs/docs/_static/production_rag/doc_agents.png
diff --git a/docs/_static/production_rag/joint_qa_summary.png b/docs/docs/_static/production_rag/joint_qa_summary.png
similarity index 100%
rename from docs/_static/production_rag/joint_qa_summary.png
rename to docs/docs/_static/production_rag/joint_qa_summary.png
diff --git a/docs/_static/production_rag/structured_retrieval.png b/docs/docs/_static/production_rag/structured_retrieval.png
similarity index 100%
rename from docs/_static/production_rag/structured_retrieval.png
rename to docs/docs/_static/production_rag/structured_retrieval.png
diff --git a/docs/_static/query/disclosure.png b/docs/docs/_static/query/disclosure.png
similarity index 100%
rename from docs/_static/query/disclosure.png
rename to docs/docs/_static/query/disclosure.png
diff --git a/docs/_static/query/pipeline_rag_example.png b/docs/docs/_static/query/pipeline_rag_example.png
similarity index 100%
rename from docs/_static/query/pipeline_rag_example.png
rename to docs/docs/_static/query/pipeline_rag_example.png
diff --git a/docs/_static/query/query_classes.png b/docs/docs/_static/query/query_classes.png
similarity index 100%
rename from docs/_static/query/query_classes.png
rename to docs/docs/_static/query/query_classes.png
diff --git a/docs/_static/query_transformations/multi_step_diagram.png b/docs/docs/_static/query_transformations/multi_step_diagram.png
similarity index 100%
rename from docs/_static/query_transformations/multi_step_diagram.png
rename to docs/docs/_static/query_transformations/multi_step_diagram.png
diff --git a/docs/_static/query_transformations/single_step_diagram.png b/docs/docs/_static/query_transformations/single_step_diagram.png
similarity index 100%
rename from docs/_static/query_transformations/single_step_diagram.png
rename to docs/docs/_static/query_transformations/single_step_diagram.png
diff --git a/docs/_static/response/response_1.jpeg b/docs/docs/_static/response/response_1.jpeg
similarity index 100%
rename from docs/_static/response/response_1.jpeg
rename to docs/docs/_static/response/response_1.jpeg
diff --git a/docs/_static/sitemap.xml b/docs/docs/_static/sitemap.xml
similarity index 100%
rename from docs/_static/sitemap.xml
rename to docs/docs/_static/sitemap.xml
diff --git a/docs/_static/storage/storage.png b/docs/docs/_static/storage/storage.png
similarity index 100%
rename from docs/_static/storage/storage.png
rename to docs/docs/_static/storage/storage.png
diff --git a/docs/_static/structured_output/diagram1.png b/docs/docs/_static/structured_output/diagram1.png
similarity index 100%
rename from docs/_static/structured_output/diagram1.png
rename to docs/docs/_static/structured_output/diagram1.png
diff --git a/docs/_static/structured_output/program2.png b/docs/docs/_static/structured_output/program2.png
similarity index 100%
rename from docs/_static/structured_output/program2.png
rename to docs/docs/_static/structured_output/program2.png
diff --git a/docs/_static/vector_stores/faiss_index_0.png b/docs/docs/_static/vector_stores/faiss_index_0.png
similarity index 100%
rename from docs/_static/vector_stores/faiss_index_0.png
rename to docs/docs/_static/vector_stores/faiss_index_0.png
diff --git a/docs/_static/vector_stores/faiss_index_1.png b/docs/docs/_static/vector_stores/faiss_index_1.png
similarity index 100%
rename from docs/_static/vector_stores/faiss_index_1.png
rename to docs/docs/_static/vector_stores/faiss_index_1.png
diff --git a/docs/_static/vector_stores/pinecone_index_0.png b/docs/docs/_static/vector_stores/pinecone_index_0.png
similarity index 100%
rename from docs/_static/vector_stores/pinecone_index_0.png
rename to docs/docs/_static/vector_stores/pinecone_index_0.png
diff --git a/docs/_static/vector_stores/pinecone_reader.png b/docs/docs/_static/vector_stores/pinecone_reader.png
similarity index 100%
rename from docs/_static/vector_stores/pinecone_reader.png
rename to docs/docs/_static/vector_stores/pinecone_reader.png
diff --git a/docs/_static/vector_stores/qdrant_index_0.png b/docs/docs/_static/vector_stores/qdrant_index_0.png
similarity index 100%
rename from docs/_static/vector_stores/qdrant_index_0.png
rename to docs/docs/_static/vector_stores/qdrant_index_0.png
diff --git a/docs/_static/vector_stores/qdrant_reader.png b/docs/docs/_static/vector_stores/qdrant_reader.png
similarity index 100%
rename from docs/_static/vector_stores/qdrant_reader.png
rename to docs/docs/_static/vector_stores/qdrant_reader.png
diff --git a/docs/_static/vector_stores/simple_index_0.png b/docs/docs/_static/vector_stores/simple_index_0.png
similarity index 100%
rename from docs/_static/vector_stores/simple_index_0.png
rename to docs/docs/_static/vector_stores/simple_index_0.png
diff --git a/docs/_static/vector_stores/weaviate_index_0.png b/docs/docs/_static/vector_stores/weaviate_index_0.png
similarity index 100%
rename from docs/_static/vector_stores/weaviate_index_0.png
rename to docs/docs/_static/vector_stores/weaviate_index_0.png
diff --git a/docs/_static/vector_stores/weaviate_reader_0.png b/docs/docs/_static/vector_stores/weaviate_reader_0.png
similarity index 100%
rename from docs/_static/vector_stores/weaviate_reader_0.png
rename to docs/docs/_static/vector_stores/weaviate_reader_0.png
diff --git a/docs/_static/vector_stores/weaviate_reader_1.png b/docs/docs/_static/vector_stores/weaviate_reader_1.png
similarity index 100%
rename from docs/_static/vector_stores/weaviate_reader_1.png
rename to docs/docs/_static/vector_stores/weaviate_reader_1.png
diff --git a/docs/docs/agents/agent_step_execute.png b/docs/docs/agents/agent_step_execute.png
new file mode 100644
index 0000000000000000000000000000000000000000..0008b41dc4376f827c9b25bc42b71e4c5b84efd3
Binary files /dev/null and b/docs/docs/agents/agent_step_execute.png differ
diff --git a/docs/docs/api_reference/LLMs/ai21.md b/docs/docs/api_reference/LLMs/ai21.md
new file mode 100644
index 0000000000000000000000000000000000000000..ac29761e696a968494cc57d506078b74d4bf0ac3
--- /dev/null
+++ b/docs/docs/api_reference/LLMs/ai21.md
@@ -0,0 +1,4 @@
+::: llama_index.llms.ai21
+    options:
+      members:
+        - AI21
diff --git a/docs/docs/api_reference/LLMs/anthropic.md b/docs/docs/api_reference/LLMs/anthropic.md
new file mode 100644
index 0000000000000000000000000000000000000000..60c45f68d54000d2c5fd26fe505ac09ecec66b5c
--- /dev/null
+++ b/docs/docs/api_reference/LLMs/anthropic.md
@@ -0,0 +1,4 @@
+::: llama_index.llms.anthropic
+    options:
+      members:
+        - Anthropic
diff --git a/docs/docs/api_reference/LLMs/anyscale.md b/docs/docs/api_reference/LLMs/anyscale.md
new file mode 100644
index 0000000000000000000000000000000000000000..40be432eecfe185b006b51294a8d122bfb6f7c40
--- /dev/null
+++ b/docs/docs/api_reference/LLMs/anyscale.md
@@ -0,0 +1,4 @@
+::: llama_index.llms.anyscale
+    options:
+      members:
+        - Anyscale
diff --git a/docs/docs/api_reference/LLMs/azure_openai.md b/docs/docs/api_reference/LLMs/azure_openai.md
new file mode 100644
index 0000000000000000000000000000000000000000..e0606ea5f2f66d4530d53b92a948204d63be5191
--- /dev/null
+++ b/docs/docs/api_reference/LLMs/azure_openai.md
@@ -0,0 +1,6 @@
+::: llama_index.llms.azure_openai
+    options:
+      members:
+        - AsyncAzureOpenAI
+        - AzureOpenAI
+        - SyncAzureOpenAI
diff --git a/docs/docs/api_reference/LLMs/bedrock.md b/docs/docs/api_reference/LLMs/bedrock.md
new file mode 100644
index 0000000000000000000000000000000000000000..6bf2378d051a3e82f96a6766c5da3bbce6134336
--- /dev/null
+++ b/docs/docs/api_reference/LLMs/bedrock.md
@@ -0,0 +1,4 @@
+::: llama_index.llms.bedrock
+    options:
+      members:
+        - Bedrock
diff --git a/docs/docs/api_reference/LLMs/clarifai.md b/docs/docs/api_reference/LLMs/clarifai.md
new file mode 100644
index 0000000000000000000000000000000000000000..f678f2c6095eee77cbbbfa375d64206c78d8c429
--- /dev/null
+++ b/docs/docs/api_reference/LLMs/clarifai.md
@@ -0,0 +1,4 @@
+::: llama_index.llms.clarifai
+    options:
+      members:
+        - Clarifai
diff --git a/docs/docs/api_reference/LLMs/cohere.md b/docs/docs/api_reference/LLMs/cohere.md
new file mode 100644
index 0000000000000000000000000000000000000000..a33d292f6205ffcc5146e83258da344dda1f9979
--- /dev/null
+++ b/docs/docs/api_reference/LLMs/cohere.md
@@ -0,0 +1,4 @@
+::: llama_index.llms.cohere
+    options:
+      members:
+        - Cohere
diff --git a/docs/docs/api_reference/LLMs/custom_llm.md b/docs/docs/api_reference/LLMs/custom_llm.md
new file mode 100644
index 0000000000000000000000000000000000000000..af82abebbf633def829bc7afa7be4ca150d08155
--- /dev/null
+++ b/docs/docs/api_reference/LLMs/custom_llm.md
@@ -0,0 +1,6 @@
+# CustomLLM
+
+::: llama_index.core.llms
+    options:
+      members:
+        - CustomLLM
diff --git a/docs/docs/api_reference/LLMs/dashscope.md b/docs/docs/api_reference/LLMs/dashscope.md
new file mode 100644
index 0000000000000000000000000000000000000000..067b1fbe41f1ee204ac838682d0eb3b863d81e10
--- /dev/null
+++ b/docs/docs/api_reference/LLMs/dashscope.md
@@ -0,0 +1,4 @@
+::: llama_index.llms.dashscope
+    options:
+      members:
+        - DashScope
diff --git a/docs/docs/api_reference/LLMs/everlyai.md b/docs/docs/api_reference/LLMs/everlyai.md
new file mode 100644
index 0000000000000000000000000000000000000000..08da8bdded2b73a1a4b731dc30454f3e26d5bb0f
--- /dev/null
+++ b/docs/docs/api_reference/LLMs/everlyai.md
@@ -0,0 +1,4 @@
+::: llama_index.llms.everlyai
+    options:
+      members:
+        - EverlyAI
diff --git a/docs/docs/api_reference/LLMs/fireworks.md b/docs/docs/api_reference/LLMs/fireworks.md
new file mode 100644
index 0000000000000000000000000000000000000000..9007974d92c18f316e6d7ea38f76c2da7461efee
--- /dev/null
+++ b/docs/docs/api_reference/LLMs/fireworks.md
@@ -0,0 +1,4 @@
+::: llama_index.llms.fireworks
+    options:
+      members:
+        - Fireworks
diff --git a/docs/docs/api_reference/LLMs/friendli.md b/docs/docs/api_reference/LLMs/friendli.md
new file mode 100644
index 0000000000000000000000000000000000000000..8091da51f2b03c30974f186babde0e8d1f62309e
--- /dev/null
+++ b/docs/docs/api_reference/LLMs/friendli.md
@@ -0,0 +1,4 @@
+::: llama_index.llms.friendli
+    options:
+      members:
+        - Friendli
diff --git a/docs/docs/api_reference/LLMs/gemini.md b/docs/docs/api_reference/LLMs/gemini.md
new file mode 100644
index 0000000000000000000000000000000000000000..84eb198685c264eac4a9183f6906abb4b4a98d2f
--- /dev/null
+++ b/docs/docs/api_reference/LLMs/gemini.md
@@ -0,0 +1,4 @@
+::: llama_index.llms.gemini
+    options:
+      members:
+        - Gemini
diff --git a/docs/docs/api_reference/LLMs/gradient.md b/docs/docs/api_reference/LLMs/gradient.md
new file mode 100644
index 0000000000000000000000000000000000000000..3b2f298c2d1617c2a680f6dec501e9d20c41684f
--- /dev/null
+++ b/docs/docs/api_reference/LLMs/gradient.md
@@ -0,0 +1,5 @@
+::: llama_index.llms.gradient
+    options:
+      members:
+        - GradientBaseModelLLM
+        - GradientModelAdapterLLM
diff --git a/docs/docs/api_reference/LLMs/groq.md b/docs/docs/api_reference/LLMs/groq.md
new file mode 100644
index 0000000000000000000000000000000000000000..85e1eac31aa22b348b3aa13155257f6e4c82aa89
--- /dev/null
+++ b/docs/docs/api_reference/LLMs/groq.md
@@ -0,0 +1,4 @@
+::: llama_index.llms.groq
+    options:
+      members:
+        - Groq
diff --git a/docs/docs/api_reference/LLMs/huggingface.md b/docs/docs/api_reference/LLMs/huggingface.md
new file mode 100644
index 0000000000000000000000000000000000000000..a03d1953b7c015f646be41a483caeb0e103b4220
--- /dev/null
+++ b/docs/docs/api_reference/LLMs/huggingface.md
@@ -0,0 +1,5 @@
+::: llama_index.llms.huggingface
+    options:
+      members:
+        - HuggingFaceInferenceAPI
+        - HuggingFaceLLM
diff --git a/docs/docs/api_reference/LLMs/index.md b/docs/docs/api_reference/LLMs/index.md
new file mode 100644
index 0000000000000000000000000000000000000000..db97817610786643c043489fc2cee357d3c6f673
--- /dev/null
+++ b/docs/docs/api_reference/LLMs/index.md
@@ -0,0 +1,8 @@
+# LLM
+
+::: llama_index.core.llms.llm
+    options:
+      inherited_members: true
+      members:
+        - LLM
+      show_source: false
diff --git a/docs/docs/api_reference/LLMs/konko.md b/docs/docs/api_reference/LLMs/konko.md
new file mode 100644
index 0000000000000000000000000000000000000000..af2e07a58fa4e935374b3205f1f576c5d832719b
--- /dev/null
+++ b/docs/docs/api_reference/LLMs/konko.md
@@ -0,0 +1,4 @@
+::: llama_index.llms.konko
+    options:
+      members:
+        - Konko
diff --git a/docs/docs/api_reference/LLMs/langchain.md b/docs/docs/api_reference/LLMs/langchain.md
new file mode 100644
index 0000000000000000000000000000000000000000..bb43ece399d17d5eddd6503382136f699b9461bf
--- /dev/null
+++ b/docs/docs/api_reference/LLMs/langchain.md
@@ -0,0 +1,4 @@
+::: llama_index.llms.langchain
+    options:
+      members:
+        - LangChainLLM
diff --git a/docs/docs/api_reference/LLMs/litellm.md b/docs/docs/api_reference/LLMs/litellm.md
new file mode 100644
index 0000000000000000000000000000000000000000..fa1ee2a2b37ce4b2e73d65e50158c8e9d339e622
--- /dev/null
+++ b/docs/docs/api_reference/LLMs/litellm.md
@@ -0,0 +1,4 @@
+::: llama_index.llms.litellm
+    options:
+      members:
+        - LiteLLM
diff --git a/docs/docs/api_reference/LLMs/llama_api.md b/docs/docs/api_reference/LLMs/llama_api.md
new file mode 100644
index 0000000000000000000000000000000000000000..fde85ca0e7c587a432998a27657959609b1c5fa1
--- /dev/null
+++ b/docs/docs/api_reference/LLMs/llama_api.md
@@ -0,0 +1,4 @@
+::: llama_index.llms.llama_api
+    options:
+      members:
+        - LlamaAPI
diff --git a/docs/docs/api_reference/LLMs/llama_cpp.md b/docs/docs/api_reference/LLMs/llama_cpp.md
new file mode 100644
index 0000000000000000000000000000000000000000..1e290fe18a4d1db7a4d05c2bc4f79dccf23e7fad
--- /dev/null
+++ b/docs/docs/api_reference/LLMs/llama_cpp.md
@@ -0,0 +1,4 @@
+::: llama_index.llms.llama_cpp
+    options:
+      members:
+        - LlamaCPP
diff --git a/docs/docs/api_reference/LLMs/llamafile.md b/docs/docs/api_reference/LLMs/llamafile.md
new file mode 100644
index 0000000000000000000000000000000000000000..8ac0ff38a07d18a59329c21f89b4f7b11b0941cc
--- /dev/null
+++ b/docs/docs/api_reference/LLMs/llamafile.md
@@ -0,0 +1,4 @@
+::: llama_index.llms.llamafile
+    options:
+      members:
+        - Llamafile
diff --git a/docs/docs/api_reference/LLMs/localai.md b/docs/docs/api_reference/LLMs/localai.md
new file mode 100644
index 0000000000000000000000000000000000000000..bac99c24902a76dd2a1886038b3993f197ad537f
--- /dev/null
+++ b/docs/docs/api_reference/LLMs/localai.md
@@ -0,0 +1,4 @@
+::: llama_index.llms.localai
+    options:
+      members:
+        - LocalAI
diff --git a/docs/docs/api_reference/LLMs/maritalk.md b/docs/docs/api_reference/LLMs/maritalk.md
new file mode 100644
index 0000000000000000000000000000000000000000..ab19c6d419976b8adc3acf90571e36b1307149c6
--- /dev/null
+++ b/docs/docs/api_reference/LLMs/maritalk.md
@@ -0,0 +1,4 @@
+::: llama_index.llms.maritalk
+    options:
+      members:
+        - Maritalk
diff --git a/docs/docs/api_reference/LLMs/mistralai.md b/docs/docs/api_reference/LLMs/mistralai.md
new file mode 100644
index 0000000000000000000000000000000000000000..72158a169d729fecc167992fdeca176a685829db
--- /dev/null
+++ b/docs/docs/api_reference/LLMs/mistralai.md
@@ -0,0 +1,4 @@
+::: llama_index.llms.mistralai
+    options:
+      members:
+        - MistralAI
diff --git a/docs/docs/api_reference/LLMs/modelscope.md b/docs/docs/api_reference/LLMs/modelscope.md
new file mode 100644
index 0000000000000000000000000000000000000000..74ec8e3d5142748a58917e5fa625fccc93cab8e1
--- /dev/null
+++ b/docs/docs/api_reference/LLMs/modelscope.md
@@ -0,0 +1,4 @@
+::: llama_index.llms.modelscope
+    options:
+      members:
+        - ModelScopeLLM
diff --git a/docs/docs/api_reference/LLMs/monsterapi.md b/docs/docs/api_reference/LLMs/monsterapi.md
new file mode 100644
index 0000000000000000000000000000000000000000..0a9a83e64b89a73c86f2f0eb737eb5ccda93a8dd
--- /dev/null
+++ b/docs/docs/api_reference/LLMs/monsterapi.md
@@ -0,0 +1,4 @@
+::: llama_index.llms.monsterapi
+    options:
+      members:
+        - MonsterLLM
diff --git a/docs/docs/api_reference/LLMs/mymagic.md b/docs/docs/api_reference/LLMs/mymagic.md
new file mode 100644
index 0000000000000000000000000000000000000000..8d7dc7c977c1b86d5c7e7aaa12e348bd3826d9de
--- /dev/null
+++ b/docs/docs/api_reference/LLMs/mymagic.md
@@ -0,0 +1,4 @@
+::: llama_index.llms.mymagic
+    options:
+      members:
+        - MyMagicAI
diff --git a/docs/docs/api_reference/LLMs/neutrino.md b/docs/docs/api_reference/LLMs/neutrino.md
new file mode 100644
index 0000000000000000000000000000000000000000..4d04873a942949ae2ddf345444a0e1e470827d06
--- /dev/null
+++ b/docs/docs/api_reference/LLMs/neutrino.md
@@ -0,0 +1,4 @@
+::: llama_index.llms.neutrino
+    options:
+      members:
+        - Neutrino
diff --git a/docs/docs/api_reference/LLMs/nvidia_tensorrt.md b/docs/docs/api_reference/LLMs/nvidia_tensorrt.md
new file mode 100644
index 0000000000000000000000000000000000000000..2a4d13bcd0a88f856d45915747867fac3162dd3b
--- /dev/null
+++ b/docs/docs/api_reference/LLMs/nvidia_tensorrt.md
@@ -0,0 +1,4 @@
+::: llama_index.llms.nvidia_tensorrt
+    options:
+      members:
+        - LocalTensorRTLLM
diff --git a/docs/docs/api_reference/LLMs/nvidia_triton.md b/docs/docs/api_reference/LLMs/nvidia_triton.md
new file mode 100644
index 0000000000000000000000000000000000000000..3cbf177abd2f536b86f88adfc1ebbcbf5867ef4c
--- /dev/null
+++ b/docs/docs/api_reference/LLMs/nvidia_triton.md
@@ -0,0 +1,4 @@
+::: llama_index.llms.nvidia_triton
+    options:
+      members:
+        - NvidiaTriton
diff --git a/docs/docs/api_reference/LLMs/ollama.md b/docs/docs/api_reference/LLMs/ollama.md
new file mode 100644
index 0000000000000000000000000000000000000000..7bf7d47d60f8e3ca542f394ec46075758a3cc7b0
--- /dev/null
+++ b/docs/docs/api_reference/LLMs/ollama.md
@@ -0,0 +1,4 @@
+::: llama_index.llms.ollama
+    options:
+      members:
+        - Ollama
diff --git a/docs/docs/api_reference/LLMs/openai.md b/docs/docs/api_reference/LLMs/openai.md
new file mode 100644
index 0000000000000000000000000000000000000000..ac8ac08abfbca7a02503de846750715a164f7c6c
--- /dev/null
+++ b/docs/docs/api_reference/LLMs/openai.md
@@ -0,0 +1,6 @@
+::: llama_index.llms.openai
+    options:
+      members:
+        - AsyncOpenAI
+        - OpenAI
+        - SyncOpenAI
diff --git a/docs/docs/api_reference/LLMs/openai_like.md b/docs/docs/api_reference/LLMs/openai_like.md
new file mode 100644
index 0000000000000000000000000000000000000000..2673ecfdc7d512afd9b61e328c5e4b9ca3b5497d
--- /dev/null
+++ b/docs/docs/api_reference/LLMs/openai_like.md
@@ -0,0 +1,4 @@
+::: llama_index.llms.openai_like
+    options:
+      members:
+        - OpenAILike
diff --git a/docs/docs/api_reference/LLMs/openllm.md b/docs/docs/api_reference/LLMs/openllm.md
new file mode 100644
index 0000000000000000000000000000000000000000..0038e82c7610d1aa0d22c4ca4322efa093f37b26
--- /dev/null
+++ b/docs/docs/api_reference/LLMs/openllm.md
@@ -0,0 +1,5 @@
+::: llama_index.llms.openllm
+    options:
+      members:
+        - OpenLLM
+        - OpenLLMAPI
diff --git a/docs/docs/api_reference/LLMs/openrouter.md b/docs/docs/api_reference/LLMs/openrouter.md
new file mode 100644
index 0000000000000000000000000000000000000000..43230982b1d7bbb45ab508fe3ffcae361c9d9bab
--- /dev/null
+++ b/docs/docs/api_reference/LLMs/openrouter.md
@@ -0,0 +1,4 @@
+::: llama_index.llms.openrouter
+    options:
+      members:
+        - OpenRouter
diff --git a/docs/docs/api_reference/LLMs/palm.md b/docs/docs/api_reference/LLMs/palm.md
new file mode 100644
index 0000000000000000000000000000000000000000..126e9a8727a132922a9e82c9fd564ca5d7a297f9
--- /dev/null
+++ b/docs/docs/api_reference/LLMs/palm.md
@@ -0,0 +1,4 @@
+::: llama_index.llms.palm
+    options:
+      members:
+        - PaLM
diff --git a/docs/docs/api_reference/LLMs/perplexity.md b/docs/docs/api_reference/LLMs/perplexity.md
new file mode 100644
index 0000000000000000000000000000000000000000..f677afd214b768a748dfa165f4159427afebb17c
--- /dev/null
+++ b/docs/docs/api_reference/LLMs/perplexity.md
@@ -0,0 +1,4 @@
+::: llama_index.llms.perplexity
+    options:
+      members:
+        - Perplexity
diff --git a/docs/docs/api_reference/LLMs/portkey.md b/docs/docs/api_reference/LLMs/portkey.md
new file mode 100644
index 0000000000000000000000000000000000000000..6d8a321dd2c45b3da2e9b22615e0ba62ee463c51
--- /dev/null
+++ b/docs/docs/api_reference/LLMs/portkey.md
@@ -0,0 +1,4 @@
+::: llama_index.llms.portkey
+    options:
+      members:
+        - Portkey
diff --git a/docs/docs/api_reference/LLMs/predibase.md b/docs/docs/api_reference/LLMs/predibase.md
new file mode 100644
index 0000000000000000000000000000000000000000..ca134577fd704889716fea8083359bec2079f0ad
--- /dev/null
+++ b/docs/docs/api_reference/LLMs/predibase.md
@@ -0,0 +1,4 @@
+::: llama_index.llms.predibase
+    options:
+      members:
+        - PredibaseLLM
diff --git a/docs/docs/api_reference/LLMs/premai.md b/docs/docs/api_reference/LLMs/premai.md
new file mode 100644
index 0000000000000000000000000000000000000000..2fcd64a416bf306ad31365273975fb4bfa7fa772
--- /dev/null
+++ b/docs/docs/api_reference/LLMs/premai.md
@@ -0,0 +1,4 @@
+::: llama_index.llms.premai
+    options:
+      members:
+        - PremAI
diff --git a/docs/docs/api_reference/LLMs/replicate.md b/docs/docs/api_reference/LLMs/replicate.md
new file mode 100644
index 0000000000000000000000000000000000000000..edc6639228a4e90854f701cdf6ed6422e2931cf2
--- /dev/null
+++ b/docs/docs/api_reference/LLMs/replicate.md
@@ -0,0 +1,4 @@
+::: llama_index.llms.replicate
+    options:
+      members:
+        - Replicate
diff --git a/docs/docs/api_reference/LLMs/rungpt.md b/docs/docs/api_reference/LLMs/rungpt.md
new file mode 100644
index 0000000000000000000000000000000000000000..1419f258f124640cc51b5aaa5754a0f6386e5a14
--- /dev/null
+++ b/docs/docs/api_reference/LLMs/rungpt.md
@@ -0,0 +1,4 @@
+::: llama_index.llms.rungpt
+    options:
+      members:
+        - RunGptLLM
diff --git a/docs/docs/api_reference/LLMs/sagemaker_endpoint.md b/docs/docs/api_reference/LLMs/sagemaker_endpoint.md
new file mode 100644
index 0000000000000000000000000000000000000000..9c93fd2351851c49c51f7218ff4750026acff406
--- /dev/null
+++ b/docs/docs/api_reference/LLMs/sagemaker_endpoint.md
@@ -0,0 +1,4 @@
+::: llama_index.llms.sagemaker_endpoint
+    options:
+      members:
+        - SageMakerLLM
diff --git a/docs/docs/api_reference/LLMs/solar.md b/docs/docs/api_reference/LLMs/solar.md
new file mode 100644
index 0000000000000000000000000000000000000000..a3a223bee990164c007bdcf1b70051858ce282da
--- /dev/null
+++ b/docs/docs/api_reference/LLMs/solar.md
@@ -0,0 +1,4 @@
+::: llama_index.llms.solar
+    options:
+      members:
+        - Solar
diff --git a/docs/docs/api_reference/LLMs/together.md b/docs/docs/api_reference/LLMs/together.md
new file mode 100644
index 0000000000000000000000000000000000000000..19e3fd8bdd5d4821302a98d0b8a460a2adbb36b0
--- /dev/null
+++ b/docs/docs/api_reference/LLMs/together.md
@@ -0,0 +1,4 @@
+::: llama_index.llms.together
+    options:
+      members:
+        - TogetherLLM
diff --git a/docs/docs/api_reference/LLMs/vertex.md b/docs/docs/api_reference/LLMs/vertex.md
new file mode 100644
index 0000000000000000000000000000000000000000..4722b733cb5aa7afc09c222def98031a1d701d1f
--- /dev/null
+++ b/docs/docs/api_reference/LLMs/vertex.md
@@ -0,0 +1,4 @@
+::: llama_index.llms.vertex
+    options:
+      members:
+        - Vertex
diff --git a/docs/docs/api_reference/LLMs/vllm.md b/docs/docs/api_reference/LLMs/vllm.md
new file mode 100644
index 0000000000000000000000000000000000000000..be0e8188c363e3c62f0267893b30c0164cdb88fa
--- /dev/null
+++ b/docs/docs/api_reference/LLMs/vllm.md
@@ -0,0 +1,5 @@
+::: llama_index.llms.vllm
+    options:
+      members:
+        - Vllm
+        - VllmServer
diff --git a/docs/docs/api_reference/LLMs/watsonx.md b/docs/docs/api_reference/LLMs/watsonx.md
new file mode 100644
index 0000000000000000000000000000000000000000..fe740dbb33232fe3bf8376a7fa77880b61be43c4
--- /dev/null
+++ b/docs/docs/api_reference/LLMs/watsonx.md
@@ -0,0 +1,4 @@
+::: llama_index.llms.watsonx
+    options:
+      members:
+        - WatsonX
diff --git a/docs/docs/api_reference/LLMs/xinference.md b/docs/docs/api_reference/LLMs/xinference.md
new file mode 100644
index 0000000000000000000000000000000000000000..7fe8271834efeb9712ab116ffa91a382c6260fda
--- /dev/null
+++ b/docs/docs/api_reference/LLMs/xinference.md
@@ -0,0 +1,4 @@
+::: llama_index.llms.xinference
+    options:
+      members:
+        - Xinference
diff --git a/docs/docs/api_reference/agent/index.md b/docs/docs/api_reference/agent/index.md
new file mode 100644
index 0000000000000000000000000000000000000000..17ae72b0a22f88e84377b8a0ffb1ae56cd6ba12b
--- /dev/null
+++ b/docs/docs/api_reference/agent/index.md
@@ -0,0 +1,33 @@
+# Core Agent Classes
+
+## Base Types
+
+::: llama_index.core.agent.types
+    options:
+        heading_level: 3
+        members:
+            - BaseAgent
+            - BaseAgentWorker
+            - AgentChatResponse
+            - Task
+            - TaskStep
+            - TaskStepOutput
+
+## Runners
+
+::: llama_index.core.agent
+    options:
+      heading_level: 3
+      members:
+        - AgentRunner
+        - ParallelAgentRunner
+
+## Workers
+
+::: llama_index.core.agent
+    options:
+      heading_level: 3
+      members:
+        - CustomSimpleAgentWorker
+        - MultimodalReActAgentWorker
+        - QueryPipelineAgentWorker
diff --git a/docs/docs/api_reference/agent/openai.md b/docs/docs/api_reference/agent/openai.md
new file mode 100644
index 0000000000000000000000000000000000000000..287aae35a75dc0952398524a3f68b45b27ce867b
--- /dev/null
+++ b/docs/docs/api_reference/agent/openai.md
@@ -0,0 +1,5 @@
+::: llama_index.agent.openai
+    options:
+      members:
+        - OpenAIAgent
+        - OpenAIAssistantAgent
diff --git a/docs/docs/api_reference/agent/openai_legacy.md b/docs/docs/api_reference/agent/openai_legacy.md
new file mode 100644
index 0000000000000000000000000000000000000000..8a5ae2117aec4e482af006c69ef5ccdade10fdb2
--- /dev/null
+++ b/docs/docs/api_reference/agent/openai_legacy.md
@@ -0,0 +1,5 @@
+::: llama_index.agent.openai_legacy
+    options:
+      members:
+        - ContextRetrieverOpenAIAgent
+        - FnRetrieverOpenAIAgent
diff --git a/docs/docs/api_reference/agent/react.md b/docs/docs/api_reference/agent/react.md
new file mode 100644
index 0000000000000000000000000000000000000000..4af66f1c81f129a0c5969183122e82bc38e1894c
--- /dev/null
+++ b/docs/docs/api_reference/agent/react.md
@@ -0,0 +1,6 @@
+::: llama_index.core.agent.react
+    options:
+      members:
+        - ReActAgent
+        - ReActAgentWorker
+        - ReActChatFormatter
diff --git a/docs/docs/api_reference/callbacks/aim.md b/docs/docs/api_reference/callbacks/aim.md
new file mode 100644
index 0000000000000000000000000000000000000000..39dd143435c8abf079e0a2092f0b2ab6be3f80f2
--- /dev/null
+++ b/docs/docs/api_reference/callbacks/aim.md
@@ -0,0 +1,4 @@
+::: llama_index.callbacks.aim
+    options:
+      members:
+        - AimCallback
diff --git a/docs/docs/api_reference/callbacks/argilla.md b/docs/docs/api_reference/callbacks/argilla.md
new file mode 100644
index 0000000000000000000000000000000000000000..2646025f16cf79a5afbbfda01563ce0beee9f097
--- /dev/null
+++ b/docs/docs/api_reference/callbacks/argilla.md
@@ -0,0 +1,4 @@
+::: llama_index.callbacks.argilla
+    options:
+      members:
+        - argilla_callback_handler
diff --git a/docs/docs/api_reference/callbacks/arize_phoenix.md b/docs/docs/api_reference/callbacks/arize_phoenix.md
new file mode 100644
index 0000000000000000000000000000000000000000..757f1e0deb93afae14ffaa7599289796dcad6840
--- /dev/null
+++ b/docs/docs/api_reference/callbacks/arize_phoenix.md
@@ -0,0 +1,4 @@
+::: llama_index.callbacks.arize_phoenix
+    options:
+      members:
+        - arize_phoenix_callback_handler
diff --git a/docs/docs/api_reference/callbacks/deepeval.md b/docs/docs/api_reference/callbacks/deepeval.md
new file mode 100644
index 0000000000000000000000000000000000000000..aab0d51281e9294d03fbdadc24e31f57e19e1c47
--- /dev/null
+++ b/docs/docs/api_reference/callbacks/deepeval.md
@@ -0,0 +1,4 @@
+::: llama_index.callbacks.deepeval
+    options:
+      members:
+        - deepeval_callback_handler
diff --git a/docs/docs/api_reference/callbacks/honeyhive.md b/docs/docs/api_reference/callbacks/honeyhive.md
new file mode 100644
index 0000000000000000000000000000000000000000..90cbae31b63e7e07f4bc552f8e6e536d789d260b
--- /dev/null
+++ b/docs/docs/api_reference/callbacks/honeyhive.md
@@ -0,0 +1,4 @@
+::: llama_index.callbacks.honeyhive
+    options:
+      members:
+        - honeyhive_callback_handler
diff --git a/docs/docs/api_reference/callbacks/index.md b/docs/docs/api_reference/callbacks/index.md
new file mode 100644
index 0000000000000000000000000000000000000000..42380e7880a85169f13f65af52b8cec8eb056ac8
--- /dev/null
+++ b/docs/docs/api_reference/callbacks/index.md
@@ -0,0 +1,18 @@
+# Core Callback Classes
+
+::: llama_index.core.callbacks.base
+    options:
+      members:
+        - CallbackManager
+
+::: llama_index.core.callbacks.base_handler
+    options:
+      members:
+        - BaseCallbackHandler
+
+::: llama_index.core.callbacks.schema
+    options:
+      members:
+        - CBEvent
+        - CBEventType
+        - EventPayload
diff --git a/docs/docs/api_reference/callbacks/langfuse.md b/docs/docs/api_reference/callbacks/langfuse.md
new file mode 100644
index 0000000000000000000000000000000000000000..f051f5b22e1d7a21e161eeb3fd42cc4cdcb4a3e0
--- /dev/null
+++ b/docs/docs/api_reference/callbacks/langfuse.md
@@ -0,0 +1,4 @@
+::: llama_index.callbacks.langfuse
+    options:
+      members:
+        - LangfuseCallbackHandler
diff --git a/docs/docs/api_reference/callbacks/llama_debug.md b/docs/docs/api_reference/callbacks/llama_debug.md
new file mode 100644
index 0000000000000000000000000000000000000000..2bf6d446f263898423a27c71e85d004d8fdee467
--- /dev/null
+++ b/docs/docs/api_reference/callbacks/llama_debug.md
@@ -0,0 +1,4 @@
+::: llama_index.core.callbacks.llama_debug
+    options:
+      members:
+        - LlamaDebugHandler
diff --git a/docs/docs/api_reference/callbacks/openinference.md b/docs/docs/api_reference/callbacks/openinference.md
new file mode 100644
index 0000000000000000000000000000000000000000..0190c850bf0c26acd86872d3abc6e39a542b5482
--- /dev/null
+++ b/docs/docs/api_reference/callbacks/openinference.md
@@ -0,0 +1,4 @@
+::: llama_index.callbacks.openinference
+    options:
+      members:
+        - OpenInferenceCallbackHandler
diff --git a/docs/docs/api_reference/callbacks/promptlayer.md b/docs/docs/api_reference/callbacks/promptlayer.md
new file mode 100644
index 0000000000000000000000000000000000000000..cd9a6279365ace6475d0d451ff571c029152707e
--- /dev/null
+++ b/docs/docs/api_reference/callbacks/promptlayer.md
@@ -0,0 +1,4 @@
+::: llama_index.callbacks.promptlayer
+    options:
+      members:
+        - PromptLayerHandler
diff --git a/docs/docs/api_reference/callbacks/token_counter.md b/docs/docs/api_reference/callbacks/token_counter.md
new file mode 100644
index 0000000000000000000000000000000000000000..d7ddd153e8feeed45afb4f15a6bf9b80541dfc92
--- /dev/null
+++ b/docs/docs/api_reference/callbacks/token_counter.md
@@ -0,0 +1,4 @@
+::: llama_index.core.callbacks.token_counting
+    options:
+      members:
+        - TokenCountingHandler
diff --git a/docs/docs/api_reference/callbacks/uptrain.md b/docs/docs/api_reference/callbacks/uptrain.md
new file mode 100644
index 0000000000000000000000000000000000000000..5d1069b68f636d9791598c1642fe6b7f865e7e2d
--- /dev/null
+++ b/docs/docs/api_reference/callbacks/uptrain.md
@@ -0,0 +1,4 @@
+::: llama_index.callbacks.uptrain
+    options:
+      members:
+        - UpTrainCallbackHandler
diff --git a/docs/docs/api_reference/callbacks/wandb.md b/docs/docs/api_reference/callbacks/wandb.md
new file mode 100644
index 0000000000000000000000000000000000000000..0c4e3ececa5d957c3fffcb76f11a47af50304323
--- /dev/null
+++ b/docs/docs/api_reference/callbacks/wandb.md
@@ -0,0 +1,4 @@
+::: llama_index.callbacks.wandb
+    options:
+      members:
+        - WandbCallbackHandler
diff --git a/docs/docs/api_reference/chat_engines/condense_plus_context.md b/docs/docs/api_reference/chat_engines/condense_plus_context.md
new file mode 100644
index 0000000000000000000000000000000000000000..542938dd7521d5b512d56345c5492c95a6aa7061
--- /dev/null
+++ b/docs/docs/api_reference/chat_engines/condense_plus_context.md
@@ -0,0 +1,4 @@
+::: llama_index.core.chat_engine
+    options:
+      members:
+        - CondensePlusContextChatEngine
diff --git a/docs/docs/api_reference/chat_engines/condense_question.md b/docs/docs/api_reference/chat_engines/condense_question.md
new file mode 100644
index 0000000000000000000000000000000000000000..ac22564adcb0a4a58e4a020d60c94599c6e60a0d
--- /dev/null
+++ b/docs/docs/api_reference/chat_engines/condense_question.md
@@ -0,0 +1,4 @@
+::: llama_index.core.chat_engine
+    options:
+      members:
+        - CondenseQuestionChatEngine
diff --git a/docs/docs/api_reference/chat_engines/context.md b/docs/docs/api_reference/chat_engines/context.md
new file mode 100644
index 0000000000000000000000000000000000000000..7048fa82244f1053af906675eee700b6c9880a86
--- /dev/null
+++ b/docs/docs/api_reference/chat_engines/context.md
@@ -0,0 +1,4 @@
+::: llama_index.core.chat_engine
+    options:
+      members:
+        - ContextChatEngine
diff --git a/docs/docs/api_reference/chat_engines/index.md b/docs/docs/api_reference/chat_engines/index.md
new file mode 100644
index 0000000000000000000000000000000000000000..8ff746c7e9b22a37a0814146b898783132e9eff8
--- /dev/null
+++ b/docs/docs/api_reference/chat_engines/index.md
@@ -0,0 +1 @@
+::: llama_index.core.chat_engine.types
diff --git a/docs/docs/api_reference/chat_engines/simple.md b/docs/docs/api_reference/chat_engines/simple.md
new file mode 100644
index 0000000000000000000000000000000000000000..b2a39240b5d10ee437f77cc2d2c468c975c0df9d
--- /dev/null
+++ b/docs/docs/api_reference/chat_engines/simple.md
@@ -0,0 +1,4 @@
+::: llama_index.core.chat_engine
+    options:
+      members:
+        - SimpleChatEngine
diff --git a/docs/docs/api_reference/embeddings/adapter.md b/docs/docs/api_reference/embeddings/adapter.md
new file mode 100644
index 0000000000000000000000000000000000000000..3fb7e6316c7c692ef1b578c5b851e9e7cea01695
--- /dev/null
+++ b/docs/docs/api_reference/embeddings/adapter.md
@@ -0,0 +1,5 @@
+::: llama_index.embeddings.adapter
+    options:
+      members:
+        - AdapterEmbeddingModel
+        - LinearAdapterEmbeddingModel
diff --git a/docs/docs/api_reference/embeddings/anyscale.md b/docs/docs/api_reference/embeddings/anyscale.md
new file mode 100644
index 0000000000000000000000000000000000000000..20dfb2c99844a7132271e6b5f98472602faa4e9c
--- /dev/null
+++ b/docs/docs/api_reference/embeddings/anyscale.md
@@ -0,0 +1,4 @@
+::: llama_index.embeddings.anyscale
+    options:
+      members:
+        - AnyscaleEmbedding
diff --git a/docs/docs/api_reference/embeddings/azure_openai.md b/docs/docs/api_reference/embeddings/azure_openai.md
new file mode 100644
index 0000000000000000000000000000000000000000..59b4215f02794470bc32c9e13b0e4c7c7b6fec64
--- /dev/null
+++ b/docs/docs/api_reference/embeddings/azure_openai.md
@@ -0,0 +1,4 @@
+::: llama_index.embeddings.azure_openai
+    options:
+      members:
+        - AzureOpenAIEmbedding
diff --git a/docs/docs/api_reference/embeddings/bedrock.md b/docs/docs/api_reference/embeddings/bedrock.md
new file mode 100644
index 0000000000000000000000000000000000000000..fd0e6cf50a32507bbfe5faf6d2567605f029fb07
--- /dev/null
+++ b/docs/docs/api_reference/embeddings/bedrock.md
@@ -0,0 +1,4 @@
+::: llama_index.embeddings.bedrock
+    options:
+      members:
+        - BedrockEmbedding
diff --git a/docs/docs/api_reference/embeddings/clarifai.md b/docs/docs/api_reference/embeddings/clarifai.md
new file mode 100644
index 0000000000000000000000000000000000000000..deb879454f442ff04a98190d5767a7249d28c344
--- /dev/null
+++ b/docs/docs/api_reference/embeddings/clarifai.md
@@ -0,0 +1,4 @@
+::: llama_index.embeddings.clarifai
+    options:
+      members:
+        - ClarifaiEmbedding
diff --git a/docs/docs/api_reference/embeddings/clip.md b/docs/docs/api_reference/embeddings/clip.md
new file mode 100644
index 0000000000000000000000000000000000000000..5c4169243c44062c6071b43428bb6a2f1f759625
--- /dev/null
+++ b/docs/docs/api_reference/embeddings/clip.md
@@ -0,0 +1,4 @@
+::: llama_index.embeddings.clip
+    options:
+      members:
+        - ClipEmbedding
diff --git a/docs/docs/api_reference/embeddings/cohere.md b/docs/docs/api_reference/embeddings/cohere.md
new file mode 100644
index 0000000000000000000000000000000000000000..f95d2cd62e28e7916481e1c72688a302391b4830
--- /dev/null
+++ b/docs/docs/api_reference/embeddings/cohere.md
@@ -0,0 +1,4 @@
+::: llama_index.embeddings.cohere
+    options:
+      members:
+        - CohereEmbedding
diff --git a/docs/docs/api_reference/embeddings/dashscope.md b/docs/docs/api_reference/embeddings/dashscope.md
new file mode 100644
index 0000000000000000000000000000000000000000..650939e22e20b56a4e25f03d7ee9ae9f70ec7843
--- /dev/null
+++ b/docs/docs/api_reference/embeddings/dashscope.md
@@ -0,0 +1,4 @@
+::: llama_index.embeddings.dashscope
+    options:
+      members:
+        - DashScopeEmbedding
diff --git a/docs/docs/api_reference/embeddings/elasticsearch.md b/docs/docs/api_reference/embeddings/elasticsearch.md
new file mode 100644
index 0000000000000000000000000000000000000000..43e9011ce30940c5c1e3a635d83bbc8cc87e4402
--- /dev/null
+++ b/docs/docs/api_reference/embeddings/elasticsearch.md
@@ -0,0 +1,4 @@
+::: llama_index.embeddings.elasticsearch
+    options:
+      members:
+        - ElasticsearchEmbedding
diff --git a/docs/docs/api_reference/embeddings/fastembed.md b/docs/docs/api_reference/embeddings/fastembed.md
new file mode 100644
index 0000000000000000000000000000000000000000..46465555d31a9669feb53cc28d0ff1c748ebe69e
--- /dev/null
+++ b/docs/docs/api_reference/embeddings/fastembed.md
@@ -0,0 +1,4 @@
+::: llama_index.embeddings.fastembed
+    options:
+      members:
+        - FastEmbedEmbedding
diff --git a/docs/docs/api_reference/embeddings/fireworks.md b/docs/docs/api_reference/embeddings/fireworks.md
new file mode 100644
index 0000000000000000000000000000000000000000..879fbccee52df8f271f71a4c5ea48dda22638d40
--- /dev/null
+++ b/docs/docs/api_reference/embeddings/fireworks.md
@@ -0,0 +1,4 @@
+::: llama_index.embeddings.fireworks
+    options:
+      members:
+        - FireworksEmbedding
diff --git a/docs/docs/api_reference/embeddings/gemini.md b/docs/docs/api_reference/embeddings/gemini.md
new file mode 100644
index 0000000000000000000000000000000000000000..0ecd56ecfebe51234fbdc56933728e191581f585
--- /dev/null
+++ b/docs/docs/api_reference/embeddings/gemini.md
@@ -0,0 +1,4 @@
+::: llama_index.embeddings.gemini
+    options:
+      members:
+        - GeminiEmbedding
diff --git a/docs/docs/api_reference/embeddings/google.md b/docs/docs/api_reference/embeddings/google.md
new file mode 100644
index 0000000000000000000000000000000000000000..a67cec3bc1de08e112b0dda0746cd2e15be76228
--- /dev/null
+++ b/docs/docs/api_reference/embeddings/google.md
@@ -0,0 +1,6 @@
+::: llama_index.embeddings.google
+    options:
+      members:
+        - GeminiEmbedding
+        - GooglePaLMEmbedding
+        - GoogleUnivSentEncoderEmbedding
diff --git a/docs/docs/api_reference/embeddings/gradient.md b/docs/docs/api_reference/embeddings/gradient.md
new file mode 100644
index 0000000000000000000000000000000000000000..6ed192170e17debba7cd23e5681b8faee03dfebf
--- /dev/null
+++ b/docs/docs/api_reference/embeddings/gradient.md
@@ -0,0 +1,4 @@
+::: llama_index.embeddings.gradient
+    options:
+      members:
+        - GradientEmbedding
diff --git a/docs/docs/api_reference/embeddings/huggingface.md b/docs/docs/api_reference/embeddings/huggingface.md
new file mode 100644
index 0000000000000000000000000000000000000000..597bd6798f3a59cec74173593b0d668b4cfecd32
--- /dev/null
+++ b/docs/docs/api_reference/embeddings/huggingface.md
@@ -0,0 +1,5 @@
+::: llama_index.embeddings.huggingface
+    options:
+      members:
+        - HuggingFaceEmbedding
+        - HuggingFaceInferenceAPIEmbedding
diff --git a/docs/docs/api_reference/embeddings/huggingface_optimum.md b/docs/docs/api_reference/embeddings/huggingface_optimum.md
new file mode 100644
index 0000000000000000000000000000000000000000..d978ccdcc20b0d6cb39ed74fc2747e75c60f4346
--- /dev/null
+++ b/docs/docs/api_reference/embeddings/huggingface_optimum.md
@@ -0,0 +1,4 @@
+::: llama_index.embeddings.huggingface_optimum
+    options:
+      members:
+        - OptimumEmbedding
diff --git a/docs/docs/api_reference/embeddings/huggingface_optimum_intel.md b/docs/docs/api_reference/embeddings/huggingface_optimum_intel.md
new file mode 100644
index 0000000000000000000000000000000000000000..78c17615708ef4c3aa78b327ff01f25a1daa1974
--- /dev/null
+++ b/docs/docs/api_reference/embeddings/huggingface_optimum_intel.md
@@ -0,0 +1,4 @@
+::: llama_index.embeddings.huggingface_optimum_intel
+    options:
+      members:
+        - IntelEmbedding
diff --git a/docs/docs/api_reference/embeddings/index.md b/docs/docs/api_reference/embeddings/index.md
new file mode 100644
index 0000000000000000000000000000000000000000..9a53fe6942f8027d3b5dfc76eaad3e5254fcfc4e
--- /dev/null
+++ b/docs/docs/api_reference/embeddings/index.md
@@ -0,0 +1,5 @@
+::: llama_index.core.embeddings
+    options:
+      members:
+        - BaseEmbedding
+        - resolve_embed_model
diff --git a/docs/docs/api_reference/embeddings/instructor.md b/docs/docs/api_reference/embeddings/instructor.md
new file mode 100644
index 0000000000000000000000000000000000000000..12e8722618cc239c739fb8c561e29084743e6996
--- /dev/null
+++ b/docs/docs/api_reference/embeddings/instructor.md
@@ -0,0 +1,4 @@
+::: llama_index.embeddings.instructor
+    options:
+      members:
+        - InstructorEmbedding
diff --git a/docs/docs/api_reference/embeddings/jinaai.md b/docs/docs/api_reference/embeddings/jinaai.md
new file mode 100644
index 0000000000000000000000000000000000000000..7c52e55b8f66941a7fa94eb7aac76922c8ecde3e
--- /dev/null
+++ b/docs/docs/api_reference/embeddings/jinaai.md
@@ -0,0 +1,4 @@
+::: llama_index.embeddings.jinaai
+    options:
+      members:
+        - JinaEmbedding
diff --git a/docs/docs/api_reference/embeddings/langchain.md b/docs/docs/api_reference/embeddings/langchain.md
new file mode 100644
index 0000000000000000000000000000000000000000..35f749210c09fdb470716d46b794b5f45eb42284
--- /dev/null
+++ b/docs/docs/api_reference/embeddings/langchain.md
@@ -0,0 +1,4 @@
+::: llama_index.embeddings.langchain
+    options:
+      members:
+        - LangchainEmbedding
diff --git a/docs/docs/api_reference/embeddings/llamafile.md b/docs/docs/api_reference/embeddings/llamafile.md
new file mode 100644
index 0000000000000000000000000000000000000000..5ea5e8752d599a6c3a16cc00317585cba0f09c1d
--- /dev/null
+++ b/docs/docs/api_reference/embeddings/llamafile.md
@@ -0,0 +1,4 @@
+::: llama_index.embeddings.llamafile
+    options:
+      members:
+        - LlamafileEmbedding
diff --git a/docs/docs/api_reference/embeddings/llm_rails.md b/docs/docs/api_reference/embeddings/llm_rails.md
new file mode 100644
index 0000000000000000000000000000000000000000..7fc32264593d3d829edf075fa8cb61ce0bfe1f02
--- /dev/null
+++ b/docs/docs/api_reference/embeddings/llm_rails.md
@@ -0,0 +1,4 @@
+::: llama_index.embeddings.llm_rails
+    options:
+      members:
+        - LLMRailsEmbedding
diff --git a/docs/docs/api_reference/embeddings/mistralai.md b/docs/docs/api_reference/embeddings/mistralai.md
new file mode 100644
index 0000000000000000000000000000000000000000..8a24a208766627a9c8dda41d10a4c9b371893dbb
--- /dev/null
+++ b/docs/docs/api_reference/embeddings/mistralai.md
@@ -0,0 +1,4 @@
+::: llama_index.embeddings.mistralai
+    options:
+      members:
+        - MistralAIEmbedding
diff --git a/docs/docs/api_reference/embeddings/nomic.md b/docs/docs/api_reference/embeddings/nomic.md
new file mode 100644
index 0000000000000000000000000000000000000000..4168de5426fced8f70c1599b129094c399edda1e
--- /dev/null
+++ b/docs/docs/api_reference/embeddings/nomic.md
@@ -0,0 +1,4 @@
+::: llama_index.embeddings.nomic
+    options:
+      members:
+        - NomicEmbedding
diff --git a/docs/docs/api_reference/embeddings/ollama.md b/docs/docs/api_reference/embeddings/ollama.md
new file mode 100644
index 0000000000000000000000000000000000000000..28bd274caed599637ddcb651116ece0586cc6e63
--- /dev/null
+++ b/docs/docs/api_reference/embeddings/ollama.md
@@ -0,0 +1,4 @@
+::: llama_index.embeddings.ollama
+    options:
+      members:
+        - OllamaEmbedding
diff --git a/docs/docs/api_reference/embeddings/openai.md b/docs/docs/api_reference/embeddings/openai.md
new file mode 100644
index 0000000000000000000000000000000000000000..6692b3046ff299377dc55595e44ab37a6ded22a6
--- /dev/null
+++ b/docs/docs/api_reference/embeddings/openai.md
@@ -0,0 +1,4 @@
+::: llama_index.embeddings.openai
+    options:
+      members:
+        - OpenAIEmbedding
diff --git a/docs/docs/api_reference/embeddings/premai.md b/docs/docs/api_reference/embeddings/premai.md
new file mode 100644
index 0000000000000000000000000000000000000000..8a2b769d8d75382122edfe502a0ba3ccb4ce4ca4
--- /dev/null
+++ b/docs/docs/api_reference/embeddings/premai.md
@@ -0,0 +1,4 @@
+::: llama_index.embeddings.premai
+    options:
+      members:
+        - PremAIEmbeddings
diff --git a/docs/docs/api_reference/embeddings/sagemaker_endpoint.md b/docs/docs/api_reference/embeddings/sagemaker_endpoint.md
new file mode 100644
index 0000000000000000000000000000000000000000..c7606e62ac5a13833186e84288ce5e225ab24888
--- /dev/null
+++ b/docs/docs/api_reference/embeddings/sagemaker_endpoint.md
@@ -0,0 +1,4 @@
+::: llama_index.embeddings.sagemaker_endpoint
+    options:
+      members:
+        - SageMakerEmbedding
diff --git a/docs/docs/api_reference/embeddings/text_embeddings_inference.md b/docs/docs/api_reference/embeddings/text_embeddings_inference.md
new file mode 100644
index 0000000000000000000000000000000000000000..3cc68deec351468387158cbefcb3f0e3b317d47b
--- /dev/null
+++ b/docs/docs/api_reference/embeddings/text_embeddings_inference.md
@@ -0,0 +1,4 @@
+::: llama_index.embeddings.text_embeddings_inference
+    options:
+      members:
+        - TextEmbeddingsInference
diff --git a/docs/docs/api_reference/embeddings/together.md b/docs/docs/api_reference/embeddings/together.md
new file mode 100644
index 0000000000000000000000000000000000000000..f8e23654b4ebacb82d6e70bc56335dc6e1902a85
--- /dev/null
+++ b/docs/docs/api_reference/embeddings/together.md
@@ -0,0 +1,4 @@
+::: llama_index.embeddings.together
+    options:
+      members:
+        - TogetherEmbedding
diff --git a/docs/docs/api_reference/embeddings/vertex.md b/docs/docs/api_reference/embeddings/vertex.md
new file mode 100644
index 0000000000000000000000000000000000000000..d6e27b2309465f8cfc56b77048050f6b39a7cc0a
--- /dev/null
+++ b/docs/docs/api_reference/embeddings/vertex.md
@@ -0,0 +1,5 @@
+::: llama_index.embeddings.vertex
+    options:
+      members:
+        - VertexMultiModalEmbedding
+        - VertexTextEmbedding
diff --git a/docs/docs/api_reference/embeddings/voyageai.md b/docs/docs/api_reference/embeddings/voyageai.md
new file mode 100644
index 0000000000000000000000000000000000000000..b388d315826c8c8c2c9ab1750ed30bc6742bb3bc
--- /dev/null
+++ b/docs/docs/api_reference/embeddings/voyageai.md
@@ -0,0 +1,4 @@
+::: llama_index.embeddings.voyageai
+    options:
+      members:
+        - VoyageEmbedding
diff --git a/docs/docs/api_reference/evaluation/answer_relevancy.md b/docs/docs/api_reference/evaluation/answer_relevancy.md
new file mode 100644
index 0000000000000000000000000000000000000000..15b91eec0647e7ed5d1f8c5e7907933f8cd1b6c8
--- /dev/null
+++ b/docs/docs/api_reference/evaluation/answer_relevancy.md
@@ -0,0 +1,4 @@
+::: llama_index.core.evaluation
+    options:
+      members:
+        - AnswerRelevancyEvaluator
diff --git a/docs/docs/api_reference/evaluation/context_relevancy.md b/docs/docs/api_reference/evaluation/context_relevancy.md
new file mode 100644
index 0000000000000000000000000000000000000000..56a5d36345a1321b8e3cef5d39e7e6938f58a270
--- /dev/null
+++ b/docs/docs/api_reference/evaluation/context_relevancy.md
@@ -0,0 +1,4 @@
+::: llama_index.core.evaluation
+    options:
+      members:
+        - ContextRelevancyEvaluator
diff --git a/docs/docs/api_reference/evaluation/correctness.md b/docs/docs/api_reference/evaluation/correctness.md
new file mode 100644
index 0000000000000000000000000000000000000000..eb29bb1bbd40d934161e8b0c52c8fa725ee88eb9
--- /dev/null
+++ b/docs/docs/api_reference/evaluation/correctness.md
@@ -0,0 +1,4 @@
+::: llama_index.core.evaluation
+    options:
+      members:
+        - CorrectnessEvaluator
diff --git a/docs/docs/api_reference/evaluation/dataset_generation.md b/docs/docs/api_reference/evaluation/dataset_generation.md
new file mode 100644
index 0000000000000000000000000000000000000000..cbda5302f5b1e4202a5996618f34751b257540b7
--- /dev/null
+++ b/docs/docs/api_reference/evaluation/dataset_generation.md
@@ -0,0 +1,5 @@
+::: llama_index.core.evaluation
+    options:
+      members:
+        - DatasetGenerator
+        - QueryResponseDataset
diff --git a/docs/docs/api_reference/evaluation/faithfullness.md b/docs/docs/api_reference/evaluation/faithfullness.md
new file mode 100644
index 0000000000000000000000000000000000000000..b8af2aa0e87dc4995c9c22439e5dfde16b7d8824
--- /dev/null
+++ b/docs/docs/api_reference/evaluation/faithfullness.md
@@ -0,0 +1,4 @@
+::: llama_index.core.evaluation
+    options:
+      members:
+        - FaithfulnessEvaluator
diff --git a/docs/docs/api_reference/evaluation/guideline.md b/docs/docs/api_reference/evaluation/guideline.md
new file mode 100644
index 0000000000000000000000000000000000000000..3d48c81cfc6c86e9ca9b3f03537ebdb56c3175d4
--- /dev/null
+++ b/docs/docs/api_reference/evaluation/guideline.md
@@ -0,0 +1,4 @@
+::: llama_index.core.evaluation
+    options:
+      members:
+        - GuidelineEvaluator
diff --git a/docs/docs/api_reference/evaluation/index.md b/docs/docs/api_reference/evaluation/index.md
new file mode 100644
index 0000000000000000000000000000000000000000..054370016c232d223a94b5ab0a735a835e0d07c5
--- /dev/null
+++ b/docs/docs/api_reference/evaluation/index.md
@@ -0,0 +1,6 @@
+::: llama_index.core.evaluation
+    options:
+      members:
+        - BaseEvaluator
+        - EvaluationResult
+        - BatchEvalRunner
diff --git a/docs/docs/api_reference/evaluation/metrics.md b/docs/docs/api_reference/evaluation/metrics.md
new file mode 100644
index 0000000000000000000000000000000000000000..f46d3a172fe4021651bd442ee85d6e196864369b
--- /dev/null
+++ b/docs/docs/api_reference/evaluation/metrics.md
@@ -0,0 +1,7 @@
+::: llama_index.core.evaluation
+    options:
+      members:
+        - MRR
+        - HitRate
+        - RetrievalMetricResult
+        - resolve_metrics
diff --git a/docs/docs/api_reference/evaluation/multi_modal.md b/docs/docs/api_reference/evaluation/multi_modal.md
new file mode 100644
index 0000000000000000000000000000000000000000..e021feb3d795fed17742261332e3a0c6dc4b7ea0
--- /dev/null
+++ b/docs/docs/api_reference/evaluation/multi_modal.md
@@ -0,0 +1,4 @@
+::: llama_index.core.evaluation
+    options:
+      members:
+        - MultiModalRetrieverEvaluator
diff --git a/docs/docs/api_reference/evaluation/pairwise_comparison.md b/docs/docs/api_reference/evaluation/pairwise_comparison.md
new file mode 100644
index 0000000000000000000000000000000000000000..3e5fd6aaa813de68511947117ed3433e555bed76
--- /dev/null
+++ b/docs/docs/api_reference/evaluation/pairwise_comparison.md
@@ -0,0 +1,4 @@
+::: llama_index.core.evaluation
+    options:
+      members:
+        - PairwiseComparisonEvaluator
diff --git a/docs/docs/api_reference/evaluation/query_response.md b/docs/docs/api_reference/evaluation/query_response.md
new file mode 100644
index 0000000000000000000000000000000000000000..a14267d569b4fd0e1b47ab6d1deffab320431983
--- /dev/null
+++ b/docs/docs/api_reference/evaluation/query_response.md
@@ -0,0 +1,5 @@
+::: llama_index.core.evaluation
+    options:
+      members:
+        - QueryResponseEvaluator
+        - RelevancyEvaluator
diff --git a/docs/docs/api_reference/evaluation/response.md b/docs/docs/api_reference/evaluation/response.md
new file mode 100644
index 0000000000000000000000000000000000000000..9e4378809ed87be6eb84130a8c8cebf2600aaa46
--- /dev/null
+++ b/docs/docs/api_reference/evaluation/response.md
@@ -0,0 +1,4 @@
+::: llama_index.core.evaluation
+    options:
+      members:
+        - ResponseEvaluator
diff --git a/docs/docs/api_reference/evaluation/retrieval.md b/docs/docs/api_reference/evaluation/retrieval.md
new file mode 100644
index 0000000000000000000000000000000000000000..1a0d70287e1506ee9bd9846b76e5a7885d86cf99
--- /dev/null
+++ b/docs/docs/api_reference/evaluation/retrieval.md
@@ -0,0 +1,6 @@
+::: llama_index.core.evaluation
+    options:
+      members:
+        - BaseRetrievalEvaluator
+        - RetrieverEvaluator
+        - RetrievalEvalResult
diff --git a/docs/docs/api_reference/evaluation/semantic_similarity.md b/docs/docs/api_reference/evaluation/semantic_similarity.md
new file mode 100644
index 0000000000000000000000000000000000000000..9ec1682e064b854d4c0530818d4a4cd8fa691bf0
--- /dev/null
+++ b/docs/docs/api_reference/evaluation/semantic_similarity.md
@@ -0,0 +1,4 @@
+::: llama_index.core.evaluation
+    options:
+      members:
+        - SemanticSimilarityEvaluator
diff --git a/docs/docs/api_reference/evaluation/tonic_validate.md b/docs/docs/api_reference/evaluation/tonic_validate.md
new file mode 100644
index 0000000000000000000000000000000000000000..2d284f695b264749117a7b11dcdab395f3e40431
--- /dev/null
+++ b/docs/docs/api_reference/evaluation/tonic_validate.md
@@ -0,0 +1,10 @@
+::: llama_index.evaluation.tonic_validate
+    options:
+      members:
+        - AnswerConsistencyBinaryEvaluator
+        - AnswerConsistencyEvaluator
+        - AnswerSimilarityEvaluator
+        - AugmentationAccuracyEvaluator
+        - AugmentationPrecisionEvaluator
+        - RetrievalPrecisionEvaluator
+        - TonicValidateEvaluator
diff --git a/docs/docs/api_reference/extractors/entity.md b/docs/docs/api_reference/extractors/entity.md
new file mode 100644
index 0000000000000000000000000000000000000000..08383b48b4feebb8a1f994773514ba990dfb50e2
--- /dev/null
+++ b/docs/docs/api_reference/extractors/entity.md
@@ -0,0 +1,4 @@
+::: llama_index.extractors.entity
+    options:
+      members:
+        - EntityExtractor
diff --git a/docs/docs/api_reference/extractors/index.md b/docs/docs/api_reference/extractors/index.md
new file mode 100644
index 0000000000000000000000000000000000000000..af7cce494818be3843e5fb4f2df22938900a98de
--- /dev/null
+++ b/docs/docs/api_reference/extractors/index.md
@@ -0,0 +1,4 @@
+::: llama_index.core.extractors.interface
+    options:
+      members:
+        - BaseExtractor
diff --git a/docs/docs/api_reference/extractors/keyword.md b/docs/docs/api_reference/extractors/keyword.md
new file mode 100644
index 0000000000000000000000000000000000000000..43b2d8ff0c00fd536467985bee8cd3a73b666556
--- /dev/null
+++ b/docs/docs/api_reference/extractors/keyword.md
@@ -0,0 +1,4 @@
+::: llama_index.core.extractors
+    options:
+      members:
+        - KeywordExtractor
diff --git a/docs/docs/api_reference/extractors/marvin.md b/docs/docs/api_reference/extractors/marvin.md
new file mode 100644
index 0000000000000000000000000000000000000000..43d74ded76ea7c3c9f5cb4b2915d487990f99525
--- /dev/null
+++ b/docs/docs/api_reference/extractors/marvin.md
@@ -0,0 +1,4 @@
+::: llama_index.extractors.marvin
+    options:
+      members:
+        - MarvinMetadataExtractor
diff --git a/docs/docs/api_reference/extractors/pydantic.md b/docs/docs/api_reference/extractors/pydantic.md
new file mode 100644
index 0000000000000000000000000000000000000000..34dc85f0d49b0ad409469f5ef5ef54edd6e860fd
--- /dev/null
+++ b/docs/docs/api_reference/extractors/pydantic.md
@@ -0,0 +1,4 @@
+::: llama_index.core.extractors
+    options:
+      members:
+        - PydanticProgramExtractor
diff --git a/docs/docs/api_reference/extractors/question.md b/docs/docs/api_reference/extractors/question.md
new file mode 100644
index 0000000000000000000000000000000000000000..162e80ac7102b451126e00f218131e488dec80f3
--- /dev/null
+++ b/docs/docs/api_reference/extractors/question.md
@@ -0,0 +1,4 @@
+::: llama_index.core.extractors
+    options:
+      members:
+        - QuestionsAnsweredExtractor
diff --git a/docs/docs/api_reference/extractors/summary.md b/docs/docs/api_reference/extractors/summary.md
new file mode 100644
index 0000000000000000000000000000000000000000..54ad5d2f7128fcc54caa013b0de0888311341722
--- /dev/null
+++ b/docs/docs/api_reference/extractors/summary.md
@@ -0,0 +1,4 @@
+::: llama_index.core.extractors
+    options:
+      members:
+        - SummaryExtractor
diff --git a/docs/docs/api_reference/extractors/title.md b/docs/docs/api_reference/extractors/title.md
new file mode 100644
index 0000000000000000000000000000000000000000..a39fcd5f089d403851b69caacc1e5fc7ed47c264
--- /dev/null
+++ b/docs/docs/api_reference/extractors/title.md
@@ -0,0 +1,4 @@
+::: llama_index.core.extractors
+    options:
+      members:
+        - TitleExtractor
diff --git a/docs/docs/api_reference/index.md b/docs/docs/api_reference/index.md
new file mode 100644
index 0000000000000000000000000000000000000000..ed48bdd383dc09e2944a569eb0d4646c91fa59bc
--- /dev/null
+++ b/docs/docs/api_reference/index.md
@@ -0,0 +1,5 @@
+# API Reference
+
+LlamaIndex provides thorough documentation of modules and integrations used in the framework.
+
+Use the navigation or search to find the classes you are interested in!
diff --git a/docs/docs/api_reference/indices/colbert.md b/docs/docs/api_reference/indices/colbert.md
new file mode 100644
index 0000000000000000000000000000000000000000..eae0cb598d1a7331a43eb36ec679ee34e3422146
--- /dev/null
+++ b/docs/docs/api_reference/indices/colbert.md
@@ -0,0 +1,4 @@
+::: llama_index.indices.managed.colbert
+    options:
+      members:
+        - ColbertIndex
diff --git a/docs/docs/api_reference/indices/document_summary.md b/docs/docs/api_reference/indices/document_summary.md
new file mode 100644
index 0000000000000000000000000000000000000000..9af803ed3c3f35dc34b33870976455911eafddc1
--- /dev/null
+++ b/docs/docs/api_reference/indices/document_summary.md
@@ -0,0 +1,4 @@
+::: llama_index.core.indices
+    options:
+      members:
+        - DocumentSummaryIndex
diff --git a/docs/docs/api_reference/indices/google.md b/docs/docs/api_reference/indices/google.md
new file mode 100644
index 0000000000000000000000000000000000000000..c32021044eea7b39eb2d9e3fba03d0308e187f9d
--- /dev/null
+++ b/docs/docs/api_reference/indices/google.md
@@ -0,0 +1,4 @@
+::: llama_index.indices.managed.google
+    options:
+      members:
+        - GoogleIndex
diff --git a/docs/docs/api_reference/indices/index.md b/docs/docs/api_reference/indices/index.md
new file mode 100644
index 0000000000000000000000000000000000000000..6d23d3f649889ec210eb96989d83365b43b0551e
--- /dev/null
+++ b/docs/docs/api_reference/indices/index.md
@@ -0,0 +1,4 @@
+::: llama_index.core.indices.base
+    options:
+      members:
+        - BaseIndex
diff --git a/docs/docs/api_reference/indices/keyword.md b/docs/docs/api_reference/indices/keyword.md
new file mode 100644
index 0000000000000000000000000000000000000000..683e8c50ebda5a9d8ad6b082e64fceebc3261f5e
--- /dev/null
+++ b/docs/docs/api_reference/indices/keyword.md
@@ -0,0 +1,6 @@
+::: llama_index.core.indices
+    options:
+      members:
+        - KeywordTableIndex
+        - SimpleKeywordTableIndex
+        - RAKEKeywordTableIndex
diff --git a/docs/docs/api_reference/indices/knowledge_graph.md b/docs/docs/api_reference/indices/knowledge_graph.md
new file mode 100644
index 0000000000000000000000000000000000000000..83a19316c19a6246ac7be1ded127fd1603907be4
--- /dev/null
+++ b/docs/docs/api_reference/indices/knowledge_graph.md
@@ -0,0 +1,4 @@
+::: llama_index.core.indices
+    options:
+      members:
+        - KnowledgeGraphIndex
diff --git a/docs/docs/api_reference/indices/llama_cloud.md b/docs/docs/api_reference/indices/llama_cloud.md
new file mode 100644
index 0000000000000000000000000000000000000000..2511eebb101dffbf1c87fdb0b73a582882d9a63c
--- /dev/null
+++ b/docs/docs/api_reference/indices/llama_cloud.md
@@ -0,0 +1,4 @@
+::: llama_index.indices.managed.llama_cloud
+    options:
+      members:
+        - LlamaCloudIndex
diff --git a/docs/docs/api_reference/indices/summary.md b/docs/docs/api_reference/indices/summary.md
new file mode 100644
index 0000000000000000000000000000000000000000..af381e6b3d6d2ee802f342437983d48ff8018002
--- /dev/null
+++ b/docs/docs/api_reference/indices/summary.md
@@ -0,0 +1,4 @@
+::: llama_index.core.indices
+    options:
+      members:
+        - SummaryIndex
diff --git a/docs/docs/api_reference/indices/tree.md b/docs/docs/api_reference/indices/tree.md
new file mode 100644
index 0000000000000000000000000000000000000000..cb6a6e230d166a9550f76454e95bd23bbc6d717e
--- /dev/null
+++ b/docs/docs/api_reference/indices/tree.md
@@ -0,0 +1,5 @@
+::: llama_index.core.indices
+    options:
+      show_root_heading: False
+      members:
+        - TreeIndex
diff --git a/docs/docs/api_reference/indices/vectara.md b/docs/docs/api_reference/indices/vectara.md
new file mode 100644
index 0000000000000000000000000000000000000000..2b59c4dbecec2e420ac2a9f9a9510a02c6808f13
--- /dev/null
+++ b/docs/docs/api_reference/indices/vectara.md
@@ -0,0 +1,4 @@
+::: llama_index.indices.managed.vectara
+    options:
+      members:
+        - VectaraIndex
diff --git a/docs/docs/api_reference/indices/vector.md b/docs/docs/api_reference/indices/vector.md
new file mode 100644
index 0000000000000000000000000000000000000000..9678fe6b412c9f7d4839065feecc311c6535572c
--- /dev/null
+++ b/docs/docs/api_reference/indices/vector.md
@@ -0,0 +1,4 @@
+::: llama_index.core.indices
+    options:
+      members:
+        - VectorStoreIndex
diff --git a/docs/docs/api_reference/indices/zilliz.md b/docs/docs/api_reference/indices/zilliz.md
new file mode 100644
index 0000000000000000000000000000000000000000..20d8ddd47f8b4eaca063d2777a6e3d929e27fa4c
--- /dev/null
+++ b/docs/docs/api_reference/indices/zilliz.md
@@ -0,0 +1,4 @@
+::: llama_index.indices.managed.zilliz
+    options:
+      members:
+        - ZillizCloudPipelineIndex
diff --git a/docs/docs/api_reference/ingestion/index.md b/docs/docs/api_reference/ingestion/index.md
new file mode 100644
index 0000000000000000000000000000000000000000..6ed6504d8d2fdf8ef54684c4a8f89aa942332b7b
--- /dev/null
+++ b/docs/docs/api_reference/ingestion/index.md
@@ -0,0 +1,5 @@
+::: llama_index.core.ingestion.pipeline
+    options:
+      members:
+        - IngestionPipeline
+        - DocstoreStrategy
diff --git a/docs/docs/api_reference/instrumentation/event_handlers.md b/docs/docs/api_reference/instrumentation/event_handlers.md
new file mode 100644
index 0000000000000000000000000000000000000000..82448898f68d177d6b29a594b5a8af3119454dbf
--- /dev/null
+++ b/docs/docs/api_reference/instrumentation/event_handlers.md
@@ -0,0 +1 @@
+::: llama_index.core.instrumentation.event_handlers.base.BaseEventHandler
diff --git a/docs/docs/api_reference/instrumentation/event_types.md b/docs/docs/api_reference/instrumentation/event_types.md
new file mode 100644
index 0000000000000000000000000000000000000000..db13ee4d0a7e6727d0a147c5c37f9521cc322db6
--- /dev/null
+++ b/docs/docs/api_reference/instrumentation/event_types.md
@@ -0,0 +1,51 @@
+::: llama_index.core.instrumentation.events.base.BaseEvent
+
+::: llama_index.core.instrumentation.events.agent.AgentChatWithStepEndEvent
+
+::: llama_index.core.instrumentation.events.agent.AgentChatWithStepStartEvent
+
+::: llama_index.core.instrumentation.events.agent.AgentRunStepEndEvent
+
+::: llama_index.core.instrumentation.events.agent.AgentRunStepStartEvent
+
+::: llama_index.core.instrumentation.events.agent.AgentToolCallEvent
+
+::: llama_index.core.instrumentation.events.chat_engine.StreamChatDeltaReceivedEvent
+
+::: llama_index.core.instrumentation.events.chat_engine.StreamChatEndEvent
+
+::: llama_index.core.instrumentation.events.chat_engine.StreamChatErrorEvent
+
+::: llama_index.core.instrumentation.events.chat_engine.StreamChatStartEvent
+
+::: llama_index.core.instrumentation.events.embedding.EmbeddingEndEvent
+
+::: llama_index.core.instrumentation.events.embedding.EmbeddingStartEvent
+
+::: llama_index.core.instrumentation.events.llm.LLMChatEndEvent
+
+::: llama_index.core.instrumentation.events.llm.LLMChatStartEvent
+
+::: llama_index.core.instrumentation.events.llm.LLMCompletionEndEvent
+
+::: llama_index.core.instrumentation.events.llm.LLMCompletionStartEvent
+
+::: llama_index.core.instrumentation.events.llm.LLMPredictEndEvent
+
+::: llama_index.core.instrumentation.events.llm.LLMPredictStartEvent
+
+::: llama_index.core.instrumentation.events.query.QueryEndEvent
+
+::: llama_index.core.instrumentation.events.query.QueryStartEvent
+
+::: llama_index.core.instrumentation.events.retrieval.RetrievalEndEvent
+
+::: llama_index.core.instrumentation.events.retrieval.RetrievalStartEvent
+
+::: llama_index.core.instrumentation.events.synthesis.GetResponseEndEvent
+
+::: llama_index.core.instrumentation.events.synthesis.GetResponseStartEvent
+
+::: llama_index.core.instrumentation.events.synthesis.SynthesizeEndEvent
+
+::: llama_index.core.instrumentation.events.synthesis.SynthesizeStartEvent
diff --git a/docs/docs/api_reference/instrumentation/index.md b/docs/docs/api_reference/instrumentation/index.md
new file mode 100644
index 0000000000000000000000000000000000000000..4362e7f9dfdc56d3830bcc4e5367a97e60d74aed
--- /dev/null
+++ b/docs/docs/api_reference/instrumentation/index.md
@@ -0,0 +1,9 @@
+# Instrumentation
+
+LlamaIndex contains a simple instrumentation framework that allows you to
+observe events and spans happening in the framework.
+
+- [Event Handlers](./event_handlers.md)
+- [Event Types](./event_types.md)
+- [Span Handlers](./span_handlers.md)
+- [Span Types](./span_types.md)
diff --git a/docs/docs/api_reference/instrumentation/span_handlers.md b/docs/docs/api_reference/instrumentation/span_handlers.md
new file mode 100644
index 0000000000000000000000000000000000000000..373548cdccc535d2ec84ee5db15d040504be16b8
--- /dev/null
+++ b/docs/docs/api_reference/instrumentation/span_handlers.md
@@ -0,0 +1,3 @@
+::: llama_index.core.instrumentation.span_handlers.base.BaseSpanHandler
+
+::: llama_index.core.instrumentation.span_handlers.simple.SimpleSpanHandler
diff --git a/docs/docs/api_reference/instrumentation/span_types.md b/docs/docs/api_reference/instrumentation/span_types.md
new file mode 100644
index 0000000000000000000000000000000000000000..94243b00b27ef18af01a46fedc4fda61721de0a4
--- /dev/null
+++ b/docs/docs/api_reference/instrumentation/span_types.md
@@ -0,0 +1 @@
+::: llama_index.core.instrumentation.span.base.BaseSpan
diff --git a/docs/docs/api_reference/llama_dataset/index.md b/docs/docs/api_reference/llama_dataset/index.md
new file mode 100644
index 0000000000000000000000000000000000000000..84fe4dfe57f76f671e5e82ec192321cf34d88214
--- /dev/null
+++ b/docs/docs/api_reference/llama_dataset/index.md
@@ -0,0 +1 @@
+::: llama_index.core.llama_dataset
diff --git a/docs/docs/api_reference/memory/chat_memory_buffer.md b/docs/docs/api_reference/memory/chat_memory_buffer.md
new file mode 100644
index 0000000000000000000000000000000000000000..334b77b0d28559d24d715a578fc97ad081fcfb06
--- /dev/null
+++ b/docs/docs/api_reference/memory/chat_memory_buffer.md
@@ -0,0 +1 @@
+::: llama_index.core.memory.chat_memory_buffer
diff --git a/docs/docs/api_reference/memory/index.md b/docs/docs/api_reference/memory/index.md
new file mode 100644
index 0000000000000000000000000000000000000000..de1559ae3f3990a07293820122f02cbed8684e1d
--- /dev/null
+++ b/docs/docs/api_reference/memory/index.md
@@ -0,0 +1 @@
+::: llama_index.core.memory.types
diff --git a/docs/docs/api_reference/multi_modal_llms/anthropic.md b/docs/docs/api_reference/multi_modal_llms/anthropic.md
new file mode 100644
index 0000000000000000000000000000000000000000..9dc27895b184fa9134083f8d6b3aad12a3da19eb
--- /dev/null
+++ b/docs/docs/api_reference/multi_modal_llms/anthropic.md
@@ -0,0 +1,4 @@
+::: llama_index.multi_modal_llms.anthropic
+    options:
+      members:
+        - AnthropicMultiModal
diff --git a/docs/docs/api_reference/multi_modal_llms/azure_openai.md b/docs/docs/api_reference/multi_modal_llms/azure_openai.md
new file mode 100644
index 0000000000000000000000000000000000000000..61718ea082b8d18c205059176989104d4132d4a7
--- /dev/null
+++ b/docs/docs/api_reference/multi_modal_llms/azure_openai.md
@@ -0,0 +1,4 @@
+::: llama_index.multi_modal_llms.azure_openai
+    options:
+      members:
+        - AzureOpenAIMultiModal
diff --git a/docs/docs/api_reference/multi_modal_llms/dashscope.md b/docs/docs/api_reference/multi_modal_llms/dashscope.md
new file mode 100644
index 0000000000000000000000000000000000000000..5a70e3d2abb81c179f96cc0c1a6990328e0737e7
--- /dev/null
+++ b/docs/docs/api_reference/multi_modal_llms/dashscope.md
@@ -0,0 +1,4 @@
+::: llama_index.multi_modal_llms.dashscope
+    options:
+      members:
+        - DashScopeMultiModal
diff --git a/docs/docs/api_reference/multi_modal_llms/gemini.md b/docs/docs/api_reference/multi_modal_llms/gemini.md
new file mode 100644
index 0000000000000000000000000000000000000000..4922bce0a754ff907229da3158d4430e674bbc02
--- /dev/null
+++ b/docs/docs/api_reference/multi_modal_llms/gemini.md
@@ -0,0 +1,4 @@
+::: llama_index.multi_modal_llms.gemini
+    options:
+      members:
+        - GeminiMultiModal
diff --git a/docs/docs/api_reference/multi_modal_llms/index.md b/docs/docs/api_reference/multi_modal_llms/index.md
new file mode 100644
index 0000000000000000000000000000000000000000..6d7edc82e3bc649b8becc4edb7f36a4d746e574c
--- /dev/null
+++ b/docs/docs/api_reference/multi_modal_llms/index.md
@@ -0,0 +1 @@
+::: llama_index.core.multi_modal_llms.base
diff --git a/docs/docs/api_reference/multi_modal_llms/ollama.md b/docs/docs/api_reference/multi_modal_llms/ollama.md
new file mode 100644
index 0000000000000000000000000000000000000000..9a3c55fcc919c971743594e5c74d9c9f20f55d78
--- /dev/null
+++ b/docs/docs/api_reference/multi_modal_llms/ollama.md
@@ -0,0 +1,4 @@
+::: llama_index.multi_modal_llms.ollama
+    options:
+      members:
+        - OllamaMultiModal
diff --git a/docs/docs/api_reference/multi_modal_llms/openai.md b/docs/docs/api_reference/multi_modal_llms/openai.md
new file mode 100644
index 0000000000000000000000000000000000000000..9c138dc98f30ea564d0fba065622327cc7848175
--- /dev/null
+++ b/docs/docs/api_reference/multi_modal_llms/openai.md
@@ -0,0 +1,4 @@
+::: llama_index.multi_modal_llms.openai
+    options:
+      members:
+        - OpenAIMultiModal
diff --git a/docs/docs/api_reference/multi_modal_llms/replicate.md b/docs/docs/api_reference/multi_modal_llms/replicate.md
new file mode 100644
index 0000000000000000000000000000000000000000..6b7526a553973a61217093dceabbfcf6c982636f
--- /dev/null
+++ b/docs/docs/api_reference/multi_modal_llms/replicate.md
@@ -0,0 +1,4 @@
+::: llama_index.multi_modal_llms.replicate
+    options:
+      members:
+        - ReplicateMultiModal
diff --git a/docs/docs/api_reference/node_parsers/code.md b/docs/docs/api_reference/node_parsers/code.md
new file mode 100644
index 0000000000000000000000000000000000000000..222cd70b2d034e786c6ba620a876fbf064bceca3
--- /dev/null
+++ b/docs/docs/api_reference/node_parsers/code.md
@@ -0,0 +1,4 @@
+::: llama_index.core.node_parser
+    options:
+      members:
+        - CodeSplitter
diff --git a/docs/docs/api_reference/node_parsers/hierarchical.md b/docs/docs/api_reference/node_parsers/hierarchical.md
new file mode 100644
index 0000000000000000000000000000000000000000..5245b851143d3e6d83b4e2cfdd31e63ba67fb480
--- /dev/null
+++ b/docs/docs/api_reference/node_parsers/hierarchical.md
@@ -0,0 +1,8 @@
+::: llama_index.core.node_parser
+    options:
+      members:
+        - HierarchicalNodeParser
+        - get_leaf_nodes
+        - get_root_nodes
+        - get_child_nodes
+        - get_deeper_nodes
diff --git a/docs/docs/api_reference/node_parsers/html.md b/docs/docs/api_reference/node_parsers/html.md
new file mode 100644
index 0000000000000000000000000000000000000000..11a977e9457d77fcc76cbcd4666ba8a6b9756b75
--- /dev/null
+++ b/docs/docs/api_reference/node_parsers/html.md
@@ -0,0 +1,4 @@
+::: llama_index.core.node_parser
+    options:
+      members:
+        - HTMLNodeParser
diff --git a/docs/docs/api_reference/node_parsers/index.md b/docs/docs/api_reference/node_parsers/index.md
new file mode 100644
index 0000000000000000000000000000000000000000..359df9a40dd5f8cd94cdcb0927fed773170ba8ac
--- /dev/null
+++ b/docs/docs/api_reference/node_parsers/index.md
@@ -0,0 +1 @@
+::: llama_index.core.node_parser.interface
diff --git a/docs/docs/api_reference/node_parsers/json.md b/docs/docs/api_reference/node_parsers/json.md
new file mode 100644
index 0000000000000000000000000000000000000000..eddf2015da7c28e2a652cbee446c3714f89a28de
--- /dev/null
+++ b/docs/docs/api_reference/node_parsers/json.md
@@ -0,0 +1,4 @@
+::: llama_index.core.node_parser
+    options:
+      members:
+        - JSONNodeParser
diff --git a/docs/docs/api_reference/node_parsers/langchain.md b/docs/docs/api_reference/node_parsers/langchain.md
new file mode 100644
index 0000000000000000000000000000000000000000..6dcb2bc004da48ba773d9ab5668e90a06d8e2a05
--- /dev/null
+++ b/docs/docs/api_reference/node_parsers/langchain.md
@@ -0,0 +1,4 @@
+::: llama_index.core.node_parser
+    options:
+      members:
+        - LangchainNodeParser
diff --git a/docs/docs/api_reference/node_parsers/markdown.md b/docs/docs/api_reference/node_parsers/markdown.md
new file mode 100644
index 0000000000000000000000000000000000000000..f8a8228790d2b60b2b24085c9c3aedb01d18015b
--- /dev/null
+++ b/docs/docs/api_reference/node_parsers/markdown.md
@@ -0,0 +1,4 @@
+::: llama_index.core.node_parser
+    options:
+      members:
+        - MarkdownNodeParser
diff --git a/docs/docs/api_reference/node_parsers/markdown_element.md b/docs/docs/api_reference/node_parsers/markdown_element.md
new file mode 100644
index 0000000000000000000000000000000000000000..242f3bd61a1e9d9f52c7cb84501c8a39cc99d9e6
--- /dev/null
+++ b/docs/docs/api_reference/node_parsers/markdown_element.md
@@ -0,0 +1,4 @@
+::: llama_index.core.node_parser
+    options:
+      members:
+        - MarkdownElementNodeParser
diff --git a/docs/docs/api_reference/node_parsers/semantic_splitter.md b/docs/docs/api_reference/node_parsers/semantic_splitter.md
new file mode 100644
index 0000000000000000000000000000000000000000..5dbf50ba0570f630b3103fd3794d9a40b193b07b
--- /dev/null
+++ b/docs/docs/api_reference/node_parsers/semantic_splitter.md
@@ -0,0 +1,4 @@
+::: llama_index.core.node_parser
+    options:
+      members:
+        - SemanticSplitterNodeParser
diff --git a/docs/docs/api_reference/node_parsers/sentence_splitter.md b/docs/docs/api_reference/node_parsers/sentence_splitter.md
new file mode 100644
index 0000000000000000000000000000000000000000..bcd78fda211589bb545008bef898bb179cd90802
--- /dev/null
+++ b/docs/docs/api_reference/node_parsers/sentence_splitter.md
@@ -0,0 +1,4 @@
+::: llama_index.core.node_parser
+    options:
+      members:
+        - SentenceSplitter
diff --git a/docs/docs/api_reference/node_parsers/sentence_window.md b/docs/docs/api_reference/node_parsers/sentence_window.md
new file mode 100644
index 0000000000000000000000000000000000000000..a77fe2180cc9ed72c294f03c9ceefdf102ee0a9a
--- /dev/null
+++ b/docs/docs/api_reference/node_parsers/sentence_window.md
@@ -0,0 +1,4 @@
+::: llama_index.core.node_parser
+    options:
+      members:
+        - SentenceWindowNodeParser
diff --git a/docs/docs/api_reference/node_parsers/token_text_splitter.md b/docs/docs/api_reference/node_parsers/token_text_splitter.md
new file mode 100644
index 0000000000000000000000000000000000000000..10c0ff46005471baf20527ed7a2139009e198dc8
--- /dev/null
+++ b/docs/docs/api_reference/node_parsers/token_text_splitter.md
@@ -0,0 +1,4 @@
+::: llama_index.core.node_parser
+    options:
+      members:
+        - TokenTextSplitter
diff --git a/docs/docs/api_reference/node_parsers/unstructured_element.md b/docs/docs/api_reference/node_parsers/unstructured_element.md
new file mode 100644
index 0000000000000000000000000000000000000000..44da5da1974ed6d5e2e7ad01a11cc9c8c163bfd6
--- /dev/null
+++ b/docs/docs/api_reference/node_parsers/unstructured_element.md
@@ -0,0 +1,4 @@
+::: llama_index.core.node_parser
+    options:
+      members:
+        - UnstructuredElementNodeParser
diff --git a/docs/docs/api_reference/objects/index.md b/docs/docs/api_reference/objects/index.md
new file mode 100644
index 0000000000000000000000000000000000000000..e596dcae04b94f1219f10ff01a0d4dda85d65c23
--- /dev/null
+++ b/docs/docs/api_reference/objects/index.md
@@ -0,0 +1 @@
+::: llama_index.core.objects
diff --git a/docs/docs/api_reference/output_parsers/guardrails.md b/docs/docs/api_reference/output_parsers/guardrails.md
new file mode 100644
index 0000000000000000000000000000000000000000..8d7b4d3cb217c7a4382bd05a5fc41e40443b6020
--- /dev/null
+++ b/docs/docs/api_reference/output_parsers/guardrails.md
@@ -0,0 +1,4 @@
+::: llama_index.output_parsers.guardrails
+    options:
+      members:
+        - GuardrailsOutputParser
diff --git a/docs/docs/api_reference/output_parsers/index.md b/docs/docs/api_reference/output_parsers/index.md
new file mode 100644
index 0000000000000000000000000000000000000000..2239a557df3d96794997289b383d0dff8ef4b6af
--- /dev/null
+++ b/docs/docs/api_reference/output_parsers/index.md
@@ -0,0 +1,4 @@
+::: llama_index.core.types
+    options:
+      members:
+        - BaseOutputParser
diff --git a/docs/docs/api_reference/output_parsers/langchain.md b/docs/docs/api_reference/output_parsers/langchain.md
new file mode 100644
index 0000000000000000000000000000000000000000..8392d65c118bab5f1976a39c729fb3627aadc376
--- /dev/null
+++ b/docs/docs/api_reference/output_parsers/langchain.md
@@ -0,0 +1,4 @@
+::: llama_index.output_parsers.langchain
+    options:
+      members:
+        - LangchainOutputParser
diff --git a/docs/docs/api_reference/output_parsers/pydantic.md b/docs/docs/api_reference/output_parsers/pydantic.md
new file mode 100644
index 0000000000000000000000000000000000000000..76fbd330da97b2236addaafabad0be6dd1e8cc85
--- /dev/null
+++ b/docs/docs/api_reference/output_parsers/pydantic.md
@@ -0,0 +1,4 @@
+::: llama_index.core.output_parsers
+    options:
+      members:
+        - PydanticOutputParser
diff --git a/docs/docs/api_reference/output_parsers/selection.md b/docs/docs/api_reference/output_parsers/selection.md
new file mode 100644
index 0000000000000000000000000000000000000000..355e093146539a8d2d9b9f88d141cc9affd56567
--- /dev/null
+++ b/docs/docs/api_reference/output_parsers/selection.md
@@ -0,0 +1,4 @@
+::: llama_index.core.output_parsers
+    options:
+      members:
+        - SelectionOutputParser
diff --git a/docs/docs/api_reference/packs/agent_search_retriever.md b/docs/docs/api_reference/packs/agent_search_retriever.md
new file mode 100644
index 0000000000000000000000000000000000000000..c156a9e31df96226957ee03924deafa6da448422
--- /dev/null
+++ b/docs/docs/api_reference/packs/agent_search_retriever.md
@@ -0,0 +1,4 @@
+::: llama_index.packs.agent_search_retriever
+    options:
+      members:
+        - AgentSearchRetrieverPack
diff --git a/docs/docs/api_reference/packs/agents_llm_compiler.md b/docs/docs/api_reference/packs/agents_llm_compiler.md
new file mode 100644
index 0000000000000000000000000000000000000000..49c5354ccc2221360119cf6af52e2404006d88c3
--- /dev/null
+++ b/docs/docs/api_reference/packs/agents_llm_compiler.md
@@ -0,0 +1,4 @@
+::: llama_index.packs.agents_llm_compiler
+    options:
+      members:
+        - LLMCompilerAgentPack
diff --git a/docs/docs/api_reference/packs/amazon_product_extraction.md b/docs/docs/api_reference/packs/amazon_product_extraction.md
new file mode 100644
index 0000000000000000000000000000000000000000..f8a632ee6fba14c0c09a70d073a08cae0745e0a8
--- /dev/null
+++ b/docs/docs/api_reference/packs/amazon_product_extraction.md
@@ -0,0 +1,4 @@
+::: llama_index.packs.amazon_product_extraction
+    options:
+      members:
+        - AmazonProductExtractionPack
diff --git a/docs/docs/api_reference/packs/arize_phoenix_query_engine.md b/docs/docs/api_reference/packs/arize_phoenix_query_engine.md
new file mode 100644
index 0000000000000000000000000000000000000000..b3a9daca9d86a97cad8ae3d854de485ec09cf905
--- /dev/null
+++ b/docs/docs/api_reference/packs/arize_phoenix_query_engine.md
@@ -0,0 +1,4 @@
+::: llama_index.packs.arize_phoenix_query_engine
+    options:
+      members:
+        - ArizePhoenixQueryEnginePack
diff --git a/docs/docs/api_reference/packs/auto_merging_retriever.md b/docs/docs/api_reference/packs/auto_merging_retriever.md
new file mode 100644
index 0000000000000000000000000000000000000000..3f8c92242b57cc153978707c0b98e1a65679b77e
--- /dev/null
+++ b/docs/docs/api_reference/packs/auto_merging_retriever.md
@@ -0,0 +1,4 @@
+::: llama_index.packs.auto_merging_retriever
+    options:
+      members:
+        - AutoMergingRetrieverPack
diff --git a/docs/docs/api_reference/packs/chroma_autoretrieval.md b/docs/docs/api_reference/packs/chroma_autoretrieval.md
new file mode 100644
index 0000000000000000000000000000000000000000..6ef43db627cea1e9df3dd819c118aaa09f76f209
--- /dev/null
+++ b/docs/docs/api_reference/packs/chroma_autoretrieval.md
@@ -0,0 +1,4 @@
+::: llama_index.packs.chroma_autoretrieval
+    options:
+      members:
+        - ChromaAutoretrievalPack
diff --git a/docs/docs/api_reference/packs/code_hierarchy.md b/docs/docs/api_reference/packs/code_hierarchy.md
new file mode 100644
index 0000000000000000000000000000000000000000..577b2976c1d90adffec2c7d29d78a30f39aebc1c
--- /dev/null
+++ b/docs/docs/api_reference/packs/code_hierarchy.md
@@ -0,0 +1,4 @@
+::: llama_index.packs.code_hierarchy
+    options:
+      members:
+        - CodeHierarchyAgentPack
diff --git a/docs/docs/api_reference/packs/cogniswitch_agent.md b/docs/docs/api_reference/packs/cogniswitch_agent.md
new file mode 100644
index 0000000000000000000000000000000000000000..3a20b99202e671b94db9daa35250050a58bdf410
--- /dev/null
+++ b/docs/docs/api_reference/packs/cogniswitch_agent.md
@@ -0,0 +1,4 @@
+::: llama_index.packs.cogniswitch_agent
+    options:
+      members:
+        - CogniswitchAgentPack
diff --git a/docs/docs/api_reference/packs/cohere_citation_chat.md b/docs/docs/api_reference/packs/cohere_citation_chat.md
new file mode 100644
index 0000000000000000000000000000000000000000..dd1d8d64a8aa84a17dc9c72e9ea12907f4d02ca5
--- /dev/null
+++ b/docs/docs/api_reference/packs/cohere_citation_chat.md
@@ -0,0 +1,4 @@
+::: llama_index.packs.cohere_citation_chat
+    options:
+      members:
+        - CohereCitationChatEnginePack
diff --git a/docs/docs/api_reference/packs/corrective_rag.md b/docs/docs/api_reference/packs/corrective_rag.md
new file mode 100644
index 0000000000000000000000000000000000000000..6822a18ab128390ac1943fea5c83cfdb1a93fdc2
--- /dev/null
+++ b/docs/docs/api_reference/packs/corrective_rag.md
@@ -0,0 +1,4 @@
+::: llama_index.packs.corrective_rag
+    options:
+      members:
+        - CorrectiveRAGPack
diff --git a/docs/docs/api_reference/packs/deeplake_deepmemory_retriever.md b/docs/docs/api_reference/packs/deeplake_deepmemory_retriever.md
new file mode 100644
index 0000000000000000000000000000000000000000..d4eb8fd2dfddd56081a971e4f40951f45954eb6e
--- /dev/null
+++ b/docs/docs/api_reference/packs/deeplake_deepmemory_retriever.md
@@ -0,0 +1,4 @@
+::: llama_index.packs.deeplake_deepmemory_retriever
+    options:
+      members:
+        - DeepMemoryRetrieverPack
diff --git a/docs/docs/api_reference/packs/deeplake_multimodal_retrieval.md b/docs/docs/api_reference/packs/deeplake_multimodal_retrieval.md
new file mode 100644
index 0000000000000000000000000000000000000000..ebd2bebcf4088e27b7f081df6567d34a835fa938
--- /dev/null
+++ b/docs/docs/api_reference/packs/deeplake_multimodal_retrieval.md
@@ -0,0 +1,4 @@
+::: llama_index.packs.deeplake_multimodal_retrieval
+    options:
+      members:
+        - DeepLakeMultimodalRetrieverPack
diff --git a/docs/docs/api_reference/packs/dense_x_retrieval.md b/docs/docs/api_reference/packs/dense_x_retrieval.md
new file mode 100644
index 0000000000000000000000000000000000000000..34787b868dd9bd5d50f5101598e0dd67e99d8395
--- /dev/null
+++ b/docs/docs/api_reference/packs/dense_x_retrieval.md
@@ -0,0 +1,4 @@
+::: llama_index.packs.dense_x_retrieval
+    options:
+      members:
+        - DenseXRetrievalPack
diff --git a/docs/docs/api_reference/packs/diff_private_simple_dataset.md b/docs/docs/api_reference/packs/diff_private_simple_dataset.md
new file mode 100644
index 0000000000000000000000000000000000000000..fcec0101e25a088294492ab195fd2bddc134b497
--- /dev/null
+++ b/docs/docs/api_reference/packs/diff_private_simple_dataset.md
@@ -0,0 +1,4 @@
+::: llama_index.packs.diff_private_simple_dataset
+    options:
+      members:
+        - DiffPrivateSimpleDatasetPack
diff --git a/docs/docs/api_reference/packs/docugami_kg_rag.md b/docs/docs/api_reference/packs/docugami_kg_rag.md
new file mode 100644
index 0000000000000000000000000000000000000000..6776675e95ff5c94832961ec1c75e684ece65c27
--- /dev/null
+++ b/docs/docs/api_reference/packs/docugami_kg_rag.md
@@ -0,0 +1,4 @@
+::: llama_index.packs.docugami_kg_rag
+    options:
+      members:
+        - DocugamiKgRagPack
diff --git a/docs/docs/api_reference/packs/evaluator_benchmarker.md b/docs/docs/api_reference/packs/evaluator_benchmarker.md
new file mode 100644
index 0000000000000000000000000000000000000000..c6d1ff5356cd05a25657927ef40774300bd77d15
--- /dev/null
+++ b/docs/docs/api_reference/packs/evaluator_benchmarker.md
@@ -0,0 +1,4 @@
+::: llama_index.packs.evaluator_benchmarker
+    options:
+      members:
+        - EvaluatorBenchmarkerPack
diff --git a/docs/docs/api_reference/packs/finchat.md b/docs/docs/api_reference/packs/finchat.md
new file mode 100644
index 0000000000000000000000000000000000000000..41f52a108e151f281202c316417139ebcc5e2c44
--- /dev/null
+++ b/docs/docs/api_reference/packs/finchat.md
@@ -0,0 +1,4 @@
+::: llama_index.packs.finchat
+    options:
+      members:
+        - FinanceChatPack
diff --git a/docs/docs/api_reference/packs/fusion_retriever.md b/docs/docs/api_reference/packs/fusion_retriever.md
new file mode 100644
index 0000000000000000000000000000000000000000..374269e8fc062345b8f37106fd7a5ffdb0301795
--- /dev/null
+++ b/docs/docs/api_reference/packs/fusion_retriever.md
@@ -0,0 +1,5 @@
+::: llama_index.packs.fusion_retriever
+    options:
+      members:
+        - HybridFusionRetrieverPack
+        - QueryRewritingRetrieverPack
diff --git a/docs/docs/api_reference/packs/fuzzy_citation.md b/docs/docs/api_reference/packs/fuzzy_citation.md
new file mode 100644
index 0000000000000000000000000000000000000000..7f9aa415323798473d6ef254f47ee596484744d7
--- /dev/null
+++ b/docs/docs/api_reference/packs/fuzzy_citation.md
@@ -0,0 +1,4 @@
+::: llama_index.packs.fuzzy_citation
+    options:
+      members:
+        - FuzzyCitationEnginePack
diff --git a/docs/docs/api_reference/packs/gmail_openai_agent.md b/docs/docs/api_reference/packs/gmail_openai_agent.md
new file mode 100644
index 0000000000000000000000000000000000000000..f8a45d4832262f95f27af6892508e9b71326f556
--- /dev/null
+++ b/docs/docs/api_reference/packs/gmail_openai_agent.md
@@ -0,0 +1,4 @@
+::: llama_index.packs.gmail_openai_agent
+    options:
+      members:
+        - GmailOpenAIAgentPack
diff --git a/docs/docs/api_reference/packs/gradio_agent_chat.md b/docs/docs/api_reference/packs/gradio_agent_chat.md
new file mode 100644
index 0000000000000000000000000000000000000000..102c575e7127dd460ae30ac75569a83842c89046
--- /dev/null
+++ b/docs/docs/api_reference/packs/gradio_agent_chat.md
@@ -0,0 +1,4 @@
+::: llama_index.packs.gradio_agent_chat
+    options:
+      members:
+        - GradioAgentChatPack
diff --git a/docs/docs/api_reference/packs/gradio_react_agent_chatbot.md b/docs/docs/api_reference/packs/gradio_react_agent_chatbot.md
new file mode 100644
index 0000000000000000000000000000000000000000..9f4ae18efb5a648f5fdeb9d4346aa28fef15baf3
--- /dev/null
+++ b/docs/docs/api_reference/packs/gradio_react_agent_chatbot.md
@@ -0,0 +1,4 @@
+::: llama_index.packs.gradio_react_agent_chatbot
+    options:
+      members:
+        - GradioReActAgentPack
diff --git a/docs/docs/api_reference/packs/index.md b/docs/docs/api_reference/packs/index.md
new file mode 100644
index 0000000000000000000000000000000000000000..2a71761f9031375e936cd14314061d98a6115cf7
--- /dev/null
+++ b/docs/docs/api_reference/packs/index.md
@@ -0,0 +1 @@
+::: llama_index.core.llama_pack
diff --git a/docs/docs/api_reference/packs/infer_retrieve_rerank.md b/docs/docs/api_reference/packs/infer_retrieve_rerank.md
new file mode 100644
index 0000000000000000000000000000000000000000..1ffa1d6b392b65a4a5407254ed369a3dbcd7caa0
--- /dev/null
+++ b/docs/docs/api_reference/packs/infer_retrieve_rerank.md
@@ -0,0 +1,4 @@
+::: llama_index.packs.infer_retrieve_rerank
+    options:
+      members:
+        - InferRetrieveRerankPack
diff --git a/docs/docs/api_reference/packs/koda_retriever.md b/docs/docs/api_reference/packs/koda_retriever.md
new file mode 100644
index 0000000000000000000000000000000000000000..b2e1759e9623871b0328cab4e8c48bee0d8cfff4
--- /dev/null
+++ b/docs/docs/api_reference/packs/koda_retriever.md
@@ -0,0 +1,4 @@
+::: llama_index.packs.koda_retriever
+    options:
+      members:
+        - KodaRetrieverPack
diff --git a/docs/docs/api_reference/packs/llama_dataset_metadata.md b/docs/docs/api_reference/packs/llama_dataset_metadata.md
new file mode 100644
index 0000000000000000000000000000000000000000..5f2819b90f26c11e3dfacecb6d9efb9e0889ab50
--- /dev/null
+++ b/docs/docs/api_reference/packs/llama_dataset_metadata.md
@@ -0,0 +1,4 @@
+::: llama_index.packs.llama_dataset_metadata
+    options:
+      members:
+        - LlamaDatasetMetadataPack
diff --git a/docs/docs/api_reference/packs/llama_guard_moderator.md b/docs/docs/api_reference/packs/llama_guard_moderator.md
new file mode 100644
index 0000000000000000000000000000000000000000..c7e5dc0d40cb46cacc6d7cbb3e9f72f57721c33d
--- /dev/null
+++ b/docs/docs/api_reference/packs/llama_guard_moderator.md
@@ -0,0 +1,4 @@
+::: llama_index.packs.llama_guard_moderator
+    options:
+      members:
+        - LlamaGuardModeratorPack
diff --git a/docs/docs/api_reference/packs/llava_completion.md b/docs/docs/api_reference/packs/llava_completion.md
new file mode 100644
index 0000000000000000000000000000000000000000..e7abb81699d52c5ae12ee43d557aa3f36c393d07
--- /dev/null
+++ b/docs/docs/api_reference/packs/llava_completion.md
@@ -0,0 +1,4 @@
+::: llama_index.packs.llava_completion
+    options:
+      members:
+        - LlavaCompletionPack
diff --git a/docs/docs/api_reference/packs/multi_document_agents.md b/docs/docs/api_reference/packs/multi_document_agents.md
new file mode 100644
index 0000000000000000000000000000000000000000..99cc50418ecc429fe30d364dd6e7ce6fbf295116
--- /dev/null
+++ b/docs/docs/api_reference/packs/multi_document_agents.md
@@ -0,0 +1,4 @@
+::: llama_index.packs.multi_document_agents
+    options:
+      members:
+        - MultiDocumentAgentsPack
diff --git a/docs/docs/api_reference/packs/multi_tenancy_rag.md b/docs/docs/api_reference/packs/multi_tenancy_rag.md
new file mode 100644
index 0000000000000000000000000000000000000000..dd705e54bdb157be4215350464bd92cf5f64c710
--- /dev/null
+++ b/docs/docs/api_reference/packs/multi_tenancy_rag.md
@@ -0,0 +1,4 @@
+::: llama_index.packs.multi_tenancy_rag
+    options:
+      members:
+        - MultiTenancyRAGPack
diff --git a/docs/docs/api_reference/packs/multidoc_autoretrieval.md b/docs/docs/api_reference/packs/multidoc_autoretrieval.md
new file mode 100644
index 0000000000000000000000000000000000000000..3ba372d831c3f7316ddd28bc5936d3778e61ac8b
--- /dev/null
+++ b/docs/docs/api_reference/packs/multidoc_autoretrieval.md
@@ -0,0 +1,4 @@
+::: llama_index.packs.multidoc_autoretrieval
+    options:
+      members:
+        - MultiDocAutoRetrieverPack
diff --git a/docs/docs/api_reference/packs/nebulagraph_query_engine.md b/docs/docs/api_reference/packs/nebulagraph_query_engine.md
new file mode 100644
index 0000000000000000000000000000000000000000..483d1723e8905308f49f012eb62d0387f4df2546
--- /dev/null
+++ b/docs/docs/api_reference/packs/nebulagraph_query_engine.md
@@ -0,0 +1,4 @@
+::: llama_index.packs.nebulagraph_query_engine
+    options:
+      members:
+        - NebulaGraphQueryEnginePack
diff --git a/docs/docs/api_reference/packs/neo4j_query_engine.md b/docs/docs/api_reference/packs/neo4j_query_engine.md
new file mode 100644
index 0000000000000000000000000000000000000000..53923b68c11fc48b3fbce0a1e9de069ca90625a7
--- /dev/null
+++ b/docs/docs/api_reference/packs/neo4j_query_engine.md
@@ -0,0 +1,4 @@
+::: llama_index.packs.neo4j_query_engine
+    options:
+      members:
+        - Neo4jQueryEnginePack
diff --git a/docs/docs/api_reference/packs/node_parser_semantic_chunking.md b/docs/docs/api_reference/packs/node_parser_semantic_chunking.md
new file mode 100644
index 0000000000000000000000000000000000000000..a146be0fad1c7a822210eb25eb8b0cd174bd0097
--- /dev/null
+++ b/docs/docs/api_reference/packs/node_parser_semantic_chunking.md
@@ -0,0 +1,4 @@
+::: llama_index.packs.node_parser_semantic_chunking
+    options:
+      members:
+        - SemanticChunkingQueryEnginePack
diff --git a/docs/docs/api_reference/packs/ollama_query_engine.md b/docs/docs/api_reference/packs/ollama_query_engine.md
new file mode 100644
index 0000000000000000000000000000000000000000..897252ff5f80ec87becbf86401829f3aa03e86b5
--- /dev/null
+++ b/docs/docs/api_reference/packs/ollama_query_engine.md
@@ -0,0 +1,4 @@
+::: llama_index.packs.ollama_query_engine
+    options:
+      members:
+        - OllamaQueryEnginePack
diff --git a/docs/docs/api_reference/packs/panel_chatbot.md b/docs/docs/api_reference/packs/panel_chatbot.md
new file mode 100644
index 0000000000000000000000000000000000000000..191d68103a91b70d758c4931b225a89aae60177f
--- /dev/null
+++ b/docs/docs/api_reference/packs/panel_chatbot.md
@@ -0,0 +1,4 @@
+::: llama_index.packs.panel_chatbot
+    options:
+      members:
+        - PanelChatPack
diff --git a/docs/docs/api_reference/packs/query_understanding_agent.md b/docs/docs/api_reference/packs/query_understanding_agent.md
new file mode 100644
index 0000000000000000000000000000000000000000..ebeffed79f54516898b8a0a2ecdcac4053030f79
--- /dev/null
+++ b/docs/docs/api_reference/packs/query_understanding_agent.md
@@ -0,0 +1,4 @@
+::: llama_index.packs.query_understanding_agent
+    options:
+      members:
+        - QueryUnderstandingPack
diff --git a/docs/docs/api_reference/packs/rag_cli_local.md b/docs/docs/api_reference/packs/rag_cli_local.md
new file mode 100644
index 0000000000000000000000000000000000000000..d84407d9f70b6ad3926aadeea5e775cb62337070
--- /dev/null
+++ b/docs/docs/api_reference/packs/rag_cli_local.md
@@ -0,0 +1,4 @@
+::: llama_index.packs.rag_cli_local
+    options:
+      members:
+        - LocalRAGCLIPack
diff --git a/docs/docs/api_reference/packs/rag_evaluator.md b/docs/docs/api_reference/packs/rag_evaluator.md
new file mode 100644
index 0000000000000000000000000000000000000000..bd4e6420a2433e453af8e20fbfe573ced6a2c7ca
--- /dev/null
+++ b/docs/docs/api_reference/packs/rag_evaluator.md
@@ -0,0 +1,4 @@
+::: llama_index.packs.rag_evaluator
+    options:
+      members:
+        - RagEvaluatorPack
diff --git a/docs/docs/api_reference/packs/rag_fusion_query_pipeline.md b/docs/docs/api_reference/packs/rag_fusion_query_pipeline.md
new file mode 100644
index 0000000000000000000000000000000000000000..35b966ee8ae82cf730ff1c8212d9b01adf75abb3
--- /dev/null
+++ b/docs/docs/api_reference/packs/rag_fusion_query_pipeline.md
@@ -0,0 +1,4 @@
+::: llama_index.packs.rag_fusion_query_pipeline
+    options:
+      members:
+        - RAGFusionPipelinePack
diff --git a/docs/docs/api_reference/packs/ragatouille_retriever.md b/docs/docs/api_reference/packs/ragatouille_retriever.md
new file mode 100644
index 0000000000000000000000000000000000000000..6366801e42c7d1f97045b3b65a43e33729708399
--- /dev/null
+++ b/docs/docs/api_reference/packs/ragatouille_retriever.md
@@ -0,0 +1,4 @@
+::: llama_index.packs.ragatouille_retriever
+    options:
+      members:
+        - RAGatouilleRetrieverPack
diff --git a/docs/docs/api_reference/packs/raptor.md b/docs/docs/api_reference/packs/raptor.md
new file mode 100644
index 0000000000000000000000000000000000000000..5cc4569ec83408df687be7cc36a6e6afa66f3539
--- /dev/null
+++ b/docs/docs/api_reference/packs/raptor.md
@@ -0,0 +1,4 @@
+::: llama_index.packs.raptor
+    options:
+      members:
+        - RaptorPack
diff --git a/docs/docs/api_reference/packs/recursive_retriever.md b/docs/docs/api_reference/packs/recursive_retriever.md
new file mode 100644
index 0000000000000000000000000000000000000000..43980882c896dd55a8628295e0b9bd5ba046e65a
--- /dev/null
+++ b/docs/docs/api_reference/packs/recursive_retriever.md
@@ -0,0 +1,5 @@
+::: llama_index.packs.recursive_retriever
+    options:
+      members:
+        - EmbeddedTablesUnstructuredRetrieverPack
+        - RecursiveRetrieverSmallToBigPack
diff --git a/docs/docs/api_reference/packs/redis_ingestion_pipeline.md b/docs/docs/api_reference/packs/redis_ingestion_pipeline.md
new file mode 100644
index 0000000000000000000000000000000000000000..1fbef21a5d5e2e3be7c51ea575ef215cd73227c5
--- /dev/null
+++ b/docs/docs/api_reference/packs/redis_ingestion_pipeline.md
@@ -0,0 +1,4 @@
+::: llama_index.packs.redis_ingestion_pipeline
+    options:
+      members:
+        - RedisIngestionPipelinePack
diff --git a/docs/docs/api_reference/packs/resume_screener.md b/docs/docs/api_reference/packs/resume_screener.md
new file mode 100644
index 0000000000000000000000000000000000000000..caaa991886f6640c21314422751369aee412bbcc
--- /dev/null
+++ b/docs/docs/api_reference/packs/resume_screener.md
@@ -0,0 +1,4 @@
+::: llama_index.packs.resume_screener
+    options:
+      members:
+        - ResumeScreenerPack
diff --git a/docs/docs/api_reference/packs/retry_engine_weaviate.md b/docs/docs/api_reference/packs/retry_engine_weaviate.md
new file mode 100644
index 0000000000000000000000000000000000000000..48e1a7f49735b33c854551199a96842656f24bf0
--- /dev/null
+++ b/docs/docs/api_reference/packs/retry_engine_weaviate.md
@@ -0,0 +1,4 @@
+::: llama_index.packs.retry_engine_weaviate
+    options:
+      members:
+        - WeaviateRetryEnginePack
diff --git a/docs/docs/api_reference/packs/searchain.md b/docs/docs/api_reference/packs/searchain.md
new file mode 100644
index 0000000000000000000000000000000000000000..0ca0f9cc168dbc4800872c6d40639d52d5ac4dbe
--- /dev/null
+++ b/docs/docs/api_reference/packs/searchain.md
@@ -0,0 +1,4 @@
+::: llama_index.packs.searchain
+    options:
+      members:
+        - SearChainPack
diff --git a/docs/docs/api_reference/packs/self_discover.md b/docs/docs/api_reference/packs/self_discover.md
new file mode 100644
index 0000000000000000000000000000000000000000..6a5ab91077ba8095195a3eb9e5d397d956e9bc30
--- /dev/null
+++ b/docs/docs/api_reference/packs/self_discover.md
@@ -0,0 +1,4 @@
+::: llama_index.packs.self_discover
+    options:
+      members:
+        - SelfDiscoverPack
diff --git a/docs/docs/api_reference/packs/self_rag.md b/docs/docs/api_reference/packs/self_rag.md
new file mode 100644
index 0000000000000000000000000000000000000000..2b5d9ffe10fbca2582c979bfba9ea241ab139e71
--- /dev/null
+++ b/docs/docs/api_reference/packs/self_rag.md
@@ -0,0 +1,4 @@
+::: llama_index.packs.self_rag
+    options:
+      members:
+        - SelfRAGPack
diff --git a/docs/docs/api_reference/packs/sentence_window_retriever.md b/docs/docs/api_reference/packs/sentence_window_retriever.md
new file mode 100644
index 0000000000000000000000000000000000000000..505fe0393c3587376191355d48e5797d255ea0f0
--- /dev/null
+++ b/docs/docs/api_reference/packs/sentence_window_retriever.md
@@ -0,0 +1,4 @@
+::: llama_index.packs.sentence_window_retriever
+    options:
+      members:
+        - SentenceWindowRetrieverPack
diff --git a/docs/docs/api_reference/packs/snowflake_query_engine.md b/docs/docs/api_reference/packs/snowflake_query_engine.md
new file mode 100644
index 0000000000000000000000000000000000000000..92db1008e836731e78a5ff2b84098429cc73373e
--- /dev/null
+++ b/docs/docs/api_reference/packs/snowflake_query_engine.md
@@ -0,0 +1,4 @@
+::: llama_index.packs.snowflake_query_engine
+    options:
+      members:
+        - SnowflakeQueryEnginePack
diff --git a/docs/docs/api_reference/packs/stock_market_data_query_engine.md b/docs/docs/api_reference/packs/stock_market_data_query_engine.md
new file mode 100644
index 0000000000000000000000000000000000000000..0626c02421ca26ff8dafd9bca93b3c517ce7ebbc
--- /dev/null
+++ b/docs/docs/api_reference/packs/stock_market_data_query_engine.md
@@ -0,0 +1,4 @@
+::: llama_index.packs.stock_market_data_query_engine
+    options:
+      members:
+        - StockMarketDataQueryEnginePack
diff --git a/docs/docs/api_reference/packs/streamlit_chatbot.md b/docs/docs/api_reference/packs/streamlit_chatbot.md
new file mode 100644
index 0000000000000000000000000000000000000000..5d0968c1800e3b7e35971711ff8838bd5e5fca8d
--- /dev/null
+++ b/docs/docs/api_reference/packs/streamlit_chatbot.md
@@ -0,0 +1,4 @@
+::: llama_index.packs.streamlit_chatbot
+    options:
+      members:
+        - StreamlitChatPack
diff --git a/docs/docs/api_reference/packs/sub_question_weaviate.md b/docs/docs/api_reference/packs/sub_question_weaviate.md
new file mode 100644
index 0000000000000000000000000000000000000000..317767d77c9e7e5a8f99823e43382b8f34b8cb54
--- /dev/null
+++ b/docs/docs/api_reference/packs/sub_question_weaviate.md
@@ -0,0 +1,4 @@
+::: llama_index.packs.sub_question_weaviate
+    options:
+      members:
+        - WeaviateSubQuestionPack
diff --git a/docs/docs/api_reference/packs/subdoc_summary.md b/docs/docs/api_reference/packs/subdoc_summary.md
new file mode 100644
index 0000000000000000000000000000000000000000..393009be341e9c0bbfb59c829898b97dcf94c556
--- /dev/null
+++ b/docs/docs/api_reference/packs/subdoc_summary.md
@@ -0,0 +1,4 @@
+::: llama_index.packs.subdoc_summary
+    options:
+      members:
+        - SubDocSummaryPack
diff --git a/docs/docs/api_reference/packs/tables.md b/docs/docs/api_reference/packs/tables.md
new file mode 100644
index 0000000000000000000000000000000000000000..fe3f7f42272dcbf94f5d1e68a84a4e0e6c373c1c
--- /dev/null
+++ b/docs/docs/api_reference/packs/tables.md
@@ -0,0 +1,5 @@
+::: llama_index.packs.tables
+    options:
+      members:
+        - ChainOfTablePack
+        - MixSelfConsistencyPack
diff --git a/docs/docs/api_reference/packs/timescale_vector_autoretrieval.md b/docs/docs/api_reference/packs/timescale_vector_autoretrieval.md
new file mode 100644
index 0000000000000000000000000000000000000000..dfcf1ec300035f6570667eba8b3abc78fdee32cb
--- /dev/null
+++ b/docs/docs/api_reference/packs/timescale_vector_autoretrieval.md
@@ -0,0 +1,4 @@
+::: llama_index.packs.timescale_vector_autoretrieval
+    options:
+      members:
+        - TimescaleVectorAutoretrievalPack
diff --git a/docs/docs/api_reference/packs/trulens_eval_packs.md b/docs/docs/api_reference/packs/trulens_eval_packs.md
new file mode 100644
index 0000000000000000000000000000000000000000..9c0fd9cbc734220f7844159e2fee6d6628697570
--- /dev/null
+++ b/docs/docs/api_reference/packs/trulens_eval_packs.md
@@ -0,0 +1,6 @@
+::: llama_index.packs.trulens_eval_packs
+    options:
+      members:
+        - TruLensHarmlessPack
+        - TruLensHelpfulPack
+        - TruLensRAGTriadPack
diff --git a/docs/docs/api_reference/packs/vanna.md b/docs/docs/api_reference/packs/vanna.md
new file mode 100644
index 0000000000000000000000000000000000000000..639c67c3ab0789ab4fc4e2e0a98d9a4041924d64
--- /dev/null
+++ b/docs/docs/api_reference/packs/vanna.md
@@ -0,0 +1,4 @@
+::: llama_index.packs.vanna
+    options:
+      members:
+        - VannaPack
diff --git a/docs/docs/api_reference/packs/vectara_rag.md b/docs/docs/api_reference/packs/vectara_rag.md
new file mode 100644
index 0000000000000000000000000000000000000000..0d3e44c8e90b949827671f8c6e4a2cbb7ab4b6e2
--- /dev/null
+++ b/docs/docs/api_reference/packs/vectara_rag.md
@@ -0,0 +1,4 @@
+::: llama_index.packs.vectara_rag
+    options:
+      members:
+        - VectaraRagPack
diff --git a/docs/docs/api_reference/packs/voyage_query_engine.md b/docs/docs/api_reference/packs/voyage_query_engine.md
new file mode 100644
index 0000000000000000000000000000000000000000..c3f1227c67fab6106568d52eef84f3ae17c3213c
--- /dev/null
+++ b/docs/docs/api_reference/packs/voyage_query_engine.md
@@ -0,0 +1,4 @@
+::: llama_index.packs.voyage_query_engine
+    options:
+      members:
+        - VoyageQueryEnginePack
diff --git a/docs/docs/api_reference/packs/zephyr_query_engine.md b/docs/docs/api_reference/packs/zephyr_query_engine.md
new file mode 100644
index 0000000000000000000000000000000000000000..0ca6558db565f17fad49e07717d3fbd7e2139f93
--- /dev/null
+++ b/docs/docs/api_reference/packs/zephyr_query_engine.md
@@ -0,0 +1,4 @@
+::: llama_index.packs.zephyr_query_engine
+    options:
+      members:
+        - ZephyrQueryEnginePack
diff --git a/docs/docs/api_reference/postprocessor/NER_PII.md b/docs/docs/api_reference/postprocessor/NER_PII.md
new file mode 100644
index 0000000000000000000000000000000000000000..30bc917e3f3f08b7c782248291f4a353cbecc0bf
--- /dev/null
+++ b/docs/docs/api_reference/postprocessor/NER_PII.md
@@ -0,0 +1,4 @@
+::: llama_index.core.postprocessor
+    options:
+      members:
+        - NERPIINodePostprocessor
diff --git a/docs/docs/api_reference/postprocessor/PII.md b/docs/docs/api_reference/postprocessor/PII.md
new file mode 100644
index 0000000000000000000000000000000000000000..38ff0adb180d9f5f605839f3bec5c4c1b22cecfc
--- /dev/null
+++ b/docs/docs/api_reference/postprocessor/PII.md
@@ -0,0 +1,4 @@
+::: llama_index.core.postprocessor
+    options:
+      members:
+        - PIINodePostprocessor
diff --git a/docs/docs/api_reference/postprocessor/auto_prev_next.md b/docs/docs/api_reference/postprocessor/auto_prev_next.md
new file mode 100644
index 0000000000000000000000000000000000000000..a8c2cac0dccbdc3b584f7b1e29bc30107f1a3710
--- /dev/null
+++ b/docs/docs/api_reference/postprocessor/auto_prev_next.md
@@ -0,0 +1,4 @@
+::: llama_index.core.postprocessor
+    options:
+      members:
+        - AutoPrevNextNodePostprocessor
diff --git a/docs/docs/api_reference/postprocessor/cohere_rerank.md b/docs/docs/api_reference/postprocessor/cohere_rerank.md
new file mode 100644
index 0000000000000000000000000000000000000000..6819b3bd28808e56ec8ee4a46896530247e22509
--- /dev/null
+++ b/docs/docs/api_reference/postprocessor/cohere_rerank.md
@@ -0,0 +1,4 @@
+::: llama_index.postprocessor.cohere_rerank
+    options:
+      members:
+        - CohereRerank
diff --git a/docs/docs/api_reference/postprocessor/colbert_rerank.md b/docs/docs/api_reference/postprocessor/colbert_rerank.md
new file mode 100644
index 0000000000000000000000000000000000000000..90548f00f95c74fce851a8cbdf848bf8a70e367f
--- /dev/null
+++ b/docs/docs/api_reference/postprocessor/colbert_rerank.md
@@ -0,0 +1,4 @@
+::: llama_index.postprocessor.colbert_rerank
+    options:
+      members:
+        - ColbertRerank
diff --git a/docs/docs/api_reference/postprocessor/embedding_recency.md b/docs/docs/api_reference/postprocessor/embedding_recency.md
new file mode 100644
index 0000000000000000000000000000000000000000..41161917f7bf81be1efce7133c5a39261a992b02
--- /dev/null
+++ b/docs/docs/api_reference/postprocessor/embedding_recency.md
@@ -0,0 +1,4 @@
+::: llama_index.core.postprocessor
+    options:
+      members:
+        - EmbeddingRecencyPostprocessor
diff --git a/docs/docs/api_reference/postprocessor/fixed_recency.md b/docs/docs/api_reference/postprocessor/fixed_recency.md
new file mode 100644
index 0000000000000000000000000000000000000000..ac0c6c932ceb663de686e2bfe6a085b09787c252
--- /dev/null
+++ b/docs/docs/api_reference/postprocessor/fixed_recency.md
@@ -0,0 +1,4 @@
+::: llama_index.core.postprocessor
+    options:
+      members:
+        - FixedRecencyPostprocessor
diff --git a/docs/docs/api_reference/postprocessor/flag_embedding_reranker.md b/docs/docs/api_reference/postprocessor/flag_embedding_reranker.md
new file mode 100644
index 0000000000000000000000000000000000000000..096dff23fc3d7557391a9aa53d656f5571b30194
--- /dev/null
+++ b/docs/docs/api_reference/postprocessor/flag_embedding_reranker.md
@@ -0,0 +1,4 @@
+::: llama_index.postprocessor.flag_embedding_reranker
+    options:
+      members:
+        - FlagEmbeddingReranker
diff --git a/docs/docs/api_reference/postprocessor/index.md b/docs/docs/api_reference/postprocessor/index.md
new file mode 100644
index 0000000000000000000000000000000000000000..2fafdec5d9459a0179b06d42b14398a8a74d4dc6
--- /dev/null
+++ b/docs/docs/api_reference/postprocessor/index.md
@@ -0,0 +1,4 @@
+::: llama_index.core.postprocessor.types
+    options:
+      members:
+        - BaseNodePostprocessor
diff --git a/docs/docs/api_reference/postprocessor/jinaai_rerank.md b/docs/docs/api_reference/postprocessor/jinaai_rerank.md
new file mode 100644
index 0000000000000000000000000000000000000000..d4315961ec405da54ef65d95bb4458e691bf90ea
--- /dev/null
+++ b/docs/docs/api_reference/postprocessor/jinaai_rerank.md
@@ -0,0 +1,4 @@
+::: llama_index.postprocessor.jinaai_rerank
+    options:
+      members:
+        - JinaRerank
diff --git a/docs/docs/api_reference/postprocessor/keyword.md b/docs/docs/api_reference/postprocessor/keyword.md
new file mode 100644
index 0000000000000000000000000000000000000000..5b1669f1c6eea89badbdf01b0460cbef0c37946b
--- /dev/null
+++ b/docs/docs/api_reference/postprocessor/keyword.md
@@ -0,0 +1,4 @@
+::: llama_index.core.postprocessor
+    options:
+      members:
+        - KeywordNodePostprocessor
diff --git a/docs/docs/api_reference/postprocessor/llm_rerank.md b/docs/docs/api_reference/postprocessor/llm_rerank.md
new file mode 100644
index 0000000000000000000000000000000000000000..5c5c4603b86f39be53a727ec34543d6a40e2f54b
--- /dev/null
+++ b/docs/docs/api_reference/postprocessor/llm_rerank.md
@@ -0,0 +1,4 @@
+::: llama_index.core.postprocessor
+    options:
+      members:
+        - LLMRerank
diff --git a/docs/docs/api_reference/postprocessor/long_context_reorder.md b/docs/docs/api_reference/postprocessor/long_context_reorder.md
new file mode 100644
index 0000000000000000000000000000000000000000..1f28d351e804a5c6becab81f09aa50f5a39ac30d
--- /dev/null
+++ b/docs/docs/api_reference/postprocessor/long_context_reorder.md
@@ -0,0 +1,4 @@
+::: llama_index.core.postprocessor
+    options:
+      members:
+        - LongContextReorder
diff --git a/docs/docs/api_reference/postprocessor/longllmlingua.md b/docs/docs/api_reference/postprocessor/longllmlingua.md
new file mode 100644
index 0000000000000000000000000000000000000000..e0987f232209a6c1b5d0496e877848efd3b84631
--- /dev/null
+++ b/docs/docs/api_reference/postprocessor/longllmlingua.md
@@ -0,0 +1,4 @@
+::: llama_index.postprocessor.longllmlingua
+    options:
+      members:
+        - LongLLMLinguaPostprocessor
diff --git a/docs/docs/api_reference/postprocessor/metadata_replacement.md b/docs/docs/api_reference/postprocessor/metadata_replacement.md
new file mode 100644
index 0000000000000000000000000000000000000000..e2e7f1f832f93a12fedb36f3583a5072bdcb4166
--- /dev/null
+++ b/docs/docs/api_reference/postprocessor/metadata_replacement.md
@@ -0,0 +1,4 @@
+::: llama_index.core.postprocessor
+    options:
+      members:
+        - MetadataReplacementPostProcessor
diff --git a/docs/docs/api_reference/postprocessor/presidio.md b/docs/docs/api_reference/postprocessor/presidio.md
new file mode 100644
index 0000000000000000000000000000000000000000..3d11274cc985bb890af3e3fdf8bf7eb05b85346a
--- /dev/null
+++ b/docs/docs/api_reference/postprocessor/presidio.md
@@ -0,0 +1,4 @@
+::: llama_index.postprocessor.presidio
+    options:
+      members:
+        - PresidioPIINodePostprocessor
diff --git a/docs/docs/api_reference/postprocessor/prev_next.md b/docs/docs/api_reference/postprocessor/prev_next.md
new file mode 100644
index 0000000000000000000000000000000000000000..1aae1c50883e9114c85ea1dc91f90015e17d49a6
--- /dev/null
+++ b/docs/docs/api_reference/postprocessor/prev_next.md
@@ -0,0 +1,4 @@
+::: llama_index.core.postprocessor
+    options:
+      members:
+        - PrevNextNodePostprocessor
diff --git a/docs/docs/api_reference/postprocessor/rankgpt_rerank.md b/docs/docs/api_reference/postprocessor/rankgpt_rerank.md
new file mode 100644
index 0000000000000000000000000000000000000000..c02591f3c6c772d32e396f9b377dd5fd9fc29af5
--- /dev/null
+++ b/docs/docs/api_reference/postprocessor/rankgpt_rerank.md
@@ -0,0 +1,4 @@
+::: llama_index.postprocessor.rankgpt_rerank
+    options:
+      members:
+        - RankGPTRerank
diff --git a/docs/docs/api_reference/postprocessor/sbert_rerank.md b/docs/docs/api_reference/postprocessor/sbert_rerank.md
new file mode 100644
index 0000000000000000000000000000000000000000..233cf8942bf7115ba614f20861b2a976e408335a
--- /dev/null
+++ b/docs/docs/api_reference/postprocessor/sbert_rerank.md
@@ -0,0 +1,4 @@
+::: llama_index.postprocessor.sbert_rerank
+    options:
+      members:
+        - SentenceTransformerRerank
diff --git a/docs/docs/api_reference/postprocessor/sentence_optimizer.md b/docs/docs/api_reference/postprocessor/sentence_optimizer.md
new file mode 100644
index 0000000000000000000000000000000000000000..f511b9ddf67a6125bbedcfa829825980f73e834c
--- /dev/null
+++ b/docs/docs/api_reference/postprocessor/sentence_optimizer.md
@@ -0,0 +1,4 @@
+::: llama_index.core.postprocessor
+    options:
+      members:
+        - SentenceEmbeddingOptimizer
diff --git a/docs/docs/api_reference/postprocessor/similarity.md b/docs/docs/api_reference/postprocessor/similarity.md
new file mode 100644
index 0000000000000000000000000000000000000000..7afbbb4a6aba7af099b56895b45d02dc26c30a0d
--- /dev/null
+++ b/docs/docs/api_reference/postprocessor/similarity.md
@@ -0,0 +1,4 @@
+::: llama_index.core.postprocessor
+    options:
+      members:
+        - SimilarityPostprocessor
diff --git a/docs/docs/api_reference/postprocessor/time_weighted.md b/docs/docs/api_reference/postprocessor/time_weighted.md
new file mode 100644
index 0000000000000000000000000000000000000000..4b002c919739200212d11beca3c43a08d99d38cd
--- /dev/null
+++ b/docs/docs/api_reference/postprocessor/time_weighted.md
@@ -0,0 +1,4 @@
+::: llama_index.core.postprocessor
+    options:
+      members:
+        - TimeWeightedPostprocessors
diff --git a/docs/docs/api_reference/program/evaporate.md b/docs/docs/api_reference/program/evaporate.md
new file mode 100644
index 0000000000000000000000000000000000000000..d8eb4d213ff1031a254b1e61037194b87ae8f230
--- /dev/null
+++ b/docs/docs/api_reference/program/evaporate.md
@@ -0,0 +1,4 @@
+::: llama_index.program.evaporate
+    options:
+      members:
+        - DFEvaporateProgram
diff --git a/docs/docs/api_reference/program/guidance.md b/docs/docs/api_reference/program/guidance.md
new file mode 100644
index 0000000000000000000000000000000000000000..4ce5ebc5d202901163ba11456068515bc34513e8
--- /dev/null
+++ b/docs/docs/api_reference/program/guidance.md
@@ -0,0 +1,4 @@
+::: llama_index.program.guidance
+    options:
+      members:
+        - GuidancePydanticProgram
diff --git a/docs/docs/api_reference/program/index.md b/docs/docs/api_reference/program/index.md
new file mode 100644
index 0000000000000000000000000000000000000000..1469cb0a57f85b992238492309457ba8516133cb
--- /dev/null
+++ b/docs/docs/api_reference/program/index.md
@@ -0,0 +1,4 @@
+::: llama_index.core.types
+    options:
+      members:
+        - BasePydanticProgram
diff --git a/docs/docs/api_reference/program/llm_text_completion.md b/docs/docs/api_reference/program/llm_text_completion.md
new file mode 100644
index 0000000000000000000000000000000000000000..3506582a83f3ef3444a8aa9b01518d31efacdf40
--- /dev/null
+++ b/docs/docs/api_reference/program/llm_text_completion.md
@@ -0,0 +1,4 @@
+::: llama_index.core.program.llm_program
+    options:
+      members:
+        - LLMTextCompletionProgram
diff --git a/docs/docs/api_reference/program/lmformatenforcer.md b/docs/docs/api_reference/program/lmformatenforcer.md
new file mode 100644
index 0000000000000000000000000000000000000000..c9a7e92c697e3eef575351a643d0b1f0cca4496f
--- /dev/null
+++ b/docs/docs/api_reference/program/lmformatenforcer.md
@@ -0,0 +1,4 @@
+::: llama_index.program.lmformatenforcer
+    options:
+      members:
+        - LMFormatEnforcerPydanticProgram
diff --git a/docs/docs/api_reference/program/multi_modal.md b/docs/docs/api_reference/program/multi_modal.md
new file mode 100644
index 0000000000000000000000000000000000000000..28822ec547c0d60887cd4bb270dc2340bd248dd0
--- /dev/null
+++ b/docs/docs/api_reference/program/multi_modal.md
@@ -0,0 +1,4 @@
+::: llama_index.core.program.multi_modal_llm_program
+    options:
+      members:
+        - MultiModalLLMCompletionProgram
diff --git a/docs/docs/api_reference/program/openai.md b/docs/docs/api_reference/program/openai.md
new file mode 100644
index 0000000000000000000000000000000000000000..41843a9d39987c7b7d5276f021d4ca3bf8e492a5
--- /dev/null
+++ b/docs/docs/api_reference/program/openai.md
@@ -0,0 +1,4 @@
+::: llama_index.program.openai
+    options:
+      members:
+        - OpenAIPydanticProgram
diff --git a/docs/docs/api_reference/prompts/index.md b/docs/docs/api_reference/prompts/index.md
new file mode 100644
index 0000000000000000000000000000000000000000..e23da97edf8d96d827ce489d54c7d2620d630b08
--- /dev/null
+++ b/docs/docs/api_reference/prompts/index.md
@@ -0,0 +1 @@
+::: llama_index.core.prompts
diff --git a/docs/docs/api_reference/query_engine/FLARE.md b/docs/docs/api_reference/query_engine/FLARE.md
new file mode 100644
index 0000000000000000000000000000000000000000..d36ceaf20d1642bdd253c3dfb0d3640d5ea45735
--- /dev/null
+++ b/docs/docs/api_reference/query_engine/FLARE.md
@@ -0,0 +1,4 @@
+::: llama_index.core.query_engine
+    options:
+      members:
+        - FLAREInstructQueryEngine
diff --git a/docs/docs/api_reference/query_engine/JSONalayze.md b/docs/docs/api_reference/query_engine/JSONalayze.md
new file mode 100644
index 0000000000000000000000000000000000000000..ebf3f775909cbd58cb433d3f3a0cd88bfd2068d9
--- /dev/null
+++ b/docs/docs/api_reference/query_engine/JSONalayze.md
@@ -0,0 +1,4 @@
+::: llama_index.core.query_engine
+    options:
+      members:
+        - JSONalyzeQueryEngine
diff --git a/docs/docs/api_reference/query_engine/NL_SQL_table.md b/docs/docs/api_reference/query_engine/NL_SQL_table.md
new file mode 100644
index 0000000000000000000000000000000000000000..ece1e7b851ab4126a11ac2803f215101664111dd
--- /dev/null
+++ b/docs/docs/api_reference/query_engine/NL_SQL_table.md
@@ -0,0 +1,4 @@
+::: llama_index.core.query_engine
+    options:
+      members:
+        - NLSQLTableQueryEngine
diff --git a/docs/docs/api_reference/query_engine/PGVector_SQL.md b/docs/docs/api_reference/query_engine/PGVector_SQL.md
new file mode 100644
index 0000000000000000000000000000000000000000..ee9fbeafb433e6bdeaec2ef98e03798f79d9c08a
--- /dev/null
+++ b/docs/docs/api_reference/query_engine/PGVector_SQL.md
@@ -0,0 +1,4 @@
+::: llama_index.core.query_engine
+    options:
+      members:
+        - PGVectorSQLQueryEngine
diff --git a/docs/docs/api_reference/query_engine/SQL_join.md b/docs/docs/api_reference/query_engine/SQL_join.md
new file mode 100644
index 0000000000000000000000000000000000000000..b99b574d83074753a9736ccf866d23821139d13a
--- /dev/null
+++ b/docs/docs/api_reference/query_engine/SQL_join.md
@@ -0,0 +1,5 @@
+::: llama_index.core.query_engine
+    options:
+      members:
+        - SQLJoinQueryEngine
+        - SQLAutoVectorQueryEngine
diff --git a/docs/docs/api_reference/query_engine/SQL_table_retriever.md b/docs/docs/api_reference/query_engine/SQL_table_retriever.md
new file mode 100644
index 0000000000000000000000000000000000000000..dde90532c7b6dbde48e037b3eef12ac2c224451b
--- /dev/null
+++ b/docs/docs/api_reference/query_engine/SQL_table_retriever.md
@@ -0,0 +1,4 @@
+::: llama_index.core.query_engine
+    options:
+      members:
+        - SQLTableRetrieverQueryEngine
diff --git a/docs/docs/api_reference/query_engine/citation.md b/docs/docs/api_reference/query_engine/citation.md
new file mode 100644
index 0000000000000000000000000000000000000000..5f0371a3f9adf27ed86e5242f8cc934d4de4095d
--- /dev/null
+++ b/docs/docs/api_reference/query_engine/citation.md
@@ -0,0 +1,4 @@
+::: llama_index.core.query_engine
+    options:
+      members:
+        - CitationQueryEngine
diff --git a/docs/docs/api_reference/query_engine/cogniswitch.md b/docs/docs/api_reference/query_engine/cogniswitch.md
new file mode 100644
index 0000000000000000000000000000000000000000..4ba253eff24b7f8bca06da7da3e98d8e965296ef
--- /dev/null
+++ b/docs/docs/api_reference/query_engine/cogniswitch.md
@@ -0,0 +1,4 @@
+::: llama_index.core.query_engine
+    options:
+      members:
+        - CogniswitchQueryEngine
diff --git a/docs/docs/api_reference/query_engine/custom.md b/docs/docs/api_reference/query_engine/custom.md
new file mode 100644
index 0000000000000000000000000000000000000000..a4f4ebf888e72a6133ebdf9e370a17ccceeac080
--- /dev/null
+++ b/docs/docs/api_reference/query_engine/custom.md
@@ -0,0 +1,4 @@
+::: llama_index.core.query_engine
+    options:
+      members:
+        - CustomQueryEngine
diff --git a/docs/docs/api_reference/query_engine/index.md b/docs/docs/api_reference/query_engine/index.md
new file mode 100644
index 0000000000000000000000000000000000000000..1f8385d02e134bb2edfa5f250c07e8124fad644b
--- /dev/null
+++ b/docs/docs/api_reference/query_engine/index.md
@@ -0,0 +1 @@
+::: llama_index.core.base.base_query_engine
diff --git a/docs/docs/api_reference/query_engine/knowledge_graph.md b/docs/docs/api_reference/query_engine/knowledge_graph.md
new file mode 100644
index 0000000000000000000000000000000000000000..00bc83d779827dc0ccf7504d08b95007ec09e22f
--- /dev/null
+++ b/docs/docs/api_reference/query_engine/knowledge_graph.md
@@ -0,0 +1,4 @@
+::: llama_index.core.query_engine
+    options:
+      members:
+        - KnowledgeGraphQueryEngine
diff --git a/docs/docs/api_reference/query_engine/multi_step.md b/docs/docs/api_reference/query_engine/multi_step.md
new file mode 100644
index 0000000000000000000000000000000000000000..623bd8e5d53920a5d151cd4cd85cf2c1a2baf1e8
--- /dev/null
+++ b/docs/docs/api_reference/query_engine/multi_step.md
@@ -0,0 +1,4 @@
+::: llama_index.core.query_engine
+    options:
+      members:
+        - MultiStepQueryEngine
diff --git a/docs/docs/api_reference/query_engine/pandas.md b/docs/docs/api_reference/query_engine/pandas.md
new file mode 100644
index 0000000000000000000000000000000000000000..b7293b27ff976d49eddd5138a20a925a5efc6728
--- /dev/null
+++ b/docs/docs/api_reference/query_engine/pandas.md
@@ -0,0 +1,4 @@
+::: llama_index.core.query_engine
+    options:
+       members:
+         - PandasQueryEngine
diff --git a/docs/docs/api_reference/query_engine/retriever.md b/docs/docs/api_reference/query_engine/retriever.md
new file mode 100644
index 0000000000000000000000000000000000000000..8bee7cde3d96c38985640d695144c72f19ebd3fa
--- /dev/null
+++ b/docs/docs/api_reference/query_engine/retriever.md
@@ -0,0 +1,4 @@
+::: llama_index.core.query_engine
+    options:
+      members:
+        - RetrieverQueryEngine
diff --git a/docs/docs/api_reference/query_engine/retriever_router.md b/docs/docs/api_reference/query_engine/retriever_router.md
new file mode 100644
index 0000000000000000000000000000000000000000..3111f2357803513407a8e89d48670f4b7df56907
--- /dev/null
+++ b/docs/docs/api_reference/query_engine/retriever_router.md
@@ -0,0 +1,4 @@
+::: llama_index.core.query_engine
+    options:
+      members:
+        - RetrieverRouterQueryEngine
diff --git a/docs/docs/api_reference/query_engine/retry.md b/docs/docs/api_reference/query_engine/retry.md
new file mode 100644
index 0000000000000000000000000000000000000000..4e44d859d84869444c03dbd2cef1d63cbf9c43d4
--- /dev/null
+++ b/docs/docs/api_reference/query_engine/retry.md
@@ -0,0 +1,6 @@
+::: llama_index.core.query_engine
+    options:
+      members:
+        - RetryGuidelineQueryEngine
+        - RetryQueryEngine
+        - RetrySourceQueryEngine
diff --git a/docs/docs/api_reference/query_engine/router.md b/docs/docs/api_reference/query_engine/router.md
new file mode 100644
index 0000000000000000000000000000000000000000..463c9401f53097c4b4b188c031506ea053dc6301
--- /dev/null
+++ b/docs/docs/api_reference/query_engine/router.md
@@ -0,0 +1,4 @@
+::: llama_index.core.query_engine
+    options:
+      members:
+        - RouterQueryEngine
diff --git a/docs/docs/api_reference/query_engine/simple_multi_modal.md b/docs/docs/api_reference/query_engine/simple_multi_modal.md
new file mode 100644
index 0000000000000000000000000000000000000000..c26f152ab67d2707afe697c4679a064ab66556e6
--- /dev/null
+++ b/docs/docs/api_reference/query_engine/simple_multi_modal.md
@@ -0,0 +1,4 @@
+::: llama_index.core.query_engine
+    options:
+      members:
+        - SimpleMultiModalQueryEngine
diff --git a/docs/docs/api_reference/query_engine/sub_question.md b/docs/docs/api_reference/query_engine/sub_question.md
new file mode 100644
index 0000000000000000000000000000000000000000..0809d75107799494fb8c16972d51f970de76ad30
--- /dev/null
+++ b/docs/docs/api_reference/query_engine/sub_question.md
@@ -0,0 +1,5 @@
+::: llama_index.core.query_engine
+    options:
+      members:
+        - SubQuestionQueryEngine
+        - SubQuestionAnswerPair
diff --git a/docs/docs/api_reference/query_engine/tool_retriever_router.md b/docs/docs/api_reference/query_engine/tool_retriever_router.md
new file mode 100644
index 0000000000000000000000000000000000000000..42199ba9aba0cca4a2a26542cb765283597105ed
--- /dev/null
+++ b/docs/docs/api_reference/query_engine/tool_retriever_router.md
@@ -0,0 +1,4 @@
+::: llama_index.core.query_engine
+    options:
+      members:
+        - ToolRetrieverRouterQueryEngine
diff --git a/docs/docs/api_reference/query_engine/transform.md b/docs/docs/api_reference/query_engine/transform.md
new file mode 100644
index 0000000000000000000000000000000000000000..85e8b5587b6f31f9b448727975a1e3ff36833238
--- /dev/null
+++ b/docs/docs/api_reference/query_engine/transform.md
@@ -0,0 +1,4 @@
+::: llama_index.core.query_engine
+    options:
+      members:
+        - TransformQueryEngine
diff --git a/docs/docs/api_reference/query_pipeline/agent.md b/docs/docs/api_reference/query_pipeline/agent.md
new file mode 100644
index 0000000000000000000000000000000000000000..40dbe0cc13f191c976775c15adf916913fcaacf8
--- /dev/null
+++ b/docs/docs/api_reference/query_pipeline/agent.md
@@ -0,0 +1,7 @@
+::: llama_index.core.query_pipeline.components.agent.BaseAgentComponent
+
+::: llama_index.core.query_pipeline.components.agent.AgentFnComponent
+
+::: llama_index.core.query_pipeline.components.agent.CustomAgentComponent
+
+::: llama_index.core.query_pipeline.components.agent.AgentInputComponent
diff --git a/docs/docs/api_reference/query_pipeline/arg_pack.md b/docs/docs/api_reference/query_pipeline/arg_pack.md
new file mode 100644
index 0000000000000000000000000000000000000000..00bfc9d550dc8385671f78f6db81e62b3870dafc
--- /dev/null
+++ b/docs/docs/api_reference/query_pipeline/arg_pack.md
@@ -0,0 +1,3 @@
+::: llama_index.core.query_pipeline.components.argpacks.ArgPackComponent
+
+::: llama_index.core.query_pipeline.components.argpacks.KwargPackComponent
diff --git a/docs/docs/api_reference/query_pipeline/custom.md b/docs/docs/api_reference/query_pipeline/custom.md
new file mode 100644
index 0000000000000000000000000000000000000000..6f218445a84916cda4ab84d2501af92ef2624fcd
--- /dev/null
+++ b/docs/docs/api_reference/query_pipeline/custom.md
@@ -0,0 +1 @@
+::: llama_index.core.base.query_pipeline.query.CustomQueryComponent
diff --git a/docs/docs/api_reference/query_pipeline/function.md b/docs/docs/api_reference/query_pipeline/function.md
new file mode 100644
index 0000000000000000000000000000000000000000..d1a2a171beb24aac21c623d9fa3607ea8b292681
--- /dev/null
+++ b/docs/docs/api_reference/query_pipeline/function.md
@@ -0,0 +1 @@
+::: llama_index.core.query_pipeline.components.function.FnComponent
diff --git a/docs/docs/api_reference/query_pipeline/index.md b/docs/docs/api_reference/query_pipeline/index.md
new file mode 100644
index 0000000000000000000000000000000000000000..8c4b9b3d5709cbd66b0d1e93f5a51c1aa281c41d
--- /dev/null
+++ b/docs/docs/api_reference/query_pipeline/index.md
@@ -0,0 +1 @@
+::: llama_index.core.base.query_pipeline.query
diff --git a/docs/docs/api_reference/query_pipeline/input.md b/docs/docs/api_reference/query_pipeline/input.md
new file mode 100644
index 0000000000000000000000000000000000000000..970cafdcfa65c29c86e8a91628282045b764f1d7
--- /dev/null
+++ b/docs/docs/api_reference/query_pipeline/input.md
@@ -0,0 +1 @@
+::: llama_index.core.query_pipeline.components.input.InputComponent
diff --git a/docs/docs/api_reference/query_pipeline/llm.md b/docs/docs/api_reference/query_pipeline/llm.md
new file mode 100644
index 0000000000000000000000000000000000000000..b93b7ef6f84fb060e458c7721cf967c6fe28a2cc
--- /dev/null
+++ b/docs/docs/api_reference/query_pipeline/llm.md
@@ -0,0 +1,5 @@
+::: llama_index.core.llms.llm.BaseLLMComponent
+
+::: llama_index.core.llms.llm.LLMCompleteComponent
+
+::: llama_index.core.llms.llm.LLMChatComponent
diff --git a/docs/docs/api_reference/query_pipeline/multi_modal.md b/docs/docs/api_reference/query_pipeline/multi_modal.md
new file mode 100644
index 0000000000000000000000000000000000000000..bb386af040fd28f68ab307e651d57a91ca9b18a0
--- /dev/null
+++ b/docs/docs/api_reference/query_pipeline/multi_modal.md
@@ -0,0 +1 @@
+::: llama_index.core.multi_modal_llms.base.BaseMultiModalComponent
diff --git a/docs/docs/api_reference/query_pipeline/object.md b/docs/docs/api_reference/query_pipeline/object.md
new file mode 100644
index 0000000000000000000000000000000000000000..27d4f2754510f1ad3306d9c8469add6501eceeb6
--- /dev/null
+++ b/docs/docs/api_reference/query_pipeline/object.md
@@ -0,0 +1 @@
+::: llama_index.core.objects.base.ObjectRetrieverComponent
diff --git a/docs/docs/api_reference/query_pipeline/output_parser.md b/docs/docs/api_reference/query_pipeline/output_parser.md
new file mode 100644
index 0000000000000000000000000000000000000000..a06423a8e321339a51d190da81eb3b294a449648
--- /dev/null
+++ b/docs/docs/api_reference/query_pipeline/output_parser.md
@@ -0,0 +1 @@
+::: llama_index.core.output_parsers.base.OutputParserComponent
diff --git a/docs/docs/api_reference/query_pipeline/postprocessor.md b/docs/docs/api_reference/query_pipeline/postprocessor.md
new file mode 100644
index 0000000000000000000000000000000000000000..b967bc936db6ab9d3c0f3e6f2869bbb27b0ef57c
--- /dev/null
+++ b/docs/docs/api_reference/query_pipeline/postprocessor.md
@@ -0,0 +1 @@
+::: llama_index.core.postprocessor.types.PostprocessorComponent
diff --git a/docs/docs/api_reference/query_pipeline/prompt.md b/docs/docs/api_reference/query_pipeline/prompt.md
new file mode 100644
index 0000000000000000000000000000000000000000..eceae1a86e8aa3288cc1a43800c351434f59b415
--- /dev/null
+++ b/docs/docs/api_reference/query_pipeline/prompt.md
@@ -0,0 +1 @@
+::: llama_index.core.prompts.base.PromptComponent
diff --git a/docs/docs/api_reference/query_pipeline/query_engine.md b/docs/docs/api_reference/query_pipeline/query_engine.md
new file mode 100644
index 0000000000000000000000000000000000000000..6a99bbe6aca306dee217cee196ac8d2a27d0194c
--- /dev/null
+++ b/docs/docs/api_reference/query_pipeline/query_engine.md
@@ -0,0 +1 @@
+::: llama_index.core.base.base_query_engine.QueryEngineComponent
diff --git a/docs/docs/api_reference/query_pipeline/query_transform.md b/docs/docs/api_reference/query_pipeline/query_transform.md
new file mode 100644
index 0000000000000000000000000000000000000000..a7aedc2af5dccf5e23d70755a09601a8f3b5d7a9
--- /dev/null
+++ b/docs/docs/api_reference/query_pipeline/query_transform.md
@@ -0,0 +1 @@
+::: llama_index.core.indices.query.query_transform.base.QueryTransformComponent
diff --git a/docs/docs/api_reference/query_pipeline/retriever.md b/docs/docs/api_reference/query_pipeline/retriever.md
new file mode 100644
index 0000000000000000000000000000000000000000..1c026d42ccdda4de172bd6724ba1ab8a6e9126b5
--- /dev/null
+++ b/docs/docs/api_reference/query_pipeline/retriever.md
@@ -0,0 +1 @@
+::: llama_index.core.base.base_retriever.RetrieverComponent
diff --git a/docs/docs/api_reference/query_pipeline/router.md b/docs/docs/api_reference/query_pipeline/router.md
new file mode 100644
index 0000000000000000000000000000000000000000..34339929e65ed6d22a4daf2f208094c329b5e136
--- /dev/null
+++ b/docs/docs/api_reference/query_pipeline/router.md
@@ -0,0 +1,3 @@
+::: llama_index.core.query_pipeline.components.router.SelectorComponent
+
+::: llama_index.core.query_pipeline.components.router.RouterComponent
diff --git a/docs/docs/api_reference/query_pipeline/synthesizer.md b/docs/docs/api_reference/query_pipeline/synthesizer.md
new file mode 100644
index 0000000000000000000000000000000000000000..8df8dffc9f42e7841f6780d58b35c5aeb8399227
--- /dev/null
+++ b/docs/docs/api_reference/query_pipeline/synthesizer.md
@@ -0,0 +1 @@
+::: llama_index.core.response_synthesizers.base.SynthesizerComponent
diff --git a/docs/docs/api_reference/query_pipeline/tool_runner.md b/docs/docs/api_reference/query_pipeline/tool_runner.md
new file mode 100644
index 0000000000000000000000000000000000000000..416a1c1201b91f1a634947ecf07be73d4b894bc9
--- /dev/null
+++ b/docs/docs/api_reference/query_pipeline/tool_runner.md
@@ -0,0 +1 @@
+::: llama_index.core.query_pipeline.components.tool_runner.ToolRunnerComponent
diff --git a/docs/docs/api_reference/question_gen/guidance.md b/docs/docs/api_reference/question_gen/guidance.md
new file mode 100644
index 0000000000000000000000000000000000000000..8cc32ade63f68f6128d28564aae817b8c8211e4e
--- /dev/null
+++ b/docs/docs/api_reference/question_gen/guidance.md
@@ -0,0 +1,4 @@
+::: llama_index.question_gen.guidance
+    options:
+      members:
+        - GuidanceQuestionGenerator
diff --git a/docs/docs/api_reference/question_gen/index.md b/docs/docs/api_reference/question_gen/index.md
new file mode 100644
index 0000000000000000000000000000000000000000..3f982a315aced401f13bba71aad1b8ed7d0bd5b9
--- /dev/null
+++ b/docs/docs/api_reference/question_gen/index.md
@@ -0,0 +1,6 @@
+::: llama_index.core.question_gen.types
+    options:
+      members:
+        - BaseQuestionGenerator
+        - SubQuestionList
+        - SubQuestion
diff --git a/docs/docs/api_reference/question_gen/llm_question_gen.md b/docs/docs/api_reference/question_gen/llm_question_gen.md
new file mode 100644
index 0000000000000000000000000000000000000000..933712e1d0b9dbaf6149d80991fb7b5dd3b476a6
--- /dev/null
+++ b/docs/docs/api_reference/question_gen/llm_question_gen.md
@@ -0,0 +1,5 @@
+::: llama_index.core.question_gen
+    options:
+      members:
+        - LLMQuestionGenerator
+        - SubQuestionOutputParser
diff --git a/docs/docs/api_reference/question_gen/openai.md b/docs/docs/api_reference/question_gen/openai.md
new file mode 100644
index 0000000000000000000000000000000000000000..2545f995aecf6fcf4928aee098f8afe13b54888d
--- /dev/null
+++ b/docs/docs/api_reference/question_gen/openai.md
@@ -0,0 +1,4 @@
+::: llama_index.question_gen.openai
+    options:
+      members:
+        - OpenAIQuestionGenerator
diff --git a/docs/docs/api_reference/readers/agent_search.md b/docs/docs/api_reference/readers/agent_search.md
new file mode 100644
index 0000000000000000000000000000000000000000..538c2be6d3571518441d74d0ae2fad71ed7ab499
--- /dev/null
+++ b/docs/docs/api_reference/readers/agent_search.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.agent_search
+    options:
+      members:
+        - AgentSearchReader
diff --git a/docs/docs/api_reference/readers/airbyte_cdk.md b/docs/docs/api_reference/readers/airbyte_cdk.md
new file mode 100644
index 0000000000000000000000000000000000000000..8e7a9a3fa93ba4f04c3efc76b6d53de8330b159f
--- /dev/null
+++ b/docs/docs/api_reference/readers/airbyte_cdk.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.airbyte_cdk
+    options:
+      members:
+        - AirbyteCDKReader
diff --git a/docs/docs/api_reference/readers/airbyte_gong.md b/docs/docs/api_reference/readers/airbyte_gong.md
new file mode 100644
index 0000000000000000000000000000000000000000..35babd83be1a7c82971424b2c56c07a686cb265f
--- /dev/null
+++ b/docs/docs/api_reference/readers/airbyte_gong.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.airbyte_gong
+    options:
+      members:
+        - AirbyteGongReader
diff --git a/docs/docs/api_reference/readers/airbyte_hubspot.md b/docs/docs/api_reference/readers/airbyte_hubspot.md
new file mode 100644
index 0000000000000000000000000000000000000000..9f8a67c04dec932bd7f9bf2e0865d7c9cace065a
--- /dev/null
+++ b/docs/docs/api_reference/readers/airbyte_hubspot.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.airbyte_hubspot
+    options:
+      members:
+        - AirbyteHubspotReader
diff --git a/docs/docs/api_reference/readers/airbyte_salesforce.md b/docs/docs/api_reference/readers/airbyte_salesforce.md
new file mode 100644
index 0000000000000000000000000000000000000000..dc6ad63a8fdb1acf9ca5633a804c96bb185871cd
--- /dev/null
+++ b/docs/docs/api_reference/readers/airbyte_salesforce.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.airbyte_salesforce
+    options:
+      members:
+        - AirbyteSalesforceReader
diff --git a/docs/docs/api_reference/readers/airbyte_shopify.md b/docs/docs/api_reference/readers/airbyte_shopify.md
new file mode 100644
index 0000000000000000000000000000000000000000..1f97f4831dd726aa459b6ad3e4918ad5b235bc74
--- /dev/null
+++ b/docs/docs/api_reference/readers/airbyte_shopify.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.airbyte_shopify
+    options:
+      members:
+        - AirbyteShopifyReader
diff --git a/docs/docs/api_reference/readers/airbyte_stripe.md b/docs/docs/api_reference/readers/airbyte_stripe.md
new file mode 100644
index 0000000000000000000000000000000000000000..4219aacd5917410ada7578371c2438fc75044ae7
--- /dev/null
+++ b/docs/docs/api_reference/readers/airbyte_stripe.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.airbyte_stripe
+    options:
+      members:
+        - AirbyteStripeReader
diff --git a/docs/docs/api_reference/readers/airbyte_typeform.md b/docs/docs/api_reference/readers/airbyte_typeform.md
new file mode 100644
index 0000000000000000000000000000000000000000..9b0f086bcb57c5d72780c8577ad9cb4cca0aa91b
--- /dev/null
+++ b/docs/docs/api_reference/readers/airbyte_typeform.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.airbyte_typeform
+    options:
+      members:
+        - AirbyteTypeformReader
diff --git a/docs/docs/api_reference/readers/airbyte_zendesk_support.md b/docs/docs/api_reference/readers/airbyte_zendesk_support.md
new file mode 100644
index 0000000000000000000000000000000000000000..73931cf84544f3d0ad1e93e5c2ded7b3fea84d35
--- /dev/null
+++ b/docs/docs/api_reference/readers/airbyte_zendesk_support.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.airbyte_zendesk_support
+    options:
+      members:
+        - AirbyteZendeskSupportReader
diff --git a/docs/docs/api_reference/readers/airtable.md b/docs/docs/api_reference/readers/airtable.md
new file mode 100644
index 0000000000000000000000000000000000000000..d30b811d03d45da9374a82e644f8bf366128c8be
--- /dev/null
+++ b/docs/docs/api_reference/readers/airtable.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.airtable
+    options:
+      members:
+        - AirtableReader
diff --git a/docs/docs/api_reference/readers/apify.md b/docs/docs/api_reference/readers/apify.md
new file mode 100644
index 0000000000000000000000000000000000000000..c87419376264fe68e6822fc06605da7dfd799a2f
--- /dev/null
+++ b/docs/docs/api_reference/readers/apify.md
@@ -0,0 +1,5 @@
+::: llama_index.readers.apify
+    options:
+      members:
+        - ApifyActor
+        - ApifyDataset
diff --git a/docs/docs/api_reference/readers/arango_db.md b/docs/docs/api_reference/readers/arango_db.md
new file mode 100644
index 0000000000000000000000000000000000000000..08b0614909cd1811603a919ec2a8e032aa1d6e26
--- /dev/null
+++ b/docs/docs/api_reference/readers/arango_db.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.arango_db
+    options:
+      members:
+        - SimpleArangoDBReader
diff --git a/docs/docs/api_reference/readers/arxiv.md b/docs/docs/api_reference/readers/arxiv.md
new file mode 100644
index 0000000000000000000000000000000000000000..48d0f51a27058ddbe8230a955175d2d6354077b2
--- /dev/null
+++ b/docs/docs/api_reference/readers/arxiv.md
@@ -0,0 +1,5 @@
+::: llama_index.readers.papers
+    options:
+      members:
+        - ArxivReader
+        - PubmedReader
diff --git a/docs/docs/api_reference/readers/asana.md b/docs/docs/api_reference/readers/asana.md
new file mode 100644
index 0000000000000000000000000000000000000000..eb9d97ae9b9f049307b05ae99655a52f8bf5d21b
--- /dev/null
+++ b/docs/docs/api_reference/readers/asana.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.asana
+    options:
+      members:
+        - AsanaReader
diff --git a/docs/docs/api_reference/readers/assemblyai.md b/docs/docs/api_reference/readers/assemblyai.md
new file mode 100644
index 0000000000000000000000000000000000000000..a795673c5a71f4f4b4d089cf08871330b34cbeb5
--- /dev/null
+++ b/docs/docs/api_reference/readers/assemblyai.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.assemblyai
+    options:
+      members:
+        - AssemblyAIAudioTranscriptReader
diff --git a/docs/docs/api_reference/readers/astra_db.md b/docs/docs/api_reference/readers/astra_db.md
new file mode 100644
index 0000000000000000000000000000000000000000..8228cdd00f4751c0846e191773965c648940be90
--- /dev/null
+++ b/docs/docs/api_reference/readers/astra_db.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.astra_db
+    options:
+      members:
+        - AstraDBReader
diff --git a/docs/docs/api_reference/readers/athena.md b/docs/docs/api_reference/readers/athena.md
new file mode 100644
index 0000000000000000000000000000000000000000..9e725e989a7664f0830c50a86b13829393b2065e
--- /dev/null
+++ b/docs/docs/api_reference/readers/athena.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.athena
+    options:
+      members:
+        - AthenaReader
diff --git a/docs/docs/api_reference/readers/awadb.md b/docs/docs/api_reference/readers/awadb.md
new file mode 100644
index 0000000000000000000000000000000000000000..9438e50dbe92161cf658710ab70d72ac14791148
--- /dev/null
+++ b/docs/docs/api_reference/readers/awadb.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.awadb
+    options:
+      members:
+        - AwadbReader
diff --git a/docs/docs/api_reference/readers/azcognitive_search.md b/docs/docs/api_reference/readers/azcognitive_search.md
new file mode 100644
index 0000000000000000000000000000000000000000..65e229d914eaaeafee90b74aae91502f96f48eb5
--- /dev/null
+++ b/docs/docs/api_reference/readers/azcognitive_search.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.azcognitive_search
+    options:
+      members:
+        - AzCognitiveSearchReader
diff --git a/docs/docs/api_reference/readers/azstorage_blob.md b/docs/docs/api_reference/readers/azstorage_blob.md
new file mode 100644
index 0000000000000000000000000000000000000000..55d139eb9f2b47278624b8779915f2bda2dc6292
--- /dev/null
+++ b/docs/docs/api_reference/readers/azstorage_blob.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.azstorage_blob
+    options:
+      members:
+        - AzStorageBlobReader
diff --git a/docs/docs/api_reference/readers/bagel.md b/docs/docs/api_reference/readers/bagel.md
new file mode 100644
index 0000000000000000000000000000000000000000..a3f581c0e175c5d94f3d3190860e2dc718d8b4e7
--- /dev/null
+++ b/docs/docs/api_reference/readers/bagel.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.bagel
+    options:
+      members:
+        - BagelReader
diff --git a/docs/docs/api_reference/readers/bilibili.md b/docs/docs/api_reference/readers/bilibili.md
new file mode 100644
index 0000000000000000000000000000000000000000..40ec2cdb9e53bc33ccf7d0b5713ce71c5f0a1ab2
--- /dev/null
+++ b/docs/docs/api_reference/readers/bilibili.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.bilibili
+    options:
+      members:
+        - BilibiliTranscriptReader
diff --git a/docs/docs/api_reference/readers/bitbucket.md b/docs/docs/api_reference/readers/bitbucket.md
new file mode 100644
index 0000000000000000000000000000000000000000..4ef2eba5f69e07e083e3bede7802ddd7dd82c3e7
--- /dev/null
+++ b/docs/docs/api_reference/readers/bitbucket.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.bitbucket
+    options:
+      members:
+        - BitbucketReader
diff --git a/docs/docs/api_reference/readers/boarddocs.md b/docs/docs/api_reference/readers/boarddocs.md
new file mode 100644
index 0000000000000000000000000000000000000000..5c961591ca4316d537c54ae366b105188209f93a
--- /dev/null
+++ b/docs/docs/api_reference/readers/boarddocs.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.boarddocs
+    options:
+      members:
+        - BoardDocsReader
diff --git a/docs/docs/api_reference/readers/chatgpt_plugin.md b/docs/docs/api_reference/readers/chatgpt_plugin.md
new file mode 100644
index 0000000000000000000000000000000000000000..7bfde8aaf3caadc721be5257d4353637b6a925e5
--- /dev/null
+++ b/docs/docs/api_reference/readers/chatgpt_plugin.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.chatgpt_plugin
+    options:
+      members:
+        - ChatGPTRetrievalPluginReader
diff --git a/docs/docs/api_reference/readers/chroma.md b/docs/docs/api_reference/readers/chroma.md
new file mode 100644
index 0000000000000000000000000000000000000000..95f9ac48e5ab26a68d0419e7e512eb9e56f116bd
--- /dev/null
+++ b/docs/docs/api_reference/readers/chroma.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.chroma
+    options:
+      members:
+        - ChromaReader
diff --git a/docs/docs/api_reference/readers/clickhouse.md b/docs/docs/api_reference/readers/clickhouse.md
new file mode 100644
index 0000000000000000000000000000000000000000..d3b2ab411b4b812a9e117b7408bf55e2e5498abd
--- /dev/null
+++ b/docs/docs/api_reference/readers/clickhouse.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.clickhouse
+    options:
+      members:
+        - ClickHouseReader
diff --git a/docs/docs/api_reference/readers/confluence.md b/docs/docs/api_reference/readers/confluence.md
new file mode 100644
index 0000000000000000000000000000000000000000..28cca30fc708b5aa6dd3ef2352afbd6a66f4ab94
--- /dev/null
+++ b/docs/docs/api_reference/readers/confluence.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.confluence
+    options:
+      members:
+        - ConfluenceReader
diff --git a/docs/docs/api_reference/readers/couchbase.md b/docs/docs/api_reference/readers/couchbase.md
new file mode 100644
index 0000000000000000000000000000000000000000..0edf0980ee6fbadb26c2da2d97d01712898ffe3b
--- /dev/null
+++ b/docs/docs/api_reference/readers/couchbase.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.couchbase
+    options:
+      members:
+        - CouchbaseReader
diff --git a/docs/docs/api_reference/readers/couchdb.md b/docs/docs/api_reference/readers/couchdb.md
new file mode 100644
index 0000000000000000000000000000000000000000..708c39b8c2d11d81d2feaab86b27262bc9451cc7
--- /dev/null
+++ b/docs/docs/api_reference/readers/couchdb.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.couchdb
+    options:
+      members:
+        - SimpleCouchDBReader
diff --git a/docs/docs/api_reference/readers/dad_jokes.md b/docs/docs/api_reference/readers/dad_jokes.md
new file mode 100644
index 0000000000000000000000000000000000000000..9deb167eca77eed0f121233a821264fc4b5dc9ef
--- /dev/null
+++ b/docs/docs/api_reference/readers/dad_jokes.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.dad_jokes
+    options:
+      members:
+        - DadJokesReader
diff --git a/docs/docs/api_reference/readers/dashvector.md b/docs/docs/api_reference/readers/dashvector.md
new file mode 100644
index 0000000000000000000000000000000000000000..5703a1f04551ed71420c36a24482d9056274a71b
--- /dev/null
+++ b/docs/docs/api_reference/readers/dashvector.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.dashvector
+    options:
+      members:
+        - DashVectorReader
diff --git a/docs/docs/api_reference/readers/database.md b/docs/docs/api_reference/readers/database.md
new file mode 100644
index 0000000000000000000000000000000000000000..e65818ed0ceaf046428028d829514d5c444ea6e4
--- /dev/null
+++ b/docs/docs/api_reference/readers/database.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.database
+    options:
+      members:
+        - DatabaseReader
diff --git a/docs/docs/api_reference/readers/deeplake.md b/docs/docs/api_reference/readers/deeplake.md
new file mode 100644
index 0000000000000000000000000000000000000000..20d04acf6ee1912b7349417483d003f68c9669d6
--- /dev/null
+++ b/docs/docs/api_reference/readers/deeplake.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.deeplake
+    options:
+      members:
+        - DeepLakeReader
diff --git a/docs/docs/api_reference/readers/discord.md b/docs/docs/api_reference/readers/discord.md
new file mode 100644
index 0000000000000000000000000000000000000000..af7601407b5960fe3c30a3f924fed10d5f9b0026
--- /dev/null
+++ b/docs/docs/api_reference/readers/discord.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.discord
+    options:
+      members:
+        - DiscordReader
diff --git a/docs/docs/api_reference/readers/docstring_walker.md b/docs/docs/api_reference/readers/docstring_walker.md
new file mode 100644
index 0000000000000000000000000000000000000000..3fda42eaa673ff97b26a1e7a0b8f165665a24875
--- /dev/null
+++ b/docs/docs/api_reference/readers/docstring_walker.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.docstring_walker
+    options:
+      members:
+        - DocstringWalker
diff --git a/docs/docs/api_reference/readers/docugami.md b/docs/docs/api_reference/readers/docugami.md
new file mode 100644
index 0000000000000000000000000000000000000000..56678f5674fcdb8e57d41ea4cde22589cca58404
--- /dev/null
+++ b/docs/docs/api_reference/readers/docugami.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.docugami
+    options:
+      members:
+        - DocugamiReader
diff --git a/docs/docs/api_reference/readers/earnings_call_transcript.md b/docs/docs/api_reference/readers/earnings_call_transcript.md
new file mode 100644
index 0000000000000000000000000000000000000000..a35b120c851acd7e9ddf9a21638a9d9420db70b5
--- /dev/null
+++ b/docs/docs/api_reference/readers/earnings_call_transcript.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.earnings_call_transcript
+    options:
+      members:
+        - EarningsCallTranscript
diff --git a/docs/docs/api_reference/readers/elasticsearch.md b/docs/docs/api_reference/readers/elasticsearch.md
new file mode 100644
index 0000000000000000000000000000000000000000..1b23649d2c29d5758bec9ec05d75035849e5d857
--- /dev/null
+++ b/docs/docs/api_reference/readers/elasticsearch.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.elasticsearch
+    options:
+      members:
+        - ElasticsearchReader
diff --git a/docs/docs/api_reference/readers/faiss.md b/docs/docs/api_reference/readers/faiss.md
new file mode 100644
index 0000000000000000000000000000000000000000..5f1cf93672363b8d2ca62c2c44249419dc4cd41b
--- /dev/null
+++ b/docs/docs/api_reference/readers/faiss.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.faiss
+    options:
+      members:
+        - FaissReader
diff --git a/docs/docs/api_reference/readers/feedly_rss.md b/docs/docs/api_reference/readers/feedly_rss.md
new file mode 100644
index 0000000000000000000000000000000000000000..073c0d1e0d48079d6a431f59105f9fe0692c129f
--- /dev/null
+++ b/docs/docs/api_reference/readers/feedly_rss.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.feedly_rss
+    options:
+      members:
+        - FeedlyRssReader
diff --git a/docs/docs/api_reference/readers/feishu_docs.md b/docs/docs/api_reference/readers/feishu_docs.md
new file mode 100644
index 0000000000000000000000000000000000000000..d1f3b9613f634c5a7ca44acba9580820e4bf6384
--- /dev/null
+++ b/docs/docs/api_reference/readers/feishu_docs.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.feishu_docs
+    options:
+      members:
+        - FeishuDocsReader
diff --git a/docs/docs/api_reference/readers/feishu_wiki.md b/docs/docs/api_reference/readers/feishu_wiki.md
new file mode 100644
index 0000000000000000000000000000000000000000..fe649b280ad28ebaa911b5f19160c46aab707892
--- /dev/null
+++ b/docs/docs/api_reference/readers/feishu_wiki.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.feishu_wiki
+    options:
+      members:
+        - FeishuWikiReader
diff --git a/docs/docs/api_reference/readers/file.md b/docs/docs/api_reference/readers/file.md
new file mode 100644
index 0000000000000000000000000000000000000000..9a09dc665d9772855dfd9d98d81d898b83cea560
--- /dev/null
+++ b/docs/docs/api_reference/readers/file.md
@@ -0,0 +1,25 @@
+::: llama_index.readers.file
+    options:
+      members:
+        - CSVReader
+        - DocxReader
+        - EpubReader
+        - FlatReader
+        - HTMLTagReader
+        - HWPReader
+        - IPYNBReader
+        - ImageCaptionReader
+        - ImageReader
+        - ImageTabularChartReader
+        - ImageVisionLLMReader
+        - MarkdownReader
+        - MboxReader
+        - PDFReader
+        - PagedCSVReader
+        - PandasCSVReader
+        - PptxReader
+        - PyMuPDFReader
+        - RTFReader
+        - UnstructuredReader
+        - VideoAudioReader
+        - XMLReader
diff --git a/docs/docs/api_reference/readers/firebase_realtimedb.md b/docs/docs/api_reference/readers/firebase_realtimedb.md
new file mode 100644
index 0000000000000000000000000000000000000000..93a0fd585f76e379efa0f711177fec7ba0441a88
--- /dev/null
+++ b/docs/docs/api_reference/readers/firebase_realtimedb.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.firebase_realtimedb
+    options:
+      members:
+        - FirebaseRealtimeDatabaseReader
diff --git a/docs/docs/api_reference/readers/firestore.md b/docs/docs/api_reference/readers/firestore.md
new file mode 100644
index 0000000000000000000000000000000000000000..af0889ad3ceef79b60a37d986f7ff5cd9812ac9a
--- /dev/null
+++ b/docs/docs/api_reference/readers/firestore.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.firestore
+    options:
+      members:
+        - FirestoreReader
diff --git a/docs/docs/api_reference/readers/genius.md b/docs/docs/api_reference/readers/genius.md
new file mode 100644
index 0000000000000000000000000000000000000000..b71e34d84d9579104d0cd97051ee7e2f76ba99e5
--- /dev/null
+++ b/docs/docs/api_reference/readers/genius.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.genius
+    options:
+      members:
+        - GeniusReader
diff --git a/docs/docs/api_reference/readers/github.md b/docs/docs/api_reference/readers/github.md
new file mode 100644
index 0000000000000000000000000000000000000000..2942924bc485616364cf0689e9bef63f49a7fa02
--- /dev/null
+++ b/docs/docs/api_reference/readers/github.md
@@ -0,0 +1,6 @@
+::: llama_index.readers.github
+    options:
+      members:
+        - GitHubRepositoryCollaboratorsReader
+        - GitHubRepositoryIssuesReader
+        - GithubRepositoryReader
diff --git a/docs/docs/api_reference/readers/google.md b/docs/docs/api_reference/readers/google.md
new file mode 100644
index 0000000000000000000000000000000000000000..268d60b090833e67c346e8dbe5858c21374d53e5
--- /dev/null
+++ b/docs/docs/api_reference/readers/google.md
@@ -0,0 +1,9 @@
+::: llama_index.readers.google
+    options:
+      members:
+        - GmailReader
+        - GoogleCalendarReader
+        - GoogleDocsReader
+        - GoogleDriveReader
+        - GoogleKeepReader
+        - GoogleSheetsReader
diff --git a/docs/docs/api_reference/readers/gpt_repo.md b/docs/docs/api_reference/readers/gpt_repo.md
new file mode 100644
index 0000000000000000000000000000000000000000..bf705843796aa56369cc4e3113d93ad33b8d3baf
--- /dev/null
+++ b/docs/docs/api_reference/readers/gpt_repo.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.gpt_repo
+    options:
+      members:
+        - GPTRepoReader
diff --git a/docs/docs/api_reference/readers/graphdb_cypher.md b/docs/docs/api_reference/readers/graphdb_cypher.md
new file mode 100644
index 0000000000000000000000000000000000000000..6864421bb639bb70c83e141fe8861f57da90663e
--- /dev/null
+++ b/docs/docs/api_reference/readers/graphdb_cypher.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.graphdb_cypher
+    options:
+      members:
+        - GraphDBCypherReader
diff --git a/docs/docs/api_reference/readers/graphql.md b/docs/docs/api_reference/readers/graphql.md
new file mode 100644
index 0000000000000000000000000000000000000000..cd5fc89e05a6085337a5db2aafc7418e763e0e2a
--- /dev/null
+++ b/docs/docs/api_reference/readers/graphql.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.graphql
+    options:
+      members:
+        - GraphQLReader
diff --git a/docs/docs/api_reference/readers/guru.md b/docs/docs/api_reference/readers/guru.md
new file mode 100644
index 0000000000000000000000000000000000000000..99591f15e438aec1cdb1969b8d299caf6af56f6d
--- /dev/null
+++ b/docs/docs/api_reference/readers/guru.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.guru
+    options:
+      members:
+        - GuruReader
diff --git a/docs/docs/api_reference/readers/hatena_blog.md b/docs/docs/api_reference/readers/hatena_blog.md
new file mode 100644
index 0000000000000000000000000000000000000000..470674882f0425673e271285fc98f788f314cb82
--- /dev/null
+++ b/docs/docs/api_reference/readers/hatena_blog.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.hatena_blog
+    options:
+      members:
+        - HatenaBlogReader
diff --git a/docs/docs/api_reference/readers/hive.md b/docs/docs/api_reference/readers/hive.md
new file mode 100644
index 0000000000000000000000000000000000000000..17dc6f68884f3c5fd83d2bf86d0886b008a2b120
--- /dev/null
+++ b/docs/docs/api_reference/readers/hive.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.hive
+    options:
+      members:
+        - HiveReader
diff --git a/docs/docs/api_reference/readers/hubspot.md b/docs/docs/api_reference/readers/hubspot.md
new file mode 100644
index 0000000000000000000000000000000000000000..a3c793394089374271bf4d22d350d63345c0c709
--- /dev/null
+++ b/docs/docs/api_reference/readers/hubspot.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.hubspot
+    options:
+      members:
+        - HubspotReader
diff --git a/docs/docs/api_reference/readers/huggingface_fs.md b/docs/docs/api_reference/readers/huggingface_fs.md
new file mode 100644
index 0000000000000000000000000000000000000000..85deed719c2bf7221170c5ca440ee7745ae62e0f
--- /dev/null
+++ b/docs/docs/api_reference/readers/huggingface_fs.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.huggingface_fs
+    options:
+      members:
+        - HuggingFaceFSReader
diff --git a/docs/docs/api_reference/readers/hwp.md b/docs/docs/api_reference/readers/hwp.md
new file mode 100644
index 0000000000000000000000000000000000000000..1466a864334e90a545eb87c8b9b89b20700bb634
--- /dev/null
+++ b/docs/docs/api_reference/readers/hwp.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.hwp
+    options:
+      members:
+        - HWPReader
diff --git a/docs/docs/api_reference/readers/imdb_review.md b/docs/docs/api_reference/readers/imdb_review.md
new file mode 100644
index 0000000000000000000000000000000000000000..6e120cdb8ede6f4c518289399e9434407d6d08a5
--- /dev/null
+++ b/docs/docs/api_reference/readers/imdb_review.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.imdb_review
+    options:
+      members:
+        - IMDBReviews
diff --git a/docs/docs/api_reference/readers/index.md b/docs/docs/api_reference/readers/index.md
new file mode 100644
index 0000000000000000000000000000000000000000..93c5abc5d6f40ca768eff15129ab1dc28b1a8ddc
--- /dev/null
+++ b/docs/docs/api_reference/readers/index.md
@@ -0,0 +1,5 @@
+::: llama_index.core.readers.base
+    options:
+      members:
+        - BaseReader
+        - BasePydanticReader
diff --git a/docs/docs/api_reference/readers/intercom.md b/docs/docs/api_reference/readers/intercom.md
new file mode 100644
index 0000000000000000000000000000000000000000..f61df34cc7535506442d9020dfce6f4a9c3769a8
--- /dev/null
+++ b/docs/docs/api_reference/readers/intercom.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.intercom
+    options:
+      members:
+        - IntercomReader
diff --git a/docs/docs/api_reference/readers/jaguar.md b/docs/docs/api_reference/readers/jaguar.md
new file mode 100644
index 0000000000000000000000000000000000000000..812a79b09c3be2e63b7b03b2a5a2579e4fe872db
--- /dev/null
+++ b/docs/docs/api_reference/readers/jaguar.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.jaguar
+    options:
+      members:
+        - JaguarReader
diff --git a/docs/docs/api_reference/readers/jira.md b/docs/docs/api_reference/readers/jira.md
new file mode 100644
index 0000000000000000000000000000000000000000..a355ac6f950a5c186a92d10be74f16773eb0aa45
--- /dev/null
+++ b/docs/docs/api_reference/readers/jira.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.jira
+    options:
+      members:
+        - JiraReader
diff --git a/docs/docs/api_reference/readers/joplin.md b/docs/docs/api_reference/readers/joplin.md
new file mode 100644
index 0000000000000000000000000000000000000000..35d731eb08fd9cfb35c2d282f7afc4c86484e26d
--- /dev/null
+++ b/docs/docs/api_reference/readers/joplin.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.joplin
+    options:
+      members:
+        - JoplinReader
diff --git a/docs/docs/api_reference/readers/json.md b/docs/docs/api_reference/readers/json.md
new file mode 100644
index 0000000000000000000000000000000000000000..9670c55b69450b1cc1077e085201371e803f7c56
--- /dev/null
+++ b/docs/docs/api_reference/readers/json.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.json
+    options:
+      members:
+        - JSONReader
diff --git a/docs/docs/api_reference/readers/kaltura_esearch.md b/docs/docs/api_reference/readers/kaltura_esearch.md
new file mode 100644
index 0000000000000000000000000000000000000000..0bd37e6c3c91515ae46dc5f7dada9bb8bf073255
--- /dev/null
+++ b/docs/docs/api_reference/readers/kaltura_esearch.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.kaltura_esearch
+    options:
+      members:
+        - KalturaESearchReader
diff --git a/docs/docs/api_reference/readers/kibela.md b/docs/docs/api_reference/readers/kibela.md
new file mode 100644
index 0000000000000000000000000000000000000000..146b90c79821009d243072444742da5904f7ddf8
--- /dev/null
+++ b/docs/docs/api_reference/readers/kibela.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.kibela
+    options:
+      members:
+        - KibelaReader
diff --git a/docs/docs/api_reference/readers/lilac.md b/docs/docs/api_reference/readers/lilac.md
new file mode 100644
index 0000000000000000000000000000000000000000..2f5e47a62b2956b5d7761868ca27bc304b607ba3
--- /dev/null
+++ b/docs/docs/api_reference/readers/lilac.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.lilac
+    options:
+      members:
+        - LilacReader
diff --git a/docs/docs/api_reference/readers/linear.md b/docs/docs/api_reference/readers/linear.md
new file mode 100644
index 0000000000000000000000000000000000000000..9a153a76d1a863a089b008119426634326c33670
--- /dev/null
+++ b/docs/docs/api_reference/readers/linear.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.linear
+    options:
+      members:
+        - LinearReader
diff --git a/docs/docs/api_reference/readers/llama_parse.md b/docs/docs/api_reference/readers/llama_parse.md
new file mode 100644
index 0000000000000000000000000000000000000000..88c4aa106ca92abd7ddd89bda068f25b232dbfdd
--- /dev/null
+++ b/docs/docs/api_reference/readers/llama_parse.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.llama_parse
+    options:
+      members:
+        - LlamaParse
diff --git a/docs/docs/api_reference/readers/macrometa_gdn.md b/docs/docs/api_reference/readers/macrometa_gdn.md
new file mode 100644
index 0000000000000000000000000000000000000000..1f4f18f9ff3683c22d2099c48117953600d2804c
--- /dev/null
+++ b/docs/docs/api_reference/readers/macrometa_gdn.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.macrometa_gdn
+    options:
+      members:
+        - MacrometaGDNReader
diff --git a/docs/docs/api_reference/readers/make_com.md b/docs/docs/api_reference/readers/make_com.md
new file mode 100644
index 0000000000000000000000000000000000000000..a266ef18e03fc2400a105c0ecc6f8b9e5a50748a
--- /dev/null
+++ b/docs/docs/api_reference/readers/make_com.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.make_com
+    options:
+      members:
+        - MakeWrapper
diff --git a/docs/docs/api_reference/readers/mangadex.md b/docs/docs/api_reference/readers/mangadex.md
new file mode 100644
index 0000000000000000000000000000000000000000..4011658728dca3169d4e10c488ee9964de3fdfeb
--- /dev/null
+++ b/docs/docs/api_reference/readers/mangadex.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.mangadex
+    options:
+      members:
+        - MangaDexReader
diff --git a/docs/docs/api_reference/readers/mangoapps_guides.md b/docs/docs/api_reference/readers/mangoapps_guides.md
new file mode 100644
index 0000000000000000000000000000000000000000..8e9eb28eddac9513bf7441b93ff4331ace44d5bc
--- /dev/null
+++ b/docs/docs/api_reference/readers/mangoapps_guides.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.mangoapps_guides
+    options:
+      members:
+        - MangoppsGuidesReader
diff --git a/docs/docs/api_reference/readers/maps.md b/docs/docs/api_reference/readers/maps.md
new file mode 100644
index 0000000000000000000000000000000000000000..ca7dfb98a4b2ec8a5a431eb03399c25aea19b3a4
--- /dev/null
+++ b/docs/docs/api_reference/readers/maps.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.maps
+    options:
+      members:
+        - OpenMap
diff --git a/docs/docs/api_reference/readers/mbox.md b/docs/docs/api_reference/readers/mbox.md
new file mode 100644
index 0000000000000000000000000000000000000000..7491957cafb40efc1f27ec60fd37677de4fb47f6
--- /dev/null
+++ b/docs/docs/api_reference/readers/mbox.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.mbox
+    options:
+      members:
+        - MboxReader
diff --git a/docs/docs/api_reference/readers/memos.md b/docs/docs/api_reference/readers/memos.md
new file mode 100644
index 0000000000000000000000000000000000000000..693177d604653663d10afccad72362b93a6dec8e
--- /dev/null
+++ b/docs/docs/api_reference/readers/memos.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.memos
+    options:
+      members:
+        - MemosReader
diff --git a/docs/docs/api_reference/readers/metal.md b/docs/docs/api_reference/readers/metal.md
new file mode 100644
index 0000000000000000000000000000000000000000..40a7fa6a6cacaedf05d04a7f5ea68a71527b044f
--- /dev/null
+++ b/docs/docs/api_reference/readers/metal.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.metal
+    options:
+      members:
+        - MetalReader
diff --git a/docs/docs/api_reference/readers/microsoft_onedrive.md b/docs/docs/api_reference/readers/microsoft_onedrive.md
new file mode 100644
index 0000000000000000000000000000000000000000..d2d46e9f195d857f3f9da7e417300e9b8ec72490
--- /dev/null
+++ b/docs/docs/api_reference/readers/microsoft_onedrive.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.microsoft_onedrive
+    options:
+      members:
+        - OneDriveReader
diff --git a/docs/docs/api_reference/readers/microsoft_outlook.md b/docs/docs/api_reference/readers/microsoft_outlook.md
new file mode 100644
index 0000000000000000000000000000000000000000..4e2e4c253d0d9d75df540cf0a1748e6a6a1dbaa4
--- /dev/null
+++ b/docs/docs/api_reference/readers/microsoft_outlook.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.microsoft_outlook
+    options:
+      members:
+        - OutlookLocalCalendarReader
diff --git a/docs/docs/api_reference/readers/microsoft_sharepoint.md b/docs/docs/api_reference/readers/microsoft_sharepoint.md
new file mode 100644
index 0000000000000000000000000000000000000000..f82a29aee5662e7f900228428dfb3fe176e67bb2
--- /dev/null
+++ b/docs/docs/api_reference/readers/microsoft_sharepoint.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.microsoft_sharepoint
+    options:
+      members:
+        - SharePointReader
diff --git a/docs/docs/api_reference/readers/milvus.md b/docs/docs/api_reference/readers/milvus.md
new file mode 100644
index 0000000000000000000000000000000000000000..5affbb64582c3dc9d8a2d395a77786107939a1c9
--- /dev/null
+++ b/docs/docs/api_reference/readers/milvus.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.milvus
+    options:
+      members:
+        - MilvusReader
diff --git a/docs/docs/api_reference/readers/minio.md b/docs/docs/api_reference/readers/minio.md
new file mode 100644
index 0000000000000000000000000000000000000000..4bd28dc0d85d77931eec041337df2e7cf9e97113
--- /dev/null
+++ b/docs/docs/api_reference/readers/minio.md
@@ -0,0 +1,5 @@
+::: llama_index.readers.minio
+    options:
+      members:
+        - BotoMinioReader
+        - MinioReader
diff --git a/docs/docs/api_reference/readers/mondaydotcom.md b/docs/docs/api_reference/readers/mondaydotcom.md
new file mode 100644
index 0000000000000000000000000000000000000000..2b36b4029bec0d03c0b330100ef29a6f1caa7847
--- /dev/null
+++ b/docs/docs/api_reference/readers/mondaydotcom.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.mondaydotcom
+    options:
+      members:
+        - MondayReader
diff --git a/docs/docs/api_reference/readers/mongodb.md b/docs/docs/api_reference/readers/mongodb.md
new file mode 100644
index 0000000000000000000000000000000000000000..0a6ca314971e60a1936935700957fda0bf89e806
--- /dev/null
+++ b/docs/docs/api_reference/readers/mongodb.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.mongodb
+    options:
+      members:
+        - SimpleMongoReader
diff --git a/docs/docs/api_reference/readers/myscale.md b/docs/docs/api_reference/readers/myscale.md
new file mode 100644
index 0000000000000000000000000000000000000000..8624f784c10d51511f4a718960f23c092e6052d3
--- /dev/null
+++ b/docs/docs/api_reference/readers/myscale.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.myscale
+    options:
+      members:
+        - MyScaleReader
diff --git a/docs/docs/api_reference/readers/notion.md b/docs/docs/api_reference/readers/notion.md
new file mode 100644
index 0000000000000000000000000000000000000000..3ebf340c0b9bc8b8306258e61c9c170e5462ca86
--- /dev/null
+++ b/docs/docs/api_reference/readers/notion.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.notion
+    options:
+      members:
+        - NotionPageReader
diff --git a/docs/docs/api_reference/readers/nougat_ocr.md b/docs/docs/api_reference/readers/nougat_ocr.md
new file mode 100644
index 0000000000000000000000000000000000000000..c6c43da91f698137800ce66f5830b2d0f9a9367c
--- /dev/null
+++ b/docs/docs/api_reference/readers/nougat_ocr.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.nougat_ocr
+    options:
+      members:
+        - PDFNougatOCR
diff --git a/docs/docs/api_reference/readers/obsidian.md b/docs/docs/api_reference/readers/obsidian.md
new file mode 100644
index 0000000000000000000000000000000000000000..3eb70c5518ee54be5c2f78b8b5c860c3b0343d19
--- /dev/null
+++ b/docs/docs/api_reference/readers/obsidian.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.obsidian
+    options:
+      members:
+        - ObsidianReader
diff --git a/docs/docs/api_reference/readers/openalex.md b/docs/docs/api_reference/readers/openalex.md
new file mode 100644
index 0000000000000000000000000000000000000000..2c7fd19c8a42353e861e3afbf09fc6bf2b2f8c42
--- /dev/null
+++ b/docs/docs/api_reference/readers/openalex.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.openalex
+    options:
+      members:
+        - OpenAlexReader
diff --git a/docs/docs/api_reference/readers/opendal.md b/docs/docs/api_reference/readers/opendal.md
new file mode 100644
index 0000000000000000000000000000000000000000..fae51af416a3b67c5de7b7d7bf94a4cf728160b2
--- /dev/null
+++ b/docs/docs/api_reference/readers/opendal.md
@@ -0,0 +1,7 @@
+::: llama_index.readers.opendal
+    options:
+      members:
+        - OpendalAzblobReader
+        - OpendalGcsReader
+        - OpendalReader
+        - OpendalS3Reader
diff --git a/docs/docs/api_reference/readers/opensearch.md b/docs/docs/api_reference/readers/opensearch.md
new file mode 100644
index 0000000000000000000000000000000000000000..833436604a77440b19eb68f0c374727630692910
--- /dev/null
+++ b/docs/docs/api_reference/readers/opensearch.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.opensearch
+    options:
+      members:
+        - OpensearchReader
diff --git a/docs/docs/api_reference/readers/pandas_ai.md b/docs/docs/api_reference/readers/pandas_ai.md
new file mode 100644
index 0000000000000000000000000000000000000000..910cd15c371d6413fd00b0c63396920a5c4ff81b
--- /dev/null
+++ b/docs/docs/api_reference/readers/pandas_ai.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.pandas_ai
+    options:
+      members:
+        - PandasAIReader
diff --git a/docs/docs/api_reference/readers/papers.md b/docs/docs/api_reference/readers/papers.md
new file mode 100644
index 0000000000000000000000000000000000000000..48d0f51a27058ddbe8230a955175d2d6354077b2
--- /dev/null
+++ b/docs/docs/api_reference/readers/papers.md
@@ -0,0 +1,5 @@
+::: llama_index.readers.papers
+    options:
+      members:
+        - ArxivReader
+        - PubmedReader
diff --git a/docs/docs/api_reference/readers/patentsview.md b/docs/docs/api_reference/readers/patentsview.md
new file mode 100644
index 0000000000000000000000000000000000000000..de64246483ae8c6df49eb973eef177f136d36c05
--- /dev/null
+++ b/docs/docs/api_reference/readers/patentsview.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.patentsview
+    options:
+      members:
+        - PatentsviewReader
diff --git a/docs/docs/api_reference/readers/pathway.md b/docs/docs/api_reference/readers/pathway.md
new file mode 100644
index 0000000000000000000000000000000000000000..93036c25eea447b615e6a9d0da5bd3ed72f5312b
--- /dev/null
+++ b/docs/docs/api_reference/readers/pathway.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.pathway
+    options:
+      members:
+        - PathwayReader
diff --git a/docs/docs/api_reference/readers/pdb.md b/docs/docs/api_reference/readers/pdb.md
new file mode 100644
index 0000000000000000000000000000000000000000..e37c240e3711d44c3deef8958510693c6ebc1d9b
--- /dev/null
+++ b/docs/docs/api_reference/readers/pdb.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.pdb
+    options:
+      members:
+        - PdbAbstractReader
diff --git a/docs/docs/api_reference/readers/pdf_table.md b/docs/docs/api_reference/readers/pdf_table.md
new file mode 100644
index 0000000000000000000000000000000000000000..740507ae894011157ea7cbd6c215ce87e40e44b5
--- /dev/null
+++ b/docs/docs/api_reference/readers/pdf_table.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.pdf_table
+    options:
+      members:
+        - PDFTableReader
diff --git a/docs/docs/api_reference/readers/pinecone.md b/docs/docs/api_reference/readers/pinecone.md
new file mode 100644
index 0000000000000000000000000000000000000000..322e92216e9cad83088b93eacdfa959c52316704
--- /dev/null
+++ b/docs/docs/api_reference/readers/pinecone.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.pinecone
+    options:
+      members:
+        - PineconeReader
diff --git a/docs/docs/api_reference/readers/preprocess.md b/docs/docs/api_reference/readers/preprocess.md
new file mode 100644
index 0000000000000000000000000000000000000000..408bc9de18eb9c1f945d66cb68772ecc2ad786b9
--- /dev/null
+++ b/docs/docs/api_reference/readers/preprocess.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.preprocess
+    options:
+      members:
+        - PreprocessReader
diff --git a/docs/docs/api_reference/readers/psychic.md b/docs/docs/api_reference/readers/psychic.md
new file mode 100644
index 0000000000000000000000000000000000000000..914e511e523bf748d78568d41cbca3dfd69613e7
--- /dev/null
+++ b/docs/docs/api_reference/readers/psychic.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.psychic
+    options:
+      members:
+        - PsychicReader
diff --git a/docs/docs/api_reference/readers/qdrant.md b/docs/docs/api_reference/readers/qdrant.md
new file mode 100644
index 0000000000000000000000000000000000000000..31e933c95b0e910c41fd5fcabba64cc17bebfdd9
--- /dev/null
+++ b/docs/docs/api_reference/readers/qdrant.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.qdrant
+    options:
+      members:
+        - QdrantReader
diff --git a/docs/docs/api_reference/readers/rayyan.md b/docs/docs/api_reference/readers/rayyan.md
new file mode 100644
index 0000000000000000000000000000000000000000..1b0db256d641b3fe2b03ef491f9e4efbc7ca2cfb
--- /dev/null
+++ b/docs/docs/api_reference/readers/rayyan.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.rayyan
+    options:
+      members:
+        - RayyanReader
diff --git a/docs/docs/api_reference/readers/readwise.md b/docs/docs/api_reference/readers/readwise.md
new file mode 100644
index 0000000000000000000000000000000000000000..5b3029dd9921cc46763915be9e4e890297a07c51
--- /dev/null
+++ b/docs/docs/api_reference/readers/readwise.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.readwise
+    options:
+      members:
+        - ReadwiseReader
diff --git a/docs/docs/api_reference/readers/reddit.md b/docs/docs/api_reference/readers/reddit.md
new file mode 100644
index 0000000000000000000000000000000000000000..734d6fce64418d0bfa0f062909198ee98aef37fd
--- /dev/null
+++ b/docs/docs/api_reference/readers/reddit.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.reddit
+    options:
+      members:
+        - RedditReader
diff --git a/docs/docs/api_reference/readers/remote.md b/docs/docs/api_reference/readers/remote.md
new file mode 100644
index 0000000000000000000000000000000000000000..586cc46d5c8f7b1f8b69c72c27f21f4e7db849b6
--- /dev/null
+++ b/docs/docs/api_reference/readers/remote.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.remote
+    options:
+      members:
+        - RemoteReader
diff --git a/docs/docs/api_reference/readers/remote_depth.md b/docs/docs/api_reference/readers/remote_depth.md
new file mode 100644
index 0000000000000000000000000000000000000000..9d5f8ec36d72cab49b56a8dc8df806a92af1a72e
--- /dev/null
+++ b/docs/docs/api_reference/readers/remote_depth.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.remote_depth
+    options:
+      members:
+        - RemoteDepthReader
diff --git a/docs/docs/api_reference/readers/s3.md b/docs/docs/api_reference/readers/s3.md
new file mode 100644
index 0000000000000000000000000000000000000000..89fc49ef34fb7491d7c81318f97efe260beda8f1
--- /dev/null
+++ b/docs/docs/api_reference/readers/s3.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.s3
+    options:
+      members:
+        - S3Reader
diff --git a/docs/docs/api_reference/readers/sec_filings.md b/docs/docs/api_reference/readers/sec_filings.md
new file mode 100644
index 0000000000000000000000000000000000000000..357809ebfb6641a4be757a9f4a6e3d1f644a7839
--- /dev/null
+++ b/docs/docs/api_reference/readers/sec_filings.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.sec_filings
+    options:
+      members:
+        - SECFilingsLoader
diff --git a/docs/docs/api_reference/readers/semanticscholar.md b/docs/docs/api_reference/readers/semanticscholar.md
new file mode 100644
index 0000000000000000000000000000000000000000..890be0da4b482be0ea867018dafd66c08ec2d0bd
--- /dev/null
+++ b/docs/docs/api_reference/readers/semanticscholar.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.semanticscholar
+    options:
+      members:
+        - SemanticScholarReader
diff --git a/docs/docs/api_reference/readers/simple_directory_reader.md b/docs/docs/api_reference/readers/simple_directory_reader.md
new file mode 100644
index 0000000000000000000000000000000000000000..5d8ade8f37253419b9ba2c7b3ac738dbc098a3b1
--- /dev/null
+++ b/docs/docs/api_reference/readers/simple_directory_reader.md
@@ -0,0 +1,4 @@
+::: llama_index.core.readers.file.base
+    options:
+      members:
+        - SimpleDirectoryReader
diff --git a/docs/docs/api_reference/readers/singlestore.md b/docs/docs/api_reference/readers/singlestore.md
new file mode 100644
index 0000000000000000000000000000000000000000..26752d4865eaef7fa41439e9aaf99317dd556a1a
--- /dev/null
+++ b/docs/docs/api_reference/readers/singlestore.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.singlestore
+    options:
+      members:
+        - SingleStoreReader
diff --git a/docs/docs/api_reference/readers/slack.md b/docs/docs/api_reference/readers/slack.md
new file mode 100644
index 0000000000000000000000000000000000000000..db20c905e943a6d0170a5b66992865814602a6b6
--- /dev/null
+++ b/docs/docs/api_reference/readers/slack.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.slack
+    options:
+      members:
+        - SlackReader
diff --git a/docs/docs/api_reference/readers/smart_pdf_loader.md b/docs/docs/api_reference/readers/smart_pdf_loader.md
new file mode 100644
index 0000000000000000000000000000000000000000..b89eea42594b57e31d87954a2339bf21676a4291
--- /dev/null
+++ b/docs/docs/api_reference/readers/smart_pdf_loader.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.smart_pdf_loader
+    options:
+      members:
+        - SmartPDFLoader
diff --git a/docs/docs/api_reference/readers/snowflake.md b/docs/docs/api_reference/readers/snowflake.md
new file mode 100644
index 0000000000000000000000000000000000000000..5b7f2acf072cea75f33acb439f9a25b7dfeed062
--- /dev/null
+++ b/docs/docs/api_reference/readers/snowflake.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.snowflake
+    options:
+      members:
+        - SnowflakeReader
diff --git a/docs/docs/api_reference/readers/snscrape_twitter.md b/docs/docs/api_reference/readers/snscrape_twitter.md
new file mode 100644
index 0000000000000000000000000000000000000000..8b7096a2c2ead5ae7d3a4f0478433226e54d2c16
--- /dev/null
+++ b/docs/docs/api_reference/readers/snscrape_twitter.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.snscrape_twitter
+    options:
+      members:
+        - SnscrapeTwitterReader
diff --git a/docs/docs/api_reference/readers/spotify.md b/docs/docs/api_reference/readers/spotify.md
new file mode 100644
index 0000000000000000000000000000000000000000..30452628318def79ad377ea4cca17da1a3877b9c
--- /dev/null
+++ b/docs/docs/api_reference/readers/spotify.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.spotify
+    options:
+      members:
+        - SpotifyReader
diff --git a/docs/docs/api_reference/readers/stackoverflow.md b/docs/docs/api_reference/readers/stackoverflow.md
new file mode 100644
index 0000000000000000000000000000000000000000..031e51db9756578edb7f513446e090197f061c80
--- /dev/null
+++ b/docs/docs/api_reference/readers/stackoverflow.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.stackoverflow
+    options:
+      members:
+        - StackoverflowReader
diff --git a/docs/docs/api_reference/readers/steamship.md b/docs/docs/api_reference/readers/steamship.md
new file mode 100644
index 0000000000000000000000000000000000000000..61d8bf6faeea49ad098334c547ede763dbdf3069
--- /dev/null
+++ b/docs/docs/api_reference/readers/steamship.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.steamship
+    options:
+      members:
+        - SteamshipFileReader
diff --git a/docs/docs/api_reference/readers/string_iterable.md b/docs/docs/api_reference/readers/string_iterable.md
new file mode 100644
index 0000000000000000000000000000000000000000..fbd39b1fcd7d617c9be60de9ef4a1584e2a48dc4
--- /dev/null
+++ b/docs/docs/api_reference/readers/string_iterable.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.string_iterable
+    options:
+      members:
+        - StringIterableReader
diff --git a/docs/docs/api_reference/readers/stripe_docs.md b/docs/docs/api_reference/readers/stripe_docs.md
new file mode 100644
index 0000000000000000000000000000000000000000..56318c43b0a532c109df5990766409115b864d41
--- /dev/null
+++ b/docs/docs/api_reference/readers/stripe_docs.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.stripe_docs
+    options:
+      members:
+        - StripeDocsReader
diff --git a/docs/docs/api_reference/readers/telegram.md b/docs/docs/api_reference/readers/telegram.md
new file mode 100644
index 0000000000000000000000000000000000000000..3f9ae643520832a6886ca0b483bf6d24f6205aae
--- /dev/null
+++ b/docs/docs/api_reference/readers/telegram.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.telegram
+    options:
+      members:
+        - TelegramReader
diff --git a/docs/docs/api_reference/readers/trello.md b/docs/docs/api_reference/readers/trello.md
new file mode 100644
index 0000000000000000000000000000000000000000..b8ae1db630dc30634d8404eb8c1365bafb99716c
--- /dev/null
+++ b/docs/docs/api_reference/readers/trello.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.trello
+    options:
+      members:
+        - TrelloReader
diff --git a/docs/docs/api_reference/readers/twitter.md b/docs/docs/api_reference/readers/twitter.md
new file mode 100644
index 0000000000000000000000000000000000000000..e038987c90f829c6fc21ec1f541abebd926d0686
--- /dev/null
+++ b/docs/docs/api_reference/readers/twitter.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.twitter
+    options:
+      members:
+        - TwitterTweetReader
diff --git a/docs/docs/api_reference/readers/txtai.md b/docs/docs/api_reference/readers/txtai.md
new file mode 100644
index 0000000000000000000000000000000000000000..1fb219e1b1af75202a166d2e0ebac17a2f3d6739
--- /dev/null
+++ b/docs/docs/api_reference/readers/txtai.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.txtai
+    options:
+      members:
+        - TxtaiReader
diff --git a/docs/docs/api_reference/readers/weather.md b/docs/docs/api_reference/readers/weather.md
new file mode 100644
index 0000000000000000000000000000000000000000..a7ee67e48f8c0c95618dc39221f5a27a34ec829f
--- /dev/null
+++ b/docs/docs/api_reference/readers/weather.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.weather
+    options:
+      members:
+        - WeatherReader
diff --git a/docs/docs/api_reference/readers/weaviate.md b/docs/docs/api_reference/readers/weaviate.md
new file mode 100644
index 0000000000000000000000000000000000000000..75481ec81e17040fe2ad0d03bd5d3dc928687a07
--- /dev/null
+++ b/docs/docs/api_reference/readers/weaviate.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.weaviate
+    options:
+      members:
+        - WeaviateReader
diff --git a/docs/docs/api_reference/readers/web.md b/docs/docs/api_reference/readers/web.md
new file mode 100644
index 0000000000000000000000000000000000000000..f1ebfe26445fb001731af3df227aa5a1442bb679
--- /dev/null
+++ b/docs/docs/api_reference/readers/web.md
@@ -0,0 +1,16 @@
+::: llama_index.readers.web
+    options:
+      members:
+        - AsyncWebPageReader
+        - BeautifulSoupWebReader
+        - KnowledgeBaseWebReader
+        - MainContentExtractorReader
+        - NewsArticleReader
+        - ReadabilityWebPageReader
+        - RssNewsReader
+        - RssReader
+        - SimpleWebPageReader
+        - SitemapReader
+        - TrafilaturaWebReader
+        - UnstructuredURLLoader
+        - WholeSiteReader
diff --git a/docs/docs/api_reference/readers/whatsapp.md b/docs/docs/api_reference/readers/whatsapp.md
new file mode 100644
index 0000000000000000000000000000000000000000..886d77cd229608205776525bb114a6444ead4aef
--- /dev/null
+++ b/docs/docs/api_reference/readers/whatsapp.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.whatsapp
+    options:
+      members:
+        - WhatsappChatLoader
diff --git a/docs/docs/api_reference/readers/wikipedia.md b/docs/docs/api_reference/readers/wikipedia.md
new file mode 100644
index 0000000000000000000000000000000000000000..d86bdd5b6e515127e5cbf105b1aa8f4ee0dc659f
--- /dev/null
+++ b/docs/docs/api_reference/readers/wikipedia.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.wikipedia
+    options:
+      members:
+        - WikipediaReader
diff --git a/docs/docs/api_reference/readers/wordlift.md b/docs/docs/api_reference/readers/wordlift.md
new file mode 100644
index 0000000000000000000000000000000000000000..12af139e1de3404bef178badec24959cc81d6419
--- /dev/null
+++ b/docs/docs/api_reference/readers/wordlift.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.wordlift
+    options:
+      members:
+        - WordLiftLoader
diff --git a/docs/docs/api_reference/readers/wordpress.md b/docs/docs/api_reference/readers/wordpress.md
new file mode 100644
index 0000000000000000000000000000000000000000..99a1a37a467216a08a0cb98e469faa8e2cbfb01a
--- /dev/null
+++ b/docs/docs/api_reference/readers/wordpress.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.wordpress
+    options:
+      members:
+        - WordpressReader
diff --git a/docs/docs/api_reference/readers/youtube_transcript.md b/docs/docs/api_reference/readers/youtube_transcript.md
new file mode 100644
index 0000000000000000000000000000000000000000..66ed75cc0f93c38031e833ac9b63b8736eb8c317
--- /dev/null
+++ b/docs/docs/api_reference/readers/youtube_transcript.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.youtube_transcript
+    options:
+      members:
+        - YoutubeTranscriptReader
diff --git a/docs/docs/api_reference/readers/zendesk.md b/docs/docs/api_reference/readers/zendesk.md
new file mode 100644
index 0000000000000000000000000000000000000000..e83205e9973e1635664456e9b37a316ff55571d9
--- /dev/null
+++ b/docs/docs/api_reference/readers/zendesk.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.zendesk
+    options:
+      members:
+        - ZendeskReader
diff --git a/docs/docs/api_reference/readers/zep.md b/docs/docs/api_reference/readers/zep.md
new file mode 100644
index 0000000000000000000000000000000000000000..e9d2c6fcb1f11f8a89234ed887632f0a625821e3
--- /dev/null
+++ b/docs/docs/api_reference/readers/zep.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.zep
+    options:
+      members:
+        - ZepReader
diff --git a/docs/docs/api_reference/readers/zulip.md b/docs/docs/api_reference/readers/zulip.md
new file mode 100644
index 0000000000000000000000000000000000000000..e80b6aed37a70227ddf23fcce6724c295f2703e6
--- /dev/null
+++ b/docs/docs/api_reference/readers/zulip.md
@@ -0,0 +1,4 @@
+::: llama_index.readers.zulip
+    options:
+      members:
+        - ZulipReader
diff --git a/docs/docs/api_reference/response_synthesizers/accumulate.md b/docs/docs/api_reference/response_synthesizers/accumulate.md
new file mode 100644
index 0000000000000000000000000000000000000000..c07fb19215997328f6329fb50d4884f384a25ace
--- /dev/null
+++ b/docs/docs/api_reference/response_synthesizers/accumulate.md
@@ -0,0 +1,4 @@
+::: llama_index.core.response_synthesizers
+    options:
+      members:
+        - Accumulate
diff --git a/docs/docs/api_reference/response_synthesizers/compact_accumulate.md b/docs/docs/api_reference/response_synthesizers/compact_accumulate.md
new file mode 100644
index 0000000000000000000000000000000000000000..ec4480f32b0bc57c291ec034219105a53f1134ad
--- /dev/null
+++ b/docs/docs/api_reference/response_synthesizers/compact_accumulate.md
@@ -0,0 +1,4 @@
+::: llama_index.core.response_synthesizers.compact_and_accumulate
+    options:
+      members:
+        - CompactAndAccumulate
diff --git a/docs/docs/api_reference/response_synthesizers/compact_and_refine.md b/docs/docs/api_reference/response_synthesizers/compact_and_refine.md
new file mode 100644
index 0000000000000000000000000000000000000000..1da13086404288c96ea3cbd4f305f0c44e63d837
--- /dev/null
+++ b/docs/docs/api_reference/response_synthesizers/compact_and_refine.md
@@ -0,0 +1,4 @@
+::: llama_index.core.response_synthesizers
+    options:
+      members:
+        - CompactAndRefine
diff --git a/docs/docs/api_reference/response_synthesizers/generation.md b/docs/docs/api_reference/response_synthesizers/generation.md
new file mode 100644
index 0000000000000000000000000000000000000000..dcbe227332a9b52d9dc36db4704cc284a4c3ca74
--- /dev/null
+++ b/docs/docs/api_reference/response_synthesizers/generation.md
@@ -0,0 +1,4 @@
+::: llama_index.core.response_synthesizers
+    options:
+      members:
+        - Generation
diff --git a/docs/docs/api_reference/response_synthesizers/google.md b/docs/docs/api_reference/response_synthesizers/google.md
new file mode 100644
index 0000000000000000000000000000000000000000..f63a55d6923cfe8aeabe86ec140570a0ad82d2cb
--- /dev/null
+++ b/docs/docs/api_reference/response_synthesizers/google.md
@@ -0,0 +1,4 @@
+::: llama_index.response_synthesizers.google
+    options:
+      members:
+        - GoogleTextSynthesizer
diff --git a/docs/docs/api_reference/response_synthesizers/index.md b/docs/docs/api_reference/response_synthesizers/index.md
new file mode 100644
index 0000000000000000000000000000000000000000..1b8b541953a0f33ec63398f62b2a70f703a1d428
--- /dev/null
+++ b/docs/docs/api_reference/response_synthesizers/index.md
@@ -0,0 +1,14 @@
+::: llama_index.core.response_synthesizers.base
+    options:
+      members:
+        - BaseSynthesizer
+
+::: llama_index.core.response_synthesizers.factory
+    options:
+      members:
+        - get_response_synthesizer
+
+::: llama_index.core.response_synthesizers.type
+    options:
+      members:
+        - ResponseMode
diff --git a/docs/docs/api_reference/response_synthesizers/refine.md b/docs/docs/api_reference/response_synthesizers/refine.md
new file mode 100644
index 0000000000000000000000000000000000000000..a69de484874bbab04cba05602a2a554cea3cc7a5
--- /dev/null
+++ b/docs/docs/api_reference/response_synthesizers/refine.md
@@ -0,0 +1,4 @@
+::: llama_index.core.response_synthesizers
+    options:
+      members:
+        - Refine
diff --git a/docs/docs/api_reference/response_synthesizers/simple_summarize.md b/docs/docs/api_reference/response_synthesizers/simple_summarize.md
new file mode 100644
index 0000000000000000000000000000000000000000..2a4c3bc095b3bb31b754fa53904d845d0d0fd60f
--- /dev/null
+++ b/docs/docs/api_reference/response_synthesizers/simple_summarize.md
@@ -0,0 +1,4 @@
+::: llama_index.core.response_synthesizers
+    options:
+      members:
+        - SimpleSummarize
diff --git a/docs/docs/api_reference/response_synthesizers/tree_summarize.md b/docs/docs/api_reference/response_synthesizers/tree_summarize.md
new file mode 100644
index 0000000000000000000000000000000000000000..c0544a715d0d5b6af091dddc84b2df11ad1a8cf7
--- /dev/null
+++ b/docs/docs/api_reference/response_synthesizers/tree_summarize.md
@@ -0,0 +1,4 @@
+::: llama_index.core.response_synthesizers
+    options:
+      members:
+        - TreeSummarize
diff --git a/docs/docs/api_reference/retrievers/auto_merging.md b/docs/docs/api_reference/retrievers/auto_merging.md
new file mode 100644
index 0000000000000000000000000000000000000000..0dea41f8e24efed91986d3032c78842346b2378d
--- /dev/null
+++ b/docs/docs/api_reference/retrievers/auto_merging.md
@@ -0,0 +1,4 @@
+::: llama_index.core.retrievers
+    options:
+      members:
+        - AutoMergingRetriever
diff --git a/docs/docs/api_reference/retrievers/bm25.md b/docs/docs/api_reference/retrievers/bm25.md
new file mode 100644
index 0000000000000000000000000000000000000000..e8040efda72877bd805ef7d3a73a0780948350c6
--- /dev/null
+++ b/docs/docs/api_reference/retrievers/bm25.md
@@ -0,0 +1,4 @@
+::: llama_index.retrievers.bm25
+    options:
+      members:
+        - BM25Retriever
diff --git a/docs/docs/api_reference/retrievers/index.md b/docs/docs/api_reference/retrievers/index.md
new file mode 100644
index 0000000000000000000000000000000000000000..407afaa3eb4b69e39c60127c639b9b372b391e29
--- /dev/null
+++ b/docs/docs/api_reference/retrievers/index.md
@@ -0,0 +1,9 @@
+::: llama_index.core.base.base_retriever
+    options:
+      members:
+        - BaseRetriever
+
+::: llama_index.core.image_retriever
+    options:
+      members:
+        - BaseImageRetriever
diff --git a/docs/docs/api_reference/retrievers/keyword.md b/docs/docs/api_reference/retrievers/keyword.md
new file mode 100644
index 0000000000000000000000000000000000000000..663b4c0e043b116c3777b158246345ca89b77a05
--- /dev/null
+++ b/docs/docs/api_reference/retrievers/keyword.md
@@ -0,0 +1,7 @@
+::: llama_index.core.indices.keyword_table.retrievers
+    options:
+      members:
+        - BaseKeywordTableRetriever
+        - KeywordTableGPTRetriever
+        - KeywordTableSimpleRetriever
+        - KeywordTableRAKERetriever
diff --git a/docs/docs/api_reference/retrievers/knowledge_graph.md b/docs/docs/api_reference/retrievers/knowledge_graph.md
new file mode 100644
index 0000000000000000000000000000000000000000..a97a5f79f3afc397269781615d15197ddca96952
--- /dev/null
+++ b/docs/docs/api_reference/retrievers/knowledge_graph.md
@@ -0,0 +1,5 @@
+::: llama_index.core.retrievers
+    options:
+      members:
+        - KGTableRetriever
+        - KnowledgeGraphRAGRetriever
diff --git a/docs/docs/api_reference/retrievers/pathway.md b/docs/docs/api_reference/retrievers/pathway.md
new file mode 100644
index 0000000000000000000000000000000000000000..5e2855ae06a12108ec939943dff84ad094a50ae0
--- /dev/null
+++ b/docs/docs/api_reference/retrievers/pathway.md
@@ -0,0 +1,4 @@
+::: llama_index.retrievers.pathway
+    options:
+      members:
+        - PathwayRetriever
diff --git a/docs/docs/api_reference/retrievers/query_fusion.md b/docs/docs/api_reference/retrievers/query_fusion.md
new file mode 100644
index 0000000000000000000000000000000000000000..f5594011622b0bd3c18889073299e9376e67cc24
--- /dev/null
+++ b/docs/docs/api_reference/retrievers/query_fusion.md
@@ -0,0 +1,4 @@
+::: llama_index.core.retrievers
+    options:
+      members:
+        - QueryFusionRetriever
diff --git a/docs/docs/api_reference/retrievers/recursive.md b/docs/docs/api_reference/retrievers/recursive.md
new file mode 100644
index 0000000000000000000000000000000000000000..7e6c3bf9596f03184005614b05008628bc7f7ff8
--- /dev/null
+++ b/docs/docs/api_reference/retrievers/recursive.md
@@ -0,0 +1,4 @@
+::: llama_index.core.retrievers
+    options:
+      members:
+        - RecursiveRetriever
diff --git a/docs/docs/api_reference/retrievers/router.md b/docs/docs/api_reference/retrievers/router.md
new file mode 100644
index 0000000000000000000000000000000000000000..1f9732dc505c9a49a933d20dacf000be167648b4
--- /dev/null
+++ b/docs/docs/api_reference/retrievers/router.md
@@ -0,0 +1,4 @@
+::: llama_index.core.retrievers
+    options:
+      members:
+        - RouterRetriever
diff --git a/docs/docs/api_reference/retrievers/sql.md b/docs/docs/api_reference/retrievers/sql.md
new file mode 100644
index 0000000000000000000000000000000000000000..4a306ee8aeac99c9023623e5ed8bf7576e40c832
--- /dev/null
+++ b/docs/docs/api_reference/retrievers/sql.md
@@ -0,0 +1,6 @@
+::: llama_index.core.retrievers
+    options:
+      members:
+        - NLSQLRetriever
+        - SQLParserMode
+        - SQLRetriever
diff --git a/docs/docs/api_reference/retrievers/summary.md b/docs/docs/api_reference/retrievers/summary.md
new file mode 100644
index 0000000000000000000000000000000000000000..b300c65a0e069a78d9e6cce53f15e86651fc94f9
--- /dev/null
+++ b/docs/docs/api_reference/retrievers/summary.md
@@ -0,0 +1,4 @@
+::: llama_index.core.retrievers
+    options:
+      members:
+        - SummaryIndexRetriever
diff --git a/docs/docs/api_reference/retrievers/transform.md b/docs/docs/api_reference/retrievers/transform.md
new file mode 100644
index 0000000000000000000000000000000000000000..5aae897ec710accfb4ce1785058c8ce90e51f12c
--- /dev/null
+++ b/docs/docs/api_reference/retrievers/transform.md
@@ -0,0 +1,4 @@
+::: llama_index.core.retrievers
+    options:
+      members:
+        - TransformRetriever
diff --git a/docs/docs/api_reference/retrievers/tree.md b/docs/docs/api_reference/retrievers/tree.md
new file mode 100644
index 0000000000000000000000000000000000000000..10279885bbd31a672544267253b384908ca09331
--- /dev/null
+++ b/docs/docs/api_reference/retrievers/tree.md
@@ -0,0 +1,7 @@
+::: llama_index.core.retrievers
+    options:
+      members:
+        - TreeAllLeafRetriever
+        - TreeSelectLeafEmbeddingRetriever
+        - TreeSelectLeafRetriever
+        - TreeRootRetriever
diff --git a/docs/docs/api_reference/retrievers/vector.md b/docs/docs/api_reference/retrievers/vector.md
new file mode 100644
index 0000000000000000000000000000000000000000..cc79b814af4864c553cfdf575c1bb6725bf7cfa8
--- /dev/null
+++ b/docs/docs/api_reference/retrievers/vector.md
@@ -0,0 +1,5 @@
+::: llama_index.core.retrievers
+    options:
+      members:
+        - VectorIndexRetriever
+        - VectorIndexAutoRetriever
diff --git a/docs/docs/api_reference/retrievers/videodb.md b/docs/docs/api_reference/retrievers/videodb.md
new file mode 100644
index 0000000000000000000000000000000000000000..e896c313b100dc5b23ffee9a80ff61430bf1008a
--- /dev/null
+++ b/docs/docs/api_reference/retrievers/videodb.md
@@ -0,0 +1,4 @@
+::: llama_index.retrievers.videodb
+    options:
+      members:
+        - VideoDBRetriever
diff --git a/docs/docs/api_reference/retrievers/you.md b/docs/docs/api_reference/retrievers/you.md
new file mode 100644
index 0000000000000000000000000000000000000000..c5e26fd088717b776c077c9a26ae44752bd7a7b3
--- /dev/null
+++ b/docs/docs/api_reference/retrievers/you.md
@@ -0,0 +1,4 @@
+::: llama_index.retrievers.you
+    options:
+      members:
+        - YouRetriever
diff --git a/docs/docs/api_reference/schema/index.md b/docs/docs/api_reference/schema/index.md
new file mode 100644
index 0000000000000000000000000000000000000000..c214862b81646beae9750041b319d2e7d840da07
--- /dev/null
+++ b/docs/docs/api_reference/schema/index.md
@@ -0,0 +1 @@
+::: llama_index.core.schema
diff --git a/docs/docs/api_reference/storage/chat_store/index.md b/docs/docs/api_reference/storage/chat_store/index.md
new file mode 100644
index 0000000000000000000000000000000000000000..76d26756aea7f5970b9df86db5cd9a2d3dd44df1
--- /dev/null
+++ b/docs/docs/api_reference/storage/chat_store/index.md
@@ -0,0 +1,4 @@
+::: llama_index.core.storage.chat_store.base
+    options:
+      members:
+        - BaseChatStore
diff --git a/docs/docs/api_reference/storage/chat_store/redis.md b/docs/docs/api_reference/storage/chat_store/redis.md
new file mode 100644
index 0000000000000000000000000000000000000000..0c55ba01c3e62081cfa69a01a20958c447e33f12
--- /dev/null
+++ b/docs/docs/api_reference/storage/chat_store/redis.md
@@ -0,0 +1,4 @@
+::: llama_index.storage.chat_store.redis
+    options:
+      members:
+        - RedisChatStore
diff --git a/docs/docs/api_reference/storage/chat_store/simple.md b/docs/docs/api_reference/storage/chat_store/simple.md
new file mode 100644
index 0000000000000000000000000000000000000000..0d49e91b9eb4f8dda620bd048f1bdb80aaabeb95
--- /dev/null
+++ b/docs/docs/api_reference/storage/chat_store/simple.md
@@ -0,0 +1,4 @@
+::: llama_index.core.storage.chat_store.simple_chat_store
+    options:
+      members:
+        - SimpleChatStore
diff --git a/docs/docs/api_reference/storage/docstore/dynamodb.md b/docs/docs/api_reference/storage/docstore/dynamodb.md
new file mode 100644
index 0000000000000000000000000000000000000000..4996bd48dfe4e17bafd7fff506641920c39f0efc
--- /dev/null
+++ b/docs/docs/api_reference/storage/docstore/dynamodb.md
@@ -0,0 +1,4 @@
+::: llama_index.storage.docstore.dynamodb
+    options:
+      members:
+        - DynamoDBDocumentStore
diff --git a/docs/docs/api_reference/storage/docstore/firestore.md b/docs/docs/api_reference/storage/docstore/firestore.md
new file mode 100644
index 0000000000000000000000000000000000000000..b7b8e3eee3a696326daeb646aa0c48368bfcdcff
--- /dev/null
+++ b/docs/docs/api_reference/storage/docstore/firestore.md
@@ -0,0 +1,4 @@
+::: llama_index.storage.docstore.firestore
+    options:
+      members:
+        - FirestoreDocumentStore
diff --git a/docs/docs/api_reference/storage/docstore/index.md b/docs/docs/api_reference/storage/docstore/index.md
new file mode 100644
index 0000000000000000000000000000000000000000..607d0cfcf290d6cc1be543431d31abdf16c3b351
--- /dev/null
+++ b/docs/docs/api_reference/storage/docstore/index.md
@@ -0,0 +1 @@
+::: llama_index.core.storage.docstore.types
diff --git a/docs/docs/api_reference/storage/docstore/mongodb.md b/docs/docs/api_reference/storage/docstore/mongodb.md
new file mode 100644
index 0000000000000000000000000000000000000000..c1feb56dd0624fd7712e5c3d9dfdbb04488bf861
--- /dev/null
+++ b/docs/docs/api_reference/storage/docstore/mongodb.md
@@ -0,0 +1,4 @@
+::: llama_index.storage.docstore.mongodb
+    options:
+      members:
+        - MongoDocumentStore
diff --git a/docs/docs/api_reference/storage/docstore/postgres.md b/docs/docs/api_reference/storage/docstore/postgres.md
new file mode 100644
index 0000000000000000000000000000000000000000..49ca31e540c7071afb3356e611410e178463ff92
--- /dev/null
+++ b/docs/docs/api_reference/storage/docstore/postgres.md
@@ -0,0 +1,4 @@
+::: llama_index.storage.docstore.postgres
+    options:
+      members:
+        - PostgresDocumentStore
diff --git a/docs/docs/api_reference/storage/docstore/redis.md b/docs/docs/api_reference/storage/docstore/redis.md
new file mode 100644
index 0000000000000000000000000000000000000000..b68e2c3d86b8f398e85e23caaafedb1dd9002315
--- /dev/null
+++ b/docs/docs/api_reference/storage/docstore/redis.md
@@ -0,0 +1,4 @@
+::: llama_index.storage.docstore.redis
+    options:
+      members:
+        - RedisDocumentStore
diff --git a/docs/docs/api_reference/storage/docstore/simple.md b/docs/docs/api_reference/storage/docstore/simple.md
new file mode 100644
index 0000000000000000000000000000000000000000..cfe822056fcba34b0701800668bb2eb19a7488ce
--- /dev/null
+++ b/docs/docs/api_reference/storage/docstore/simple.md
@@ -0,0 +1,4 @@
+::: llama_index.core.storage.docstore
+    options:
+      members:
+        - SimpleDocumentStore
diff --git a/docs/docs/api_reference/storage/graph_stores/falkordb.md b/docs/docs/api_reference/storage/graph_stores/falkordb.md
new file mode 100644
index 0000000000000000000000000000000000000000..12906a65f9a48692c714a887bb32d057e7e05259
--- /dev/null
+++ b/docs/docs/api_reference/storage/graph_stores/falkordb.md
@@ -0,0 +1,4 @@
+::: llama_index.graph_stores.falkordb
+    options:
+      members:
+        - FalkorDBGraphStore
diff --git a/docs/docs/api_reference/storage/graph_stores/index.md b/docs/docs/api_reference/storage/graph_stores/index.md
new file mode 100644
index 0000000000000000000000000000000000000000..f6e0160d9595777106da177d7f67f7320713653a
--- /dev/null
+++ b/docs/docs/api_reference/storage/graph_stores/index.md
@@ -0,0 +1,6 @@
+::: llama_index.core.graph_stores.types
+    options:
+      members:
+        - GraphStore
+        - DEFAULT_PERSIST_DIR
+        - DEFAULT_PERSIST_FNAME
diff --git a/docs/docs/api_reference/storage/graph_stores/kuzu.md b/docs/docs/api_reference/storage/graph_stores/kuzu.md
new file mode 100644
index 0000000000000000000000000000000000000000..a19d228e43df1d13ae4600bc942cd8d65dc807f7
--- /dev/null
+++ b/docs/docs/api_reference/storage/graph_stores/kuzu.md
@@ -0,0 +1,4 @@
+::: llama_index.graph_stores.kuzu
+    options:
+      members:
+        - KuzuGraphStore
diff --git a/docs/docs/api_reference/storage/graph_stores/nebula.md b/docs/docs/api_reference/storage/graph_stores/nebula.md
new file mode 100644
index 0000000000000000000000000000000000000000..4f17748c040e57119112a59019e37748c28ad96f
--- /dev/null
+++ b/docs/docs/api_reference/storage/graph_stores/nebula.md
@@ -0,0 +1,4 @@
+::: llama_index.graph_stores.nebula
+    options:
+      members:
+        - NebulaGraphStore
diff --git a/docs/docs/api_reference/storage/graph_stores/neo4j.md b/docs/docs/api_reference/storage/graph_stores/neo4j.md
new file mode 100644
index 0000000000000000000000000000000000000000..7790ed504a048e89258ea376d4f0a4f283113f05
--- /dev/null
+++ b/docs/docs/api_reference/storage/graph_stores/neo4j.md
@@ -0,0 +1,4 @@
+::: llama_index.graph_stores.neo4j
+    options:
+      members:
+        - Neo4jGraphStore
diff --git a/docs/docs/api_reference/storage/graph_stores/simple.md b/docs/docs/api_reference/storage/graph_stores/simple.md
new file mode 100644
index 0000000000000000000000000000000000000000..6577da271d1c75333953abbe0357c32df5bcfdf4
--- /dev/null
+++ b/docs/docs/api_reference/storage/graph_stores/simple.md
@@ -0,0 +1,4 @@
+::: llama_index.core.graph_stores.simple
+    options:
+      members:
+        - SimpleGraphStore
diff --git a/docs/docs/api_reference/storage/index_store/dynamodb.md b/docs/docs/api_reference/storage/index_store/dynamodb.md
new file mode 100644
index 0000000000000000000000000000000000000000..787d85fe604d459eb8d701822189317931a7351c
--- /dev/null
+++ b/docs/docs/api_reference/storage/index_store/dynamodb.md
@@ -0,0 +1,4 @@
+::: llama_index.storage.index_store.dynamodb
+    options:
+      members:
+        - DynamoDBIndexStore
diff --git a/docs/docs/api_reference/storage/index_store/firestore.md b/docs/docs/api_reference/storage/index_store/firestore.md
new file mode 100644
index 0000000000000000000000000000000000000000..248d183b455a8698b2f33e7a761aa4d265c598d6
--- /dev/null
+++ b/docs/docs/api_reference/storage/index_store/firestore.md
@@ -0,0 +1,4 @@
+::: llama_index.storage.index_store.firestore
+    options:
+      members:
+        - FirestoreIndexStore
diff --git a/docs/docs/api_reference/storage/index_store/index.md b/docs/docs/api_reference/storage/index_store/index.md
new file mode 100644
index 0000000000000000000000000000000000000000..b5882e3c415a9bd436f9938faf7dbfa219a87165
--- /dev/null
+++ b/docs/docs/api_reference/storage/index_store/index.md
@@ -0,0 +1,6 @@
+::: llama_index.core.storage.index_store.types
+
+::: llama_index.core.storage.index_store
+    options:
+      members:
+        - KVIndexStore
diff --git a/docs/docs/api_reference/storage/index_store/mongodb.md b/docs/docs/api_reference/storage/index_store/mongodb.md
new file mode 100644
index 0000000000000000000000000000000000000000..63efb122574d65025688e1a907992915dca4b7a3
--- /dev/null
+++ b/docs/docs/api_reference/storage/index_store/mongodb.md
@@ -0,0 +1,4 @@
+::: llama_index.storage.index_store.mongodb
+    options:
+      members:
+        - MongoIndexStore
diff --git a/docs/docs/api_reference/storage/index_store/postgres.md b/docs/docs/api_reference/storage/index_store/postgres.md
new file mode 100644
index 0000000000000000000000000000000000000000..de08126f1174e7be0e25e1aa7f925b6c667a9450
--- /dev/null
+++ b/docs/docs/api_reference/storage/index_store/postgres.md
@@ -0,0 +1,4 @@
+::: llama_index.storage.index_store.postgres
+    options:
+      members:
+        - PostgresIndexStore
diff --git a/docs/docs/api_reference/storage/index_store/redis.md b/docs/docs/api_reference/storage/index_store/redis.md
new file mode 100644
index 0000000000000000000000000000000000000000..c4b4e1574388385e3ac26e03a09e6cf7f83c2d8d
--- /dev/null
+++ b/docs/docs/api_reference/storage/index_store/redis.md
@@ -0,0 +1,4 @@
+::: llama_index.storage.index_store.redis
+    options:
+      members:
+        - RedisIndexStore
diff --git a/docs/docs/api_reference/storage/index_store/simple.md b/docs/docs/api_reference/storage/index_store/simple.md
new file mode 100644
index 0000000000000000000000000000000000000000..fb4785a2b2c175d5a08789e35f0f15bb271b385d
--- /dev/null
+++ b/docs/docs/api_reference/storage/index_store/simple.md
@@ -0,0 +1,4 @@
+::: llama_index.core.storage.index_store
+    options:
+      members:
+        - SimpleIndexStore
diff --git a/docs/docs/api_reference/storage/kvstore/dynamodb.md b/docs/docs/api_reference/storage/kvstore/dynamodb.md
new file mode 100644
index 0000000000000000000000000000000000000000..7ddcca0436cd2835a84cbbdf8f60afa019d12d39
--- /dev/null
+++ b/docs/docs/api_reference/storage/kvstore/dynamodb.md
@@ -0,0 +1,4 @@
+::: llama_index.storage.kvstore.dynamodb
+    options:
+      members:
+        - DynamoDBKVStore
diff --git a/docs/docs/api_reference/storage/kvstore/elasticsearch.md b/docs/docs/api_reference/storage/kvstore/elasticsearch.md
new file mode 100644
index 0000000000000000000000000000000000000000..5a90fc658257dd07a5d033e0b8aa6d67c59f534b
--- /dev/null
+++ b/docs/docs/api_reference/storage/kvstore/elasticsearch.md
@@ -0,0 +1,4 @@
+::: llama_index.storage.kvstore.elasticsearch
+    options:
+      members:
+        - ElasticsearchKVStore
diff --git a/docs/docs/api_reference/storage/kvstore/firestore.md b/docs/docs/api_reference/storage/kvstore/firestore.md
new file mode 100644
index 0000000000000000000000000000000000000000..be0c036c100e39b8be69830850c0650299627b2e
--- /dev/null
+++ b/docs/docs/api_reference/storage/kvstore/firestore.md
@@ -0,0 +1,4 @@
+::: llama_index.storage.kvstore.firestore
+    options:
+      members:
+        - FirestoreKVStore
diff --git a/docs/docs/api_reference/storage/kvstore/index.md b/docs/docs/api_reference/storage/kvstore/index.md
new file mode 100644
index 0000000000000000000000000000000000000000..9a6bd621bfd10e80c467c4f51742663d4db4f1b4
--- /dev/null
+++ b/docs/docs/api_reference/storage/kvstore/index.md
@@ -0,0 +1 @@
+::: llama_index.core.storage.kvstore.types
diff --git a/docs/docs/api_reference/storage/kvstore/mongodb.md b/docs/docs/api_reference/storage/kvstore/mongodb.md
new file mode 100644
index 0000000000000000000000000000000000000000..40d22577b82504e8a7a79f2243f186ae3e80b8f3
--- /dev/null
+++ b/docs/docs/api_reference/storage/kvstore/mongodb.md
@@ -0,0 +1,4 @@
+::: llama_index.storage.kvstore.mongodb
+    options:
+      members:
+        - MongoDBKVStore
diff --git a/docs/docs/api_reference/storage/kvstore/postgres.md b/docs/docs/api_reference/storage/kvstore/postgres.md
new file mode 100644
index 0000000000000000000000000000000000000000..58c4d9506b715838d23c4080080e0287d0cbd4f2
--- /dev/null
+++ b/docs/docs/api_reference/storage/kvstore/postgres.md
@@ -0,0 +1,4 @@
+::: llama_index.storage.kvstore.postgres
+    options:
+      members:
+        - PostgresKVStore
diff --git a/docs/docs/api_reference/storage/kvstore/redis.md b/docs/docs/api_reference/storage/kvstore/redis.md
new file mode 100644
index 0000000000000000000000000000000000000000..9d26b914dab720218475d97931dbbd716a46f6b4
--- /dev/null
+++ b/docs/docs/api_reference/storage/kvstore/redis.md
@@ -0,0 +1,4 @@
+::: llama_index.storage.kvstore.redis
+    options:
+      members:
+        - RedisKVStore
diff --git a/docs/docs/api_reference/storage/kvstore/s3.md b/docs/docs/api_reference/storage/kvstore/s3.md
new file mode 100644
index 0000000000000000000000000000000000000000..a2013198a78917e0ec6b303d6641d7cff6d026f5
--- /dev/null
+++ b/docs/docs/api_reference/storage/kvstore/s3.md
@@ -0,0 +1,4 @@
+::: llama_index.storage.kvstore.s3
+    options:
+      members:
+        - S3DBKVStore
diff --git a/docs/docs/api_reference/storage/kvstore/simple.md b/docs/docs/api_reference/storage/kvstore/simple.md
new file mode 100644
index 0000000000000000000000000000000000000000..687787325c1484d6202c85754c9b28261432d8b5
--- /dev/null
+++ b/docs/docs/api_reference/storage/kvstore/simple.md
@@ -0,0 +1,4 @@
+::: llama_index.core.storage.kvstore
+    options:
+      members:
+        - SimpleKVStore
diff --git a/docs/docs/api_reference/storage/storage_context.md b/docs/docs/api_reference/storage/storage_context.md
new file mode 100644
index 0000000000000000000000000000000000000000..ca0f6e260c988c093738f5ca5c5e50d2211f5301
--- /dev/null
+++ b/docs/docs/api_reference/storage/storage_context.md
@@ -0,0 +1,10 @@
+::: llama_index.core.storage.storage_context
+    options:
+      members:
+        - StorageContext
+
+::: llama_index.core
+    options:
+      members:
+        - load_index_from_storage
+        - load_indices_from_storage
diff --git a/docs/docs/api_reference/storage/vector_store/astra_db.md b/docs/docs/api_reference/storage/vector_store/astra_db.md
new file mode 100644
index 0000000000000000000000000000000000000000..cc2a34a3601b85df46b81895ae1dad043b8e116a
--- /dev/null
+++ b/docs/docs/api_reference/storage/vector_store/astra_db.md
@@ -0,0 +1,4 @@
+::: llama_index.vector_stores.astra_db
+    options:
+      members:
+        - AstraDBVectorStore
diff --git a/docs/docs/api_reference/storage/vector_store/awadb.md b/docs/docs/api_reference/storage/vector_store/awadb.md
new file mode 100644
index 0000000000000000000000000000000000000000..18c6d661141a680cb3f296e36c68176d31347dd2
--- /dev/null
+++ b/docs/docs/api_reference/storage/vector_store/awadb.md
@@ -0,0 +1,4 @@
+::: llama_index.vector_stores.awadb
+    options:
+      members:
+        - AwaDBVectorStore
diff --git a/docs/docs/api_reference/storage/vector_store/azureaisearch.md b/docs/docs/api_reference/storage/vector_store/azureaisearch.md
new file mode 100644
index 0000000000000000000000000000000000000000..a1acd7a0db42fdd0b1fb85e19766a17f8c884cf5
--- /dev/null
+++ b/docs/docs/api_reference/storage/vector_store/azureaisearch.md
@@ -0,0 +1,5 @@
+::: llama_index.vector_stores.azureaisearch
+    options:
+      members:
+        - AzureAISearchVectorStore
+        - CognitiveSearchVectorStore
diff --git a/docs/docs/api_reference/storage/vector_store/azurecosmosmongo.md b/docs/docs/api_reference/storage/vector_store/azurecosmosmongo.md
new file mode 100644
index 0000000000000000000000000000000000000000..e3208fc943b3ea51088f4d3e785abec789f43b84
--- /dev/null
+++ b/docs/docs/api_reference/storage/vector_store/azurecosmosmongo.md
@@ -0,0 +1,4 @@
+::: llama_index.vector_stores.azurecosmosmongo
+    options:
+      members:
+        - AzureCosmosDBMongoDBVectorSearch
diff --git a/docs/docs/api_reference/storage/vector_store/bagel.md b/docs/docs/api_reference/storage/vector_store/bagel.md
new file mode 100644
index 0000000000000000000000000000000000000000..439d94ba03ab39cbb75c59ffa30edecf4cb193f8
--- /dev/null
+++ b/docs/docs/api_reference/storage/vector_store/bagel.md
@@ -0,0 +1,4 @@
+::: llama_index.vector_stores.bagel
+    options:
+      members:
+        - BagelVectorStore
diff --git a/docs/docs/api_reference/storage/vector_store/baiduvectordb.md b/docs/docs/api_reference/storage/vector_store/baiduvectordb.md
new file mode 100644
index 0000000000000000000000000000000000000000..1db993e7176bbdf18529febf41278e148c0972a5
--- /dev/null
+++ b/docs/docs/api_reference/storage/vector_store/baiduvectordb.md
@@ -0,0 +1,4 @@
+::: llama_index.vector_stores.baiduvectordb
+    options:
+      members:
+        - BaiduVectorDB
diff --git a/docs/docs/api_reference/storage/vector_store/cassandra.md b/docs/docs/api_reference/storage/vector_store/cassandra.md
new file mode 100644
index 0000000000000000000000000000000000000000..d340a58d8ba5237037a3ee74e87a2f8ca8f7a00f
--- /dev/null
+++ b/docs/docs/api_reference/storage/vector_store/cassandra.md
@@ -0,0 +1,4 @@
+::: llama_index.vector_stores.cassandra
+    options:
+      members:
+        - CassandraVectorStore
diff --git a/docs/docs/api_reference/storage/vector_store/chatgpt_plugin.md b/docs/docs/api_reference/storage/vector_store/chatgpt_plugin.md
new file mode 100644
index 0000000000000000000000000000000000000000..76a756c480190a3eaef63bbf41e265fc24e35103
--- /dev/null
+++ b/docs/docs/api_reference/storage/vector_store/chatgpt_plugin.md
@@ -0,0 +1,4 @@
+::: llama_index.vector_stores.chatgpt_plugin
+    options:
+      members:
+        - ChatGPTRetrievalPluginClient
diff --git a/docs/docs/api_reference/storage/vector_store/chroma.md b/docs/docs/api_reference/storage/vector_store/chroma.md
new file mode 100644
index 0000000000000000000000000000000000000000..808aeb5f89693308bec1e838703ae74cad8e261c
--- /dev/null
+++ b/docs/docs/api_reference/storage/vector_store/chroma.md
@@ -0,0 +1,4 @@
+::: llama_index.vector_stores.chroma
+    options:
+      members:
+        - ChromaVectorStore
diff --git a/docs/docs/api_reference/storage/vector_store/clickhouse.md b/docs/docs/api_reference/storage/vector_store/clickhouse.md
new file mode 100644
index 0000000000000000000000000000000000000000..95060b04c5679701bcfd61ab2207cd94877949af
--- /dev/null
+++ b/docs/docs/api_reference/storage/vector_store/clickhouse.md
@@ -0,0 +1,4 @@
+::: llama_index.vector_stores.clickhouse
+    options:
+      members:
+        - ClickHouseVectorStore
diff --git a/docs/docs/api_reference/storage/vector_store/dashvector.md b/docs/docs/api_reference/storage/vector_store/dashvector.md
new file mode 100644
index 0000000000000000000000000000000000000000..07170183cfb921c22440563582c084d7d5e6dd77
--- /dev/null
+++ b/docs/docs/api_reference/storage/vector_store/dashvector.md
@@ -0,0 +1,4 @@
+::: llama_index.vector_stores.dashvector
+    options:
+      members:
+        - DashVectorStore
diff --git a/docs/docs/api_reference/storage/vector_store/databricks.md b/docs/docs/api_reference/storage/vector_store/databricks.md
new file mode 100644
index 0000000000000000000000000000000000000000..28806b8812ef1b644dc04237edf9d138b5d4ba20
--- /dev/null
+++ b/docs/docs/api_reference/storage/vector_store/databricks.md
@@ -0,0 +1,4 @@
+::: llama_index.vector_stores.databricks
+    options:
+      members:
+        - DatabricksVectorSearch
diff --git a/docs/docs/api_reference/storage/vector_store/deeplake.md b/docs/docs/api_reference/storage/vector_store/deeplake.md
new file mode 100644
index 0000000000000000000000000000000000000000..c2b05684b9db920793a0dc780850eb5d00e8e6f4
--- /dev/null
+++ b/docs/docs/api_reference/storage/vector_store/deeplake.md
@@ -0,0 +1,4 @@
+::: llama_index.vector_stores.deeplake
+    options:
+      members:
+        - DeepLakeVectorStore
diff --git a/docs/docs/api_reference/storage/vector_store/docarray.md b/docs/docs/api_reference/storage/vector_store/docarray.md
new file mode 100644
index 0000000000000000000000000000000000000000..0ad4a194f26680b8c109f5f9ff8c4375d3f561ba
--- /dev/null
+++ b/docs/docs/api_reference/storage/vector_store/docarray.md
@@ -0,0 +1,5 @@
+::: llama_index.vector_stores.docarray
+    options:
+      members:
+        - DocArrayHnswVectorStore
+        - DocArrayInMemoryVectorStore
diff --git a/docs/docs/api_reference/storage/vector_store/duckdb.md b/docs/docs/api_reference/storage/vector_store/duckdb.md
new file mode 100644
index 0000000000000000000000000000000000000000..4027451bcf03e4e37ec1cb57328d4268f575ff71
--- /dev/null
+++ b/docs/docs/api_reference/storage/vector_store/duckdb.md
@@ -0,0 +1,4 @@
+::: llama_index.vector_stores.duckdb
+    options:
+      members:
+        - DuckDBVectorStore
diff --git a/docs/docs/api_reference/storage/vector_store/dynamodb.md b/docs/docs/api_reference/storage/vector_store/dynamodb.md
new file mode 100644
index 0000000000000000000000000000000000000000..803443512a8d0db713ab54ce30daf529c1a5065e
--- /dev/null
+++ b/docs/docs/api_reference/storage/vector_store/dynamodb.md
@@ -0,0 +1,4 @@
+::: llama_index.vector_stores.dynamodb
+    options:
+      members:
+        - DynamoDBVectorStore
diff --git a/docs/docs/api_reference/storage/vector_store/elasticsearch.md b/docs/docs/api_reference/storage/vector_store/elasticsearch.md
new file mode 100644
index 0000000000000000000000000000000000000000..8a6e63b8cf7dfeaeb6915069e417ff32562e9d00
--- /dev/null
+++ b/docs/docs/api_reference/storage/vector_store/elasticsearch.md
@@ -0,0 +1,4 @@
+::: llama_index.vector_stores.elasticsearch
+    options:
+      members:
+        - ElasticsearchStore
diff --git a/docs/docs/api_reference/storage/vector_store/epsilla.md b/docs/docs/api_reference/storage/vector_store/epsilla.md
new file mode 100644
index 0000000000000000000000000000000000000000..1ef6af0468ba5c83ad8616fd047305b4213227c2
--- /dev/null
+++ b/docs/docs/api_reference/storage/vector_store/epsilla.md
@@ -0,0 +1,4 @@
+::: llama_index.vector_stores.epsilla
+    options:
+      members:
+        - EpsillaVectorStore
diff --git a/docs/docs/api_reference/storage/vector_store/faiss.md b/docs/docs/api_reference/storage/vector_store/faiss.md
new file mode 100644
index 0000000000000000000000000000000000000000..506b92e5e454cd2d09b924f620dc9b22f89a9e3e
--- /dev/null
+++ b/docs/docs/api_reference/storage/vector_store/faiss.md
@@ -0,0 +1,4 @@
+::: llama_index.vector_stores.faiss
+    options:
+      members:
+        - FaissVectorStore
diff --git a/docs/docs/api_reference/storage/vector_store/google.md b/docs/docs/api_reference/storage/vector_store/google.md
new file mode 100644
index 0000000000000000000000000000000000000000..7df120054cd53f159a9196a9132aa7b1c5c66eeb
--- /dev/null
+++ b/docs/docs/api_reference/storage/vector_store/google.md
@@ -0,0 +1,4 @@
+::: llama_index.vector_stores.google
+    options:
+      members:
+        - GoogleVectorStore
diff --git a/docs/docs/api_reference/storage/vector_store/index.md b/docs/docs/api_reference/storage/vector_store/index.md
new file mode 100644
index 0000000000000000000000000000000000000000..3788d660894b98e477bb25c8f4e9ce36d4adab91
--- /dev/null
+++ b/docs/docs/api_reference/storage/vector_store/index.md
@@ -0,0 +1 @@
+::: llama_index.core.vector_stores.types
diff --git a/docs/docs/api_reference/storage/vector_store/jaguar.md b/docs/docs/api_reference/storage/vector_store/jaguar.md
new file mode 100644
index 0000000000000000000000000000000000000000..3172e0bc5c79c2938ae36e2dc7a3858f7c08d23c
--- /dev/null
+++ b/docs/docs/api_reference/storage/vector_store/jaguar.md
@@ -0,0 +1,4 @@
+::: llama_index.vector_stores.jaguar
+    options:
+      members:
+        - JaguarVectorStore
diff --git a/docs/docs/api_reference/storage/vector_store/lancedb.md b/docs/docs/api_reference/storage/vector_store/lancedb.md
new file mode 100644
index 0000000000000000000000000000000000000000..61e97f04829c81c62ff5872a3b457bac48185766
--- /dev/null
+++ b/docs/docs/api_reference/storage/vector_store/lancedb.md
@@ -0,0 +1,4 @@
+::: llama_index.vector_stores.lancedb
+    options:
+      members:
+        - LanceDBVectorStore
diff --git a/docs/docs/api_reference/storage/vector_store/lantern.md b/docs/docs/api_reference/storage/vector_store/lantern.md
new file mode 100644
index 0000000000000000000000000000000000000000..4648d8f9b42fdc6d4e673a96f2315a0ccb274592
--- /dev/null
+++ b/docs/docs/api_reference/storage/vector_store/lantern.md
@@ -0,0 +1,4 @@
+::: llama_index.vector_stores.lantern
+    options:
+      members:
+        - LanternVectorStore
diff --git a/docs/docs/api_reference/storage/vector_store/metal.md b/docs/docs/api_reference/storage/vector_store/metal.md
new file mode 100644
index 0000000000000000000000000000000000000000..7d68ffa95fc716fe5f74d71a3e9a8175f5dc7927
--- /dev/null
+++ b/docs/docs/api_reference/storage/vector_store/metal.md
@@ -0,0 +1,4 @@
+::: llama_index.vector_stores.metal
+    options:
+      members:
+        - MetalVectorStore
diff --git a/docs/docs/api_reference/storage/vector_store/milvus.md b/docs/docs/api_reference/storage/vector_store/milvus.md
new file mode 100644
index 0000000000000000000000000000000000000000..7b0eca2344dbf2f17da0cab04601db9f32d8882b
--- /dev/null
+++ b/docs/docs/api_reference/storage/vector_store/milvus.md
@@ -0,0 +1,4 @@
+::: llama_index.vector_stores.milvus
+    options:
+      members:
+        - MilvusVectorStore
diff --git a/docs/docs/api_reference/storage/vector_store/mongodb.md b/docs/docs/api_reference/storage/vector_store/mongodb.md
new file mode 100644
index 0000000000000000000000000000000000000000..cd90659e92e62339e45e814e4dfe6aa8cc1eb171
--- /dev/null
+++ b/docs/docs/api_reference/storage/vector_store/mongodb.md
@@ -0,0 +1,4 @@
+::: llama_index.vector_stores.mongodb
+    options:
+      members:
+        - MongoDBAtlasVectorSearch
diff --git a/docs/docs/api_reference/storage/vector_store/myscale.md b/docs/docs/api_reference/storage/vector_store/myscale.md
new file mode 100644
index 0000000000000000000000000000000000000000..605595d2f0969942898003c5b8e44000a29540bb
--- /dev/null
+++ b/docs/docs/api_reference/storage/vector_store/myscale.md
@@ -0,0 +1,4 @@
+::: llama_index.vector_stores.myscale
+    options:
+      members:
+        - MyScaleVectorStore
diff --git a/docs/docs/api_reference/storage/vector_store/neo4jvector.md b/docs/docs/api_reference/storage/vector_store/neo4jvector.md
new file mode 100644
index 0000000000000000000000000000000000000000..554d048e98a3ca0268668636b9c59006464b6d81
--- /dev/null
+++ b/docs/docs/api_reference/storage/vector_store/neo4jvector.md
@@ -0,0 +1,4 @@
+::: llama_index.vector_stores.neo4jvector
+    options:
+      members:
+        - Neo4jVectorStore
diff --git a/docs/docs/api_reference/storage/vector_store/opensearch.md b/docs/docs/api_reference/storage/vector_store/opensearch.md
new file mode 100644
index 0000000000000000000000000000000000000000..1e4b44ec6341dd51d58750aeafc652125870f289
--- /dev/null
+++ b/docs/docs/api_reference/storage/vector_store/opensearch.md
@@ -0,0 +1,4 @@
+::: llama_index.vector_stores.opensearch
+    options:
+      members:
+        - OpensearchVectorStore
diff --git a/docs/docs/api_reference/storage/vector_store/pgvecto_rs.md b/docs/docs/api_reference/storage/vector_store/pgvecto_rs.md
new file mode 100644
index 0000000000000000000000000000000000000000..b79974b6688f3972cf1cf3729a6442f735961484
--- /dev/null
+++ b/docs/docs/api_reference/storage/vector_store/pgvecto_rs.md
@@ -0,0 +1,4 @@
+::: llama_index.vector_stores.pgvecto_rs
+    options:
+      members:
+        - PGVectoRsStore
diff --git a/docs/docs/api_reference/storage/vector_store/pinecone.md b/docs/docs/api_reference/storage/vector_store/pinecone.md
new file mode 100644
index 0000000000000000000000000000000000000000..eab5be5bb35894a3bbf43ea70fa2fb127b5b06fc
--- /dev/null
+++ b/docs/docs/api_reference/storage/vector_store/pinecone.md
@@ -0,0 +1,4 @@
+::: llama_index.vector_stores.pinecone
+    options:
+      members:
+        - PineconeVectorStore
diff --git a/docs/docs/api_reference/storage/vector_store/postgres.md b/docs/docs/api_reference/storage/vector_store/postgres.md
new file mode 100644
index 0000000000000000000000000000000000000000..f29d4590fb52378bce5e54c338eec94fd7ab1d32
--- /dev/null
+++ b/docs/docs/api_reference/storage/vector_store/postgres.md
@@ -0,0 +1,4 @@
+::: llama_index.vector_stores.postgres
+    options:
+      members:
+        - PGVectorStore
diff --git a/docs/docs/api_reference/storage/vector_store/qdrant.md b/docs/docs/api_reference/storage/vector_store/qdrant.md
new file mode 100644
index 0000000000000000000000000000000000000000..46568006c34d31a56e87db66b658249b4c228b83
--- /dev/null
+++ b/docs/docs/api_reference/storage/vector_store/qdrant.md
@@ -0,0 +1,4 @@
+::: llama_index.vector_stores.qdrant
+    options:
+      members:
+        - QdrantVectorStore
diff --git a/docs/docs/api_reference/storage/vector_store/redis.md b/docs/docs/api_reference/storage/vector_store/redis.md
new file mode 100644
index 0000000000000000000000000000000000000000..92e937765c2976bba8a932c68b3888f7c90757fa
--- /dev/null
+++ b/docs/docs/api_reference/storage/vector_store/redis.md
@@ -0,0 +1,4 @@
+::: llama_index.vector_stores.redis
+    options:
+      members:
+        - RedisVectorStore
diff --git a/docs/docs/api_reference/storage/vector_store/rocksetdb.md b/docs/docs/api_reference/storage/vector_store/rocksetdb.md
new file mode 100644
index 0000000000000000000000000000000000000000..365a4700e223b622add53e6f2027ff39675894e7
--- /dev/null
+++ b/docs/docs/api_reference/storage/vector_store/rocksetdb.md
@@ -0,0 +1,4 @@
+::: llama_index.vector_stores.rocksetdb
+    options:
+      members:
+        - RocksetVectorStore
diff --git a/docs/docs/api_reference/storage/vector_store/simple.md b/docs/docs/api_reference/storage/vector_store/simple.md
new file mode 100644
index 0000000000000000000000000000000000000000..aa4dbadcd55c85e01c59e5436fc6cdf8fe47f068
--- /dev/null
+++ b/docs/docs/api_reference/storage/vector_store/simple.md
@@ -0,0 +1,4 @@
+::: llama_index.core.vector_stores.simple
+    options:
+      members:
+        - SimpleVectorStore
diff --git a/docs/docs/api_reference/storage/vector_store/singlestoredb.md b/docs/docs/api_reference/storage/vector_store/singlestoredb.md
new file mode 100644
index 0000000000000000000000000000000000000000..7e320c4588c63c842c5aa47a3102599daf7826f1
--- /dev/null
+++ b/docs/docs/api_reference/storage/vector_store/singlestoredb.md
@@ -0,0 +1,4 @@
+::: llama_index.vector_stores.singlestoredb
+    options:
+      members:
+        - SingleStoreVectorStore
diff --git a/docs/docs/api_reference/storage/vector_store/supabase.md b/docs/docs/api_reference/storage/vector_store/supabase.md
new file mode 100644
index 0000000000000000000000000000000000000000..dacd27281e38a51183d1afc83ab5888030f354b0
--- /dev/null
+++ b/docs/docs/api_reference/storage/vector_store/supabase.md
@@ -0,0 +1,4 @@
+::: llama_index.vector_stores.supabase
+    options:
+      members:
+        - SupabaseVectorStore
diff --git a/docs/docs/api_reference/storage/vector_store/tair.md b/docs/docs/api_reference/storage/vector_store/tair.md
new file mode 100644
index 0000000000000000000000000000000000000000..e4931c57e26726934cc7ae7e8824d8a1dd2b4c26
--- /dev/null
+++ b/docs/docs/api_reference/storage/vector_store/tair.md
@@ -0,0 +1,4 @@
+::: llama_index.vector_stores.tair
+    options:
+      members:
+        - TairVectorStore
diff --git a/docs/docs/api_reference/storage/vector_store/tencentvectordb.md b/docs/docs/api_reference/storage/vector_store/tencentvectordb.md
new file mode 100644
index 0000000000000000000000000000000000000000..71b6f40101c4f42bbf4109f7f67e247463d452d0
--- /dev/null
+++ b/docs/docs/api_reference/storage/vector_store/tencentvectordb.md
@@ -0,0 +1,4 @@
+::: llama_index.vector_stores.tencentvectordb
+    options:
+      members:
+        - TencentVectorDB
diff --git a/docs/docs/api_reference/storage/vector_store/tidbvector.md b/docs/docs/api_reference/storage/vector_store/tidbvector.md
new file mode 100644
index 0000000000000000000000000000000000000000..8f091bb33b841ae45b35a0760e114bf1a89cd1e6
--- /dev/null
+++ b/docs/docs/api_reference/storage/vector_store/tidbvector.md
@@ -0,0 +1,4 @@
+::: llama_index.vector_stores.tidbvector
+    options:
+      members:
+        - TiDBVectorStore
diff --git a/docs/docs/api_reference/storage/vector_store/timescalevector.md b/docs/docs/api_reference/storage/vector_store/timescalevector.md
new file mode 100644
index 0000000000000000000000000000000000000000..d63e36d36fdec2f24b4e612b49e0acd3124bae93
--- /dev/null
+++ b/docs/docs/api_reference/storage/vector_store/timescalevector.md
@@ -0,0 +1,4 @@
+::: llama_index.vector_stores.timescalevector
+    options:
+      members:
+        - TimescaleVectorStore
diff --git a/docs/docs/api_reference/storage/vector_store/txtai.md b/docs/docs/api_reference/storage/vector_store/txtai.md
new file mode 100644
index 0000000000000000000000000000000000000000..bc03ae558d691e71ded8ce6be00440f0e0cc82ea
--- /dev/null
+++ b/docs/docs/api_reference/storage/vector_store/txtai.md
@@ -0,0 +1,4 @@
+::: llama_index.vector_stores.txtai
+    options:
+      members:
+        - TxtaiVectorStore
diff --git a/docs/docs/api_reference/storage/vector_store/typesense.md b/docs/docs/api_reference/storage/vector_store/typesense.md
new file mode 100644
index 0000000000000000000000000000000000000000..2fd22331dfbb5aedcb66650611a212328d9f30b8
--- /dev/null
+++ b/docs/docs/api_reference/storage/vector_store/typesense.md
@@ -0,0 +1,4 @@
+::: llama_index.vector_stores.typesense
+    options:
+      members:
+        - TypesenseVectorStore
diff --git a/docs/docs/api_reference/storage/vector_store/upstash.md b/docs/docs/api_reference/storage/vector_store/upstash.md
new file mode 100644
index 0000000000000000000000000000000000000000..1f9be5197348b83a091314dfdbe2b0ea17783fd1
--- /dev/null
+++ b/docs/docs/api_reference/storage/vector_store/upstash.md
@@ -0,0 +1,4 @@
+::: llama_index.vector_stores.upstash
+    options:
+      members:
+        - UpstashVectorStore
diff --git a/docs/docs/api_reference/storage/vector_store/weaviate.md b/docs/docs/api_reference/storage/vector_store/weaviate.md
new file mode 100644
index 0000000000000000000000000000000000000000..ba6220c4d1135e18526b108ac742322b1014217d
--- /dev/null
+++ b/docs/docs/api_reference/storage/vector_store/weaviate.md
@@ -0,0 +1,4 @@
+::: llama_index.vector_stores.weaviate
+    options:
+      members:
+        - WeaviateVectorStore
diff --git a/docs/docs/api_reference/storage/vector_store/zep.md b/docs/docs/api_reference/storage/vector_store/zep.md
new file mode 100644
index 0000000000000000000000000000000000000000..ffcdba15338dfc47c9283667b90c8f66a5c9b8a9
--- /dev/null
+++ b/docs/docs/api_reference/storage/vector_store/zep.md
@@ -0,0 +1,4 @@
+::: llama_index.vector_stores.zep
+    options:
+      members:
+        - ZepVectorStore
diff --git a/docs/docs/api_reference/tools/arxiv.md b/docs/docs/api_reference/tools/arxiv.md
new file mode 100644
index 0000000000000000000000000000000000000000..2b4a3fc749f4d048c2ea6204c892209ebea3eb98
--- /dev/null
+++ b/docs/docs/api_reference/tools/arxiv.md
@@ -0,0 +1,4 @@
+::: llama_index.tools.arxiv
+    options:
+      members:
+        - ArxivToolSpec
diff --git a/docs/docs/api_reference/tools/azure_cv.md b/docs/docs/api_reference/tools/azure_cv.md
new file mode 100644
index 0000000000000000000000000000000000000000..3fb4214c7ed2b451df9586d4583e5165db32258c
--- /dev/null
+++ b/docs/docs/api_reference/tools/azure_cv.md
@@ -0,0 +1,4 @@
+::: llama_index.tools.azure_cv
+    options:
+      members:
+        - AzureCVToolSpec
diff --git a/docs/docs/api_reference/tools/azure_speech.md b/docs/docs/api_reference/tools/azure_speech.md
new file mode 100644
index 0000000000000000000000000000000000000000..c1a080368716b8002a0030cddc06c896fb148aae
--- /dev/null
+++ b/docs/docs/api_reference/tools/azure_speech.md
@@ -0,0 +1,4 @@
+::: llama_index.tools.azure_speech
+    options:
+      members:
+        - AzureSpeechToolSpec
diff --git a/docs/docs/api_reference/tools/azure_translate.md b/docs/docs/api_reference/tools/azure_translate.md
new file mode 100644
index 0000000000000000000000000000000000000000..9293f065b3de98115a89c139d3cd943c59689e71
--- /dev/null
+++ b/docs/docs/api_reference/tools/azure_translate.md
@@ -0,0 +1,4 @@
+::: llama_index.tools.azure_translate
+    options:
+      members:
+        - AzureTranslateToolSpec
diff --git a/docs/docs/api_reference/tools/bing_search.md b/docs/docs/api_reference/tools/bing_search.md
new file mode 100644
index 0000000000000000000000000000000000000000..db9f58b998e05a0ae5b4bbd1f1e71943bd1302be
--- /dev/null
+++ b/docs/docs/api_reference/tools/bing_search.md
@@ -0,0 +1,4 @@
+::: llama_index.tools.bing_search
+    options:
+      members:
+        - BingSearchToolSpec
diff --git a/docs/docs/api_reference/tools/brave_search.md b/docs/docs/api_reference/tools/brave_search.md
new file mode 100644
index 0000000000000000000000000000000000000000..64466a160145bf1459ca20e9229319793f4a4b4d
--- /dev/null
+++ b/docs/docs/api_reference/tools/brave_search.md
@@ -0,0 +1,4 @@
+::: llama_index.tools.brave_search
+    options:
+      members:
+        - BraveSearchToolSpec
diff --git a/docs/docs/api_reference/tools/chatgpt_plugin.md b/docs/docs/api_reference/tools/chatgpt_plugin.md
new file mode 100644
index 0000000000000000000000000000000000000000..355baa269b5f919f13276d6e1e850850e8a6acb8
--- /dev/null
+++ b/docs/docs/api_reference/tools/chatgpt_plugin.md
@@ -0,0 +1,4 @@
+::: llama_index.tools.chatgpt_plugin
+    options:
+      members:
+        - ChatGPTPluginToolSpec
diff --git a/docs/docs/api_reference/tools/code_interpreter.md b/docs/docs/api_reference/tools/code_interpreter.md
new file mode 100644
index 0000000000000000000000000000000000000000..e3fa46ba542a11f7e57d6be7b26f163b5dca796c
--- /dev/null
+++ b/docs/docs/api_reference/tools/code_interpreter.md
@@ -0,0 +1,4 @@
+::: llama_index.tools.code_interpreter
+    options:
+      members:
+        - CodeInterpreterToolSpec
diff --git a/docs/docs/api_reference/tools/cogniswitch.md b/docs/docs/api_reference/tools/cogniswitch.md
new file mode 100644
index 0000000000000000000000000000000000000000..709c7ef9e4dd22946d2fb1d95828bbb1bb963e64
--- /dev/null
+++ b/docs/docs/api_reference/tools/cogniswitch.md
@@ -0,0 +1,4 @@
+::: llama_index.tools.cogniswitch
+    options:
+      members:
+        - CogniswitchToolSpec
diff --git a/docs/docs/api_reference/tools/database.md b/docs/docs/api_reference/tools/database.md
new file mode 100644
index 0000000000000000000000000000000000000000..07504dcad16ce033453209dae761505727fcd499
--- /dev/null
+++ b/docs/docs/api_reference/tools/database.md
@@ -0,0 +1,4 @@
+::: llama_index.tools.database
+    options:
+      members:
+        - DatabaseToolSpec
diff --git a/docs/docs/api_reference/tools/duckduckgo.md b/docs/docs/api_reference/tools/duckduckgo.md
new file mode 100644
index 0000000000000000000000000000000000000000..5d48014c22505992c57c236c0a706f823adf94aa
--- /dev/null
+++ b/docs/docs/api_reference/tools/duckduckgo.md
@@ -0,0 +1,4 @@
+::: llama_index.tools.duckduckgo
+    options:
+      members:
+        - DuckDuckGoSearchToolSpec
diff --git a/docs/docs/api_reference/tools/exa.md b/docs/docs/api_reference/tools/exa.md
new file mode 100644
index 0000000000000000000000000000000000000000..b4aa40d5e2d4d5142e21e83d58a1ca1d78255f8f
--- /dev/null
+++ b/docs/docs/api_reference/tools/exa.md
@@ -0,0 +1,4 @@
+::: llama_index.tools.exa
+    options:
+      members:
+        - ExaToolSpec
diff --git a/docs/docs/api_reference/tools/finance.md b/docs/docs/api_reference/tools/finance.md
new file mode 100644
index 0000000000000000000000000000000000000000..185d816feff18846072b1907c15972a1882847cf
--- /dev/null
+++ b/docs/docs/api_reference/tools/finance.md
@@ -0,0 +1,4 @@
+::: llama_index.tools.finance
+    options:
+      members:
+        - FinanceAgentToolSpec
diff --git a/docs/docs/api_reference/tools/function.md b/docs/docs/api_reference/tools/function.md
new file mode 100644
index 0000000000000000000000000000000000000000..116e4227ef84b8c40d1b29ae0741163409e2e7bb
--- /dev/null
+++ b/docs/docs/api_reference/tools/function.md
@@ -0,0 +1,4 @@
+::: llama_index.core.tools.function_tool
+    options:
+      members:
+        - FunctionTool
diff --git a/docs/docs/api_reference/tools/google.md b/docs/docs/api_reference/tools/google.md
new file mode 100644
index 0000000000000000000000000000000000000000..6d854217c50954078a94f89a6e00e9314c689130
--- /dev/null
+++ b/docs/docs/api_reference/tools/google.md
@@ -0,0 +1,6 @@
+::: llama_index.tools.google
+    options:
+      members:
+        - GmailToolSpec
+        - GoogleCalendarToolSpec
+        - GoogleSearchToolSpec
diff --git a/docs/docs/api_reference/tools/graphql.md b/docs/docs/api_reference/tools/graphql.md
new file mode 100644
index 0000000000000000000000000000000000000000..b7d3b6f27c74f7f395a2673bcf18dc12795608db
--- /dev/null
+++ b/docs/docs/api_reference/tools/graphql.md
@@ -0,0 +1,4 @@
+::: llama_index.tools.graphql
+    options:
+      members:
+        - GraphQLToolSpec
diff --git a/docs/docs/api_reference/tools/index.md b/docs/docs/api_reference/tools/index.md
new file mode 100644
index 0000000000000000000000000000000000000000..2034149b2f552493715eee753be92de74c900e6b
--- /dev/null
+++ b/docs/docs/api_reference/tools/index.md
@@ -0,0 +1,8 @@
+::: llama_index.core.tools.types
+    options:
+      members:
+        - AsyncBaseTool
+        - BaseToolAsyncAdapter
+        - BaseTool
+        - ToolMetadata
+        - ToolOutput
diff --git a/docs/docs/api_reference/tools/ionic_shopping.md b/docs/docs/api_reference/tools/ionic_shopping.md
new file mode 100644
index 0000000000000000000000000000000000000000..4317cb97eb1283f0b9a9f29b93bcf92af4e5036a
--- /dev/null
+++ b/docs/docs/api_reference/tools/ionic_shopping.md
@@ -0,0 +1,4 @@
+::: llama_index.tools.ionic_shopping
+    options:
+      members:
+        - IonicShoppingToolSpec
diff --git a/docs/docs/api_reference/tools/load_and_search.md b/docs/docs/api_reference/tools/load_and_search.md
new file mode 100644
index 0000000000000000000000000000000000000000..a8e9cfa2d224b5ff0c47542732693b077077076c
--- /dev/null
+++ b/docs/docs/api_reference/tools/load_and_search.md
@@ -0,0 +1,4 @@
+::: llama_index.core.tools.tool_spec.load_and_search.base
+    options:
+      members:
+        - LoadAndSearchToolSpec
diff --git a/docs/docs/api_reference/tools/metaphor.md b/docs/docs/api_reference/tools/metaphor.md
new file mode 100644
index 0000000000000000000000000000000000000000..46f7195d9d60fd3c04da10c193bd535e3a765603
--- /dev/null
+++ b/docs/docs/api_reference/tools/metaphor.md
@@ -0,0 +1,4 @@
+::: llama_index.tools.metaphor
+    options:
+      members:
+        - MetaphorToolSpec
diff --git a/docs/docs/api_reference/tools/multion.md b/docs/docs/api_reference/tools/multion.md
new file mode 100644
index 0000000000000000000000000000000000000000..6ef82f7852fe9bde8dc29e657aeba9183e0206c5
--- /dev/null
+++ b/docs/docs/api_reference/tools/multion.md
@@ -0,0 +1,4 @@
+::: llama_index.tools.multion
+    options:
+      members:
+        - MultionToolSpec
diff --git a/docs/docs/api_reference/tools/neo4j.md b/docs/docs/api_reference/tools/neo4j.md
new file mode 100644
index 0000000000000000000000000000000000000000..9fd2b81cf0ad3f5097092f074b46c83b480c51ff
--- /dev/null
+++ b/docs/docs/api_reference/tools/neo4j.md
@@ -0,0 +1,4 @@
+::: llama_index.tools.neo4j
+    options:
+      members:
+        - Neo4jQueryToolSpec
diff --git a/docs/docs/api_reference/tools/notion.md b/docs/docs/api_reference/tools/notion.md
new file mode 100644
index 0000000000000000000000000000000000000000..abdccd6c70178d88056d5c3f95f5e682c01552d2
--- /dev/null
+++ b/docs/docs/api_reference/tools/notion.md
@@ -0,0 +1,4 @@
+::: llama_index.tools.notion
+    options:
+      members:
+        - NotionToolSpec
diff --git a/docs/docs/api_reference/tools/ondemand_loader.md b/docs/docs/api_reference/tools/ondemand_loader.md
new file mode 100644
index 0000000000000000000000000000000000000000..71ab9b855e9fe249152b08e3a31bbfa2d94f2ef4
--- /dev/null
+++ b/docs/docs/api_reference/tools/ondemand_loader.md
@@ -0,0 +1,4 @@
+::: llama_index.core.tools.ondemand_loader_tool
+    options:
+      members:
+        - OnDemandLoaderTool
diff --git a/docs/docs/api_reference/tools/openai.md b/docs/docs/api_reference/tools/openai.md
new file mode 100644
index 0000000000000000000000000000000000000000..333555e6837acfc985ee503aff3738b02e235a83
--- /dev/null
+++ b/docs/docs/api_reference/tools/openai.md
@@ -0,0 +1,4 @@
+::: llama_index.tools.openai
+    options:
+      members:
+        - OpenAIImageGenerationToolSpec
diff --git a/docs/docs/api_reference/tools/openapi.md b/docs/docs/api_reference/tools/openapi.md
new file mode 100644
index 0000000000000000000000000000000000000000..0e7bd1f42fb9f323c6aaf5b7b0cb850e085edd39
--- /dev/null
+++ b/docs/docs/api_reference/tools/openapi.md
@@ -0,0 +1,4 @@
+::: llama_index.tools.openapi
+    options:
+      members:
+        - OpenAPIToolSpec
diff --git a/docs/docs/api_reference/tools/passio_nutrition_ai.md b/docs/docs/api_reference/tools/passio_nutrition_ai.md
new file mode 100644
index 0000000000000000000000000000000000000000..322464bc0ed19531e31cc13022d897b39ac35590
--- /dev/null
+++ b/docs/docs/api_reference/tools/passio_nutrition_ai.md
@@ -0,0 +1,4 @@
+::: llama_index.tools.passio_nutrition_ai
+    options:
+      members:
+        - NutritionAIToolSpec
diff --git a/docs/docs/api_reference/tools/playgrounds.md b/docs/docs/api_reference/tools/playgrounds.md
new file mode 100644
index 0000000000000000000000000000000000000000..9f4491da62a9777a1a33c7ce82d443ab3e6647ff
--- /dev/null
+++ b/docs/docs/api_reference/tools/playgrounds.md
@@ -0,0 +1,5 @@
+::: llama_index.tools.playgrounds
+    options:
+      members:
+        - PlaygroundsSubgraphConnectorToolSpec
+        - PlaygroundsSubgraphInspectorToolSpec
diff --git a/docs/docs/api_reference/tools/python_file.md b/docs/docs/api_reference/tools/python_file.md
new file mode 100644
index 0000000000000000000000000000000000000000..e0d6b2562242f80ba727b940ac329a95deca78b2
--- /dev/null
+++ b/docs/docs/api_reference/tools/python_file.md
@@ -0,0 +1,4 @@
+::: llama_index.tools.python_file
+    options:
+      members:
+        - PythonFileToolSpec
diff --git a/docs/docs/api_reference/tools/query_engine.md b/docs/docs/api_reference/tools/query_engine.md
new file mode 100644
index 0000000000000000000000000000000000000000..78435b150a662a66178e45f86288bda056ec9c0f
--- /dev/null
+++ b/docs/docs/api_reference/tools/query_engine.md
@@ -0,0 +1 @@
+::: llama_index.core.tools.query_engine
diff --git a/docs/docs/api_reference/tools/query_plan.md b/docs/docs/api_reference/tools/query_plan.md
new file mode 100644
index 0000000000000000000000000000000000000000..78435b150a662a66178e45f86288bda056ec9c0f
--- /dev/null
+++ b/docs/docs/api_reference/tools/query_plan.md
@@ -0,0 +1 @@
+::: llama_index.core.tools.query_engine
diff --git a/docs/docs/api_reference/tools/requests.md b/docs/docs/api_reference/tools/requests.md
new file mode 100644
index 0000000000000000000000000000000000000000..de6f92bf433429fd8b435bb1722fdb02989e28a9
--- /dev/null
+++ b/docs/docs/api_reference/tools/requests.md
@@ -0,0 +1,4 @@
+::: llama_index.tools.requests
+    options:
+      members:
+        - RequestsToolSpec
diff --git a/docs/docs/api_reference/tools/retriever.md b/docs/docs/api_reference/tools/retriever.md
new file mode 100644
index 0000000000000000000000000000000000000000..3de3f185942a3ac31c1cfe13013090ad661047dc
--- /dev/null
+++ b/docs/docs/api_reference/tools/retriever.md
@@ -0,0 +1 @@
+::: llama_index.core.tools.retriever_tool
diff --git a/docs/docs/api_reference/tools/salesforce.md b/docs/docs/api_reference/tools/salesforce.md
new file mode 100644
index 0000000000000000000000000000000000000000..cdabc731c10cbc98d779251698cb8708675bac6a
--- /dev/null
+++ b/docs/docs/api_reference/tools/salesforce.md
@@ -0,0 +1,4 @@
+::: llama_index.tools.salesforce
+    options:
+      members:
+        - SalesforceToolSpec
diff --git a/docs/docs/api_reference/tools/shopify.md b/docs/docs/api_reference/tools/shopify.md
new file mode 100644
index 0000000000000000000000000000000000000000..db09301091bb16ac12c1b067d7d40b6bad9cdd58
--- /dev/null
+++ b/docs/docs/api_reference/tools/shopify.md
@@ -0,0 +1,4 @@
+::: llama_index.tools.shopify
+    options:
+      members:
+        - ShopifyToolSpec
diff --git a/docs/docs/api_reference/tools/slack.md b/docs/docs/api_reference/tools/slack.md
new file mode 100644
index 0000000000000000000000000000000000000000..523be4b94a0d269e9a6cd3d6da72901750e0f104
--- /dev/null
+++ b/docs/docs/api_reference/tools/slack.md
@@ -0,0 +1,4 @@
+::: llama_index.tools.slack
+    options:
+      members:
+        - SlackToolSpec
diff --git a/docs/docs/api_reference/tools/tavily_research.md b/docs/docs/api_reference/tools/tavily_research.md
new file mode 100644
index 0000000000000000000000000000000000000000..f325adc1c1e0eda52891815d6ec3b9a952e76e97
--- /dev/null
+++ b/docs/docs/api_reference/tools/tavily_research.md
@@ -0,0 +1,4 @@
+::: llama_index.tools.tavily_research
+    options:
+      members:
+        - TavilyToolSpec
diff --git a/docs/docs/api_reference/tools/text_to_image.md b/docs/docs/api_reference/tools/text_to_image.md
new file mode 100644
index 0000000000000000000000000000000000000000..477869049c2a71e82df47e8a89bf134a5beac7ac
--- /dev/null
+++ b/docs/docs/api_reference/tools/text_to_image.md
@@ -0,0 +1,4 @@
+::: llama_index.tools.text_to_image
+    options:
+      members:
+        - TextToImageToolSpec
diff --git a/docs/docs/api_reference/tools/tool_spec.md b/docs/docs/api_reference/tools/tool_spec.md
new file mode 100644
index 0000000000000000000000000000000000000000..d6ea9f728754d2956e82560cbd9108bf82389c30
--- /dev/null
+++ b/docs/docs/api_reference/tools/tool_spec.md
@@ -0,0 +1,4 @@
+::: llama_index.core.tools.tool_spec.base
+    options:
+      members:
+        - BaseToolSpec
diff --git a/docs/docs/api_reference/tools/vector_db.md b/docs/docs/api_reference/tools/vector_db.md
new file mode 100644
index 0000000000000000000000000000000000000000..79c5528e23c27c710fa527deb8f06b1f6523bb0c
--- /dev/null
+++ b/docs/docs/api_reference/tools/vector_db.md
@@ -0,0 +1,4 @@
+::: llama_index.tools.vector_db
+    options:
+      members:
+        - VectorDBToolSpec
diff --git a/docs/docs/api_reference/tools/waii.md b/docs/docs/api_reference/tools/waii.md
new file mode 100644
index 0000000000000000000000000000000000000000..3cba2508ffe2fa6002ad3ce3cdddfb09d82d57dc
--- /dev/null
+++ b/docs/docs/api_reference/tools/waii.md
@@ -0,0 +1,4 @@
+::: llama_index.tools.waii
+    options:
+      members:
+        - WaiiToolSpec
diff --git a/docs/docs/api_reference/tools/weather.md b/docs/docs/api_reference/tools/weather.md
new file mode 100644
index 0000000000000000000000000000000000000000..ab67ca65cd70b806625d9e2ca7b36affaae86440
--- /dev/null
+++ b/docs/docs/api_reference/tools/weather.md
@@ -0,0 +1,4 @@
+::: llama_index.tools.weather
+    options:
+      members:
+        - OpenWeatherMapToolSpec
diff --git a/docs/docs/api_reference/tools/wikipedia.md b/docs/docs/api_reference/tools/wikipedia.md
new file mode 100644
index 0000000000000000000000000000000000000000..5236ea3806a6f74a0f39a8f8f5e6d81738863a1f
--- /dev/null
+++ b/docs/docs/api_reference/tools/wikipedia.md
@@ -0,0 +1,4 @@
+::: llama_index.tools.wikipedia
+    options:
+      members:
+        - WikipediaToolSpec
diff --git a/docs/docs/api_reference/tools/wolfram_alpha.md b/docs/docs/api_reference/tools/wolfram_alpha.md
new file mode 100644
index 0000000000000000000000000000000000000000..9289f3e605d97cf186122f19631d36af404a4716
--- /dev/null
+++ b/docs/docs/api_reference/tools/wolfram_alpha.md
@@ -0,0 +1,4 @@
+::: llama_index.tools.wolfram_alpha
+    options:
+      members:
+        - WolframAlphaToolSpec
diff --git a/docs/docs/api_reference/tools/yahoo_finance.md b/docs/docs/api_reference/tools/yahoo_finance.md
new file mode 100644
index 0000000000000000000000000000000000000000..53c3b8875410015ffd75bc751ef3aab7db685e16
--- /dev/null
+++ b/docs/docs/api_reference/tools/yahoo_finance.md
@@ -0,0 +1,4 @@
+::: llama_index.tools.yahoo_finance
+    options:
+      members:
+        - YahooFinanceToolSpec
diff --git a/docs/docs/api_reference/tools/yelp.md b/docs/docs/api_reference/tools/yelp.md
new file mode 100644
index 0000000000000000000000000000000000000000..9a70b8dbca4493642a51af7ab7dfba62be404c6a
--- /dev/null
+++ b/docs/docs/api_reference/tools/yelp.md
@@ -0,0 +1,4 @@
+::: llama_index.tools.yelp
+    options:
+      members:
+        - YelpToolSpec
diff --git a/docs/docs/api_reference/tools/zapier.md b/docs/docs/api_reference/tools/zapier.md
new file mode 100644
index 0000000000000000000000000000000000000000..7415d36f570f9b2733da56309398b61852dff424
--- /dev/null
+++ b/docs/docs/api_reference/tools/zapier.md
@@ -0,0 +1,4 @@
+::: llama_index.tools.zapier
+    options:
+      members:
+        - ZapierToolSpec
diff --git a/docs/changes/deprecated_terms.md b/docs/docs/changes/deprecated_terms.md
similarity index 57%
rename from docs/changes/deprecated_terms.md
rename to docs/docs/changes/deprecated_terms.md
index 0b0f2daa5c7eee00a124e3186d09850a5151b5e6..c0b157307b096ffca8d28c528806272969883a9c 100644
--- a/docs/changes/deprecated_terms.md
+++ b/docs/docs/changes/deprecated_terms.md
@@ -10,24 +10,24 @@ This has been renamed to `VectorStoreIndex`, as well as unifying all vector inde
 
 Please see the following links for more details on usage.
 
-- [Index Usage Pattern](/module_guides/evaluating/usage_pattern.md)
-- [Vector Store Guide](/module_guides/indexing/vector_store_guide.ipynb)
-- [Vector Store Integrations](/community/integrations/vector_stores.md)
+- [Index Usage Pattern](../module_guides/evaluating/usage_pattern.md)
+- [Vector Store Guide](../module_guides/indexing/vector_store_guide.ipynb)
+- [Vector Store Integrations](../community/integrations/vector_stores.md)
 
 ## GPTVectorStoreIndex
 
 This has been renamed to `VectorStoreIndex`, but it is only a cosmetic change. Please see the following links for more details on usage.
 
-- [Index Usage Pattern](/module_guides/evaluating/usage_pattern.md)
-- [Vector Store Guide](/module_guides/indexing/vector_store_guide.ipynb)
-- [Vector Store Integrations](/community/integrations/vector_stores.md)
+- [Index Usage Pattern](../module_guides/evaluating/usage_pattern.md)
+- [Vector Store Guide](../module_guides/indexing/vector_store_guide.ipynb)
+- [Vector Store Integrations](../community/integrations/vector_stores.md)
 
 ## LLMPredictor
 
-The `LLMPredictor` object is no longer intended to be used by users. Instead, you can setup an LLM directly and pass it into the `ServiceContext`. The `LLM` class itself has similar attributes and methods as the `LLMPredictor`.
+The `LLMPredictor` object is no longer intended to be used by users. Instead, you can setup an LLM directly and pass it into the `Settings` or the interface using the LLM. The `LLM` class itself has similar attributes and methods as the `LLMPredictor`.
 
-- [LLMs in LlamaIndex](/module_guides/models/llms.md)
-- [Setting LLMs in the ServiceContext](/module_guides/supporting_modules/service_context.md)
+- [LLMs in LlamaIndex](../module_guides/models/llms.md)
+- [Setting LLMs in the Settings](../module_guides/supporting_modules/settings.md)
 
 ## PromptHelper and max_input_size/
 
@@ -37,5 +37,5 @@ The `PromptHelper` in general has been deprecated in favour of specifying parame
 
 See the following links for more details.
 
-- [Configuring settings in the Service Context](/module_guides/supporting_modules/service_context.md)
-- [Parsing Documents into Nodes](/module_guides/loading/node_parsers/root.md)
+- [Configuring settings in the Settings](../module_guides/supporting_modules/settings.md)
+- [Parsing Documents into Nodes](../module_guides/loading/node_parsers/index.md)
diff --git a/docs/community/faq/chat_engines.md b/docs/docs/community/faq/chat_engines.md
similarity index 98%
rename from docs/community/faq/chat_engines.md
rename to docs/docs/community/faq/chat_engines.md
index e9eb427e997e2b86aea1eb97702e3c641278ce23..61b233f691ee83fd88e7f7199de862d110f01985 100644
--- a/docs/community/faq/chat_engines.md
+++ b/docs/docs/community/faq/chat_engines.md
@@ -9,7 +9,7 @@
 
 ##### 1. How to make bot retain context while answering, Can I do that with LlamaIndex?
 
-Yes you can, Llamaindex provides chat engines that you can use to retain context and answer as per the context. You can find more here [Chat Engines](../../module_guides/deploying/chat_engines/root.md).
+Yes you can, Llamaindex provides chat engines that you can use to retain context and answer as per the context. You can find more here [Chat Engines](../../module_guides/deploying/chat_engines/index.md).
 
 ---
 
diff --git a/docs/community/faq/documents_and_nodes.md b/docs/docs/community/faq/documents_and_nodes.md
similarity index 96%
rename from docs/community/faq/documents_and_nodes.md
rename to docs/docs/community/faq/documents_and_nodes.md
index 88f5897efc1047165866ca713df731c8f31038aa..8ebff447280ac4fe02791afad8900922d7d1c9a2 100644
--- a/docs/community/faq/documents_and_nodes.md
+++ b/docs/docs/community/faq/documents_and_nodes.md
@@ -10,7 +10,7 @@
 
 ##### 1. What is the default `chunk_size` of a Node object?
 
-It's 1024 by default. If you want to customize the `chunk_size`, You can follow [Customizing Node](../../module_guides/loading/node_parsers/root.md#customization)
+It's 1024 by default. If you want to customize the `chunk_size`, You can follow [Customizing Node](../../module_guides/loading/node_parsers/index.md#customization)
 
 ---
 
diff --git a/docs/community/faq/embeddings.md b/docs/docs/community/faq/embeddings.md
similarity index 100%
rename from docs/community/faq/embeddings.md
rename to docs/docs/community/faq/embeddings.md
diff --git a/docs/community/faq/llms.md b/docs/docs/community/faq/llms.md
similarity index 95%
rename from docs/community/faq/llms.md
rename to docs/docs/community/faq/llms.md
index d282b190b287b00517664720eeccc53c5547e6cd..625b12aadf4db855f603ab991d12ed43dd7dff19 100644
--- a/docs/community/faq/llms.md
+++ b/docs/docs/community/faq/llms.md
@@ -25,7 +25,7 @@ To use a different OpenAI model you can access [Configure Model](../../examples/
 
 ##### 3. How can I customize my prompt?
 
-You can access [Prompts](../../module_guides/models/prompts.md) to learn how to customize your prompts.
+You can access [Prompts](../../module_guides/models/prompts/index.md) to learn how to customize your prompts.
 
 ---
 
diff --git a/docs/community/faq/query_engines.md b/docs/docs/community/faq/query_engines.md
similarity index 100%
rename from docs/community/faq/query_engines.md
rename to docs/docs/community/faq/query_engines.md
diff --git a/docs/community/faq/vector_database.md b/docs/docs/community/faq/vector_database.md
similarity index 100%
rename from docs/community/faq/vector_database.md
rename to docs/docs/community/faq/vector_database.md
diff --git a/docs/community/frequently_asked_questions.md b/docs/docs/community/frequently_asked_questions.md
similarity index 65%
rename from docs/community/frequently_asked_questions.md
rename to docs/docs/community/frequently_asked_questions.md
index 159ad9d186d7094ce308814341a741158a7902a4..71b6ef509a2ab7c2175c22180fe1900b60f5a0f6 100644
--- a/docs/community/frequently_asked_questions.md
+++ b/docs/docs/community/frequently_asked_questions.md
@@ -6,88 +6,34 @@
 
 Discover how to tailor LLMs, explore available models, understand cost implications, and switch between languages.
 
-```{toctree}
----
-maxdepth: 1
-hidden: true
----
-faq/llms.md
-
-```
-
 ---
 
 ##### [Embeddings](./faq/embeddings.md)
 
 How to customize the embedding, Which embeddings model choose, their pros and cons
 
-```{toctree}
----
-maxdepth: 1
-hidden: true
----
-faq/embeddings.md
-
-```
-
 ---
 
 ##### [Vector Database](./faq/vector_database.md)
 
 Get insights on personalizing vector databases, delve into database options
 
-```{toctree}
----
-maxdepth: 1
-hidden: true
----
-faq/vector_database.md
-
-```
-
 ---
 
 ##### [Query Engines](./faq/query_engines.md)
 
 Know more about query engines and their possibilities
 
-```{toctree}
----
-maxdepth: 1
-hidden: true
----
-faq/query_engines.md
-
-```
-
 ---
 
 ##### [Chat Engines](./faq/chat_engines.md)
 
 Know more about chat engines and their possibilities
 
-```{toctree}
----
-maxdepth: 1
-hidden: true
----
-faq/chat_engines.md
-
-```
-
 ---
 
 ##### [Documents and Nodes](./faq/documents_and_nodes.md)
 
 Know more about documents and nodes and their possibilities.
 
-```{toctree}
----
-maxdepth: 1
-hidden: true
----
-faq/documents_and_nodes.md
-
-```
-
 ---
diff --git a/docs/docs/community/full_stack_projects.md b/docs/docs/community/full_stack_projects.md
new file mode 100644
index 0000000000000000000000000000000000000000..c76904866ae5040ec1441258d3543405e3b54537
--- /dev/null
+++ b/docs/docs/community/full_stack_projects.md
@@ -0,0 +1,37 @@
+# Full-Stack Projects
+
+We've created both tooling and a variety of example projects (all open-source) to help you get started building a full-stack LLM application.
+
+## create-llama
+
+`create-llama` is a command-line tool that will generate a full-stack application template for you. It supports both FastAPI, Vercel, and Node backends. This is one of the easiest ways to get started!
+
+Resources:
+
+- [create-llama Blog](https://blog.llamaindex.ai/create-llama-a-command-line-tool-to-generate-llamaindex-apps-8f7683021191)
+- [create-llama Repo](https://github.com/run-llama/LlamaIndexTS/tree/main/packages/create-llama)
+- [create-llama Additional Templates](https://github.com/jerryjliu/create_llama_projects)
+
+## Full-Stack Applications
+
+The LlamaIndex team has also built some in-house projects - all of them open-sourced with MIT license - that you can use out of the box, or use as a template to kickstart your own project.
+
+Check them out below.
+
+### SEC Insights
+
+- [SEC Insights App](https://secinsights.ai/)
+- [SEC Insights Repo](https://github.com/run-llama/sec-insights>)
+
+### Chat LlamaIndex
+
+- [Chat LlamaIndex App](https://chat-llamaindex.vercel.app/)
+- [Chat LlamaIndex Repo](https://github.com/run-llama/chat-llamaindex)
+
+### RAGs
+
+[RAGs Repo](https://github.com/run-llama/rags)
+
+### RAG CLI
+
+[RAG CLI](../use_cases/q_and_a/rag_cli.md)
diff --git a/docs/docs/community/integrations.md b/docs/docs/community/integrations.md
new file mode 100644
index 0000000000000000000000000000000000000000..8c812e32e2bd7cf5f5efd2c3a49351a11526d9ce
--- /dev/null
+++ b/docs/docs/community/integrations.md
@@ -0,0 +1,55 @@
+# Integrations
+
+LlamaIndex has a number of community integrations, from vector stores, to prompt trackers, tracers, and more!
+
+## LlamaPacks -- Code Templates
+
+LlamaHub hosts a full suite of LlamaPacks -- templates for features that you can download, edit, and try out! This offers a quick way to learn about new features and try new techniques.
+
+The full set of LlamaPacks is available on [LlamaHub](https://llamahub.ai/). Check out our [dedicated page](llama_packs/index.md).
+
+## Data Loaders
+
+The full set of data loaders are found on [LlamaHub](https://llamahub.ai/)
+
+## Agent Tools
+
+The full set of agent tools are found on [LlamaHub](https://llamahub.ai/)
+
+## LLMs
+
+We support [a huge number of LLMs](../module_guides/models/llms/modules.md).
+
+## Observability/Tracing/Evaluation
+
+Check out our [one-click observability](../module_guides/observability/observability.md) page
+for full tracing integrations.
+
+## Structured Outputs
+
+- [Guidance](integrations/guidance.md)
+- [LLM Format Enforcer](integrations/lmformatenforcer.md)
+- [Guardrails](../examples/output_parsing/GuardrailsDemo.ipynb)
+- [OpenAI Function Calling](../examples/output_parsing/openai_pydantic_program.ipynb)
+
+## Storage and Managed Indexes
+
+- [Vector Stores](integrations/vector_stores.md)
+- [Graph Stores](integrations/graph_stores.md)
+- [Managed Indices](integrations/managed_indices.md)
+
+## Application Frameworks
+
+- [Streamlit](https://blog.streamlit.io/build-a-chatbot-with-custom-data-sources-powered-by-llamaindex/)
+- [Chainlit](https://docs.chainlit.io/integrations/llama-index)
+
+## Distributed Compute
+
+- [LlamaIndex + Ray](https://www.anyscale.com/blog/build-and-scale-a-powerful-query-engine-with-llamaindex-ray)
+
+## Other
+
+- [ChatGPT Plugins](integrations/chatgpt_plugins.md)
+- [Poe](https://github.com/poe-platform/poe-protocol/tree/main/llama_poe)
+- [Airbyte](https://airbyte.com/tutorials/airbyte-and-llamaindex-elt-and-chat-with-your-data-warehouse-without-writing-sql)
+- [Fleet](integrations/fleet_libraries_context.md)
diff --git a/docs/community/integrations/chatgpt_plugins.md b/docs/docs/community/integrations/chatgpt_plugins.md
similarity index 100%
rename from docs/community/integrations/chatgpt_plugins.md
rename to docs/docs/community/integrations/chatgpt_plugins.md
diff --git a/docs/community/integrations/deepeval.md b/docs/docs/community/integrations/deepeval.md
similarity index 100%
rename from docs/community/integrations/deepeval.md
rename to docs/docs/community/integrations/deepeval.md
diff --git a/docs/community/integrations/fleet_libraries_context.md b/docs/docs/community/integrations/fleet_libraries_context.md
similarity index 100%
rename from docs/community/integrations/fleet_libraries_context.md
rename to docs/docs/community/integrations/fleet_libraries_context.md
diff --git a/docs/community/integrations/graph_stores.md b/docs/docs/community/integrations/graph_stores.md
similarity index 70%
rename from docs/community/integrations/graph_stores.md
rename to docs/docs/community/integrations/graph_stores.md
index f9b49dace838c9b01fc03e5e3ba6474162a9566d..d4582ac3c08acc577746beb43765c2f987cef2f2 100644
--- a/docs/community/integrations/graph_stores.md
+++ b/docs/docs/community/integrations/graph_stores.md
@@ -8,12 +8,7 @@ If you've never used Neo4j before, you can download the desktop client [here](ht
 
 Once you open the client, create a new project and install the `apoc` integration. Full instructions [here](https://neo4j.com/labs/apoc/4.1/installation/). Just click on your project, select `Plugins` on the left side menu, install APOC and restart your server.
 
-```{toctree}
----
-maxdepth: 1
----
-Neo4j Graph Store </examples/index_structs/knowledge_graph/Neo4jKGIndexDemo.ipynb>
-```
+See the example of using the [Neo4j Graph Store](../../examples/index_structs/knowledge_graph/Neo4jKGIndexDemo.ipynb).
 
 ## `NebulaGraphStore`
 
@@ -21,13 +16,8 @@ We support a `NebulaGraphStore` integration, for persisting graphs directly in N
 
 See the associated guides below:
 
-```{toctree}
----
-maxdepth: 1
----
-Nebula Graph Store </examples/index_structs/knowledge_graph/NebulaGraphKGIndexDemo.ipynb>
-Knowledge Graph Query Engine </examples/query_engine/knowledge_graph_query_engine.ipynb>
-```
+- [Nebula Graph Store](../../examples/index_structs/knowledge_graph/NebulaGraphKGIndexDemo.ipynb)
+- [Knowledge Graph Query Engine](../../examples/query_engine/knowledge_graph_query_engine.ipynb)
 
 ## `KuzuGraphStore`
 
@@ -35,12 +25,7 @@ We support a `KuzuGraphStore` integration, for persisting graphs directly in [Ku
 
 See the associated guides below:
 
-```{toctree}
----
-maxdepth: 1
----
-Kuzu Graph Store </examples/index_structs/knowledge_graph/KuzuGraphDemo.ipynb>
-```
+- [Kuzu Graph Store](../../examples/index_structs/knowledge_graph/KuzuGraphDemo.ipynb)
 
 ## `FalkorDBGraphStore`
 
@@ -48,9 +33,4 @@ We support a `FalkorDBGraphStore` integration, for persisting graphs directly in
 
 See the associated guides below:
 
-```{toctree}
----
-maxdepth: 1
----
-FalkorDB Graph Store </examples/index_structs/knowledge_graph/FalkorDBGraphDemo.ipynb>
-```
+- [FalkorDB Graph Store](../../examples/index_structs/knowledge_graph/FalkorDBGraphDemo.ipynb)
diff --git a/docs/community/integrations/graphsignal.md b/docs/docs/community/integrations/graphsignal.md
similarity index 100%
rename from docs/community/integrations/graphsignal.md
rename to docs/docs/community/integrations/graphsignal.md
diff --git a/docs/community/integrations/guidance.md b/docs/docs/community/integrations/guidance.md
similarity index 94%
rename from docs/community/integrations/guidance.md
rename to docs/docs/community/integrations/guidance.md
index 948562d482165ef6bf22ca8e6f63fc9065fae03d..10715a649a423561966a0e92d4b8b73dc8f759fb 100644
--- a/docs/community/integrations/guidance.md
+++ b/docs/docs/community/integrations/guidance.md
@@ -65,7 +65,7 @@ Album(
 )
 ```
 
-You can play with [this notebook](/examples/output_parsing/guidance_pydantic_program.ipynb) for more details.
+You can play with [this notebook](../../examples/output_parsing/guidance_pydantic_program.ipynb) for more details.
 
 ### Using guidance to improve the robustness of our sub-question query engine.
 
@@ -95,4 +95,4 @@ s_engine = SubQuestionQueryEngine.from_defaults(
 )
 ```
 
-See [this notebook](/examples/output_parsing/guidance_sub_question.ipynb) for more details.
+See [this notebook](../../examples/output_parsing/guidance_sub_question.ipynb) for more details.
diff --git a/docs/community/integrations/lmformatenforcer.md b/docs/docs/community/integrations/lmformatenforcer.md
similarity index 94%
rename from docs/community/integrations/lmformatenforcer.md
rename to docs/docs/community/integrations/lmformatenforcer.md
index b7083d1cfe3e6fd0efa697b0aee872d68f366ec7..ff51ec2aaec9e9b17d6bd2eeccf865480c1ef8e6 100644
--- a/docs/community/integrations/lmformatenforcer.md
+++ b/docs/docs/community/integrations/lmformatenforcer.md
@@ -62,7 +62,7 @@ Album(
 )
 ```
 
-You can play with [this notebook](/examples/output_parsing/lmformatenforcer_pydantic_program.ipynb) for more details.
+You can play with [this notebook](../../examples/output_parsing/lmformatenforcer_pydantic_program.ipynb) for more details.
 
 ## Regular Expression Output
 
@@ -88,4 +88,4 @@ print(re.match(regex, output.text).groupdict())
 # {'name': 'John', 'hometown': 'Boston'}
 ```
 
-See [this notebook](/examples/output_parsing/lmformatenforcer_regular_expressions.ipynb) for more details.
+See [this notebook](../../examples/output_parsing/lmformatenforcer_regular_expressions.ipynb) for more details.
diff --git a/docs/community/integrations/managed_indices.md b/docs/docs/community/integrations/managed_indices.md
similarity index 93%
rename from docs/community/integrations/managed_indices.md
rename to docs/docs/community/integrations/managed_indices.md
index de3a2136f0a44767594d7537b54ad1cebd5183ff..23f9fde1560a8b20005073639aff80a4a7852b5c 100644
--- a/docs/community/integrations/managed_indices.md
+++ b/docs/docs/community/integrations/managed_indices.md
@@ -34,15 +34,7 @@ retriever = index.as_retriever()
 source_nodes = retriever.retrieve("What did the author do growing up?")
 ```
 
-See the notebook guide for full details.
-
-```{toctree}
----
-caption: Examples
-maxdepth: 1
----
-/examples/managed/GoogleDemo.ipynb
-```
+See the [notebook guide](../../examples/managed/GoogleDemo.ipynb) for full details.
 
 ## Vectara
 
@@ -95,14 +87,8 @@ index = VectaraIndex()
 
 And the index will connect to the existing corpus without loading any new documents.
 
-```{toctree}
----
-caption: Examples
-maxdepth: 1
----
-/examples/managed/vectaraDemo.ipynb
-/examples/retrievers/vectara_auto_retriever.ipynb
-```
+- [Vectara Demo](../../examples/managed/vectaraDemo.ipynb)
+- [Vectara AutoRetriever](../../examples/retrievers/vectara_auto_retriever.ipynb)
 
 ## Zilliz
 
@@ -152,10 +138,4 @@ retrieval_result = query_engine_with_filters.retrieve(question)
 answer = query_engine_with_filters.query(question)
 ```
 
-```{toctree}
----
-caption: Examples
-maxdepth: 1
----
-/examples/managed/zcpDemo.ipynb
-```
+- [Zilliz Example Notebook](../../examples/managed/zcpDemo.ipynb)
diff --git a/docs/community/integrations/tonicvalidate.md b/docs/docs/community/integrations/tonicvalidate.md
similarity index 98%
rename from docs/community/integrations/tonicvalidate.md
rename to docs/docs/community/integrations/tonicvalidate.md
index aaeca6fe4825cfb727f02727d0d51e07168600de..453fd7e59647e91d21ed790a04b0abb9438daf1f 100644
--- a/docs/community/integrations/tonicvalidate.md
+++ b/docs/docs/community/integrations/tonicvalidate.md
@@ -141,7 +141,7 @@ print(scores.score_dict)
 
 ### Evaluating multiple questions at once
 
-You can also evaluate more than one query and response at once using TonicValidateEvaluator, and return a tonic_validate Run object that can be logged to the [Tonic Validate UI](validate.tonic.ai).
+You can also evaluate more than one query and response at once using TonicValidateEvaluator, and return a tonic_validate Run object that can be logged to the [Tonic Validate UI](https://validate.tonic.ai).
 
 To do this, you put the questions, LLM answers, retrieved context lists, and reference answers into lists and call evaluate_run.
 
@@ -189,7 +189,7 @@ validate_api.upload_run(project_id, scores)
 
 Now you can see your results in the Tonic Validate UI!
 
-![Tonic Validate Graph](/_static/integrations/TonicValidate-Graph.png)
+![Tonic Validate Graph](../../_static/integrations/TonicValidate-Graph.png)
 
 ### End to End Example
 
diff --git a/docs/community/integrations/trulens.md b/docs/docs/community/integrations/trulens.md
similarity index 100%
rename from docs/community/integrations/trulens.md
rename to docs/docs/community/integrations/trulens.md
diff --git a/docs/community/integrations/uptrain.md b/docs/docs/community/integrations/uptrain.md
similarity index 100%
rename from docs/community/integrations/uptrain.md
rename to docs/docs/community/integrations/uptrain.md
diff --git a/docs/community/integrations/vector_stores.md b/docs/docs/community/integrations/vector_stores.md
similarity index 89%
rename from docs/community/integrations/vector_stores.md
rename to docs/docs/community/integrations/vector_stores.md
index 99bf8d823b77849a1fd5281821877fcbbef4063f..b70e4e4f505d79ab16b5ab13ad3b4fe338c1042b 100644
--- a/docs/community/integrations/vector_stores.md
+++ b/docs/docs/community/integrations/vector_stores.md
@@ -5,8 +5,6 @@ LlamaIndex offers multiple integration points with vector stores / vector databa
 1. LlamaIndex can use a vector store itself as an index. Like any other index, this index can store documents and be used to answer queries.
 2. LlamaIndex can load data from vector stores, similar to any other data connector. This data can then be used within LlamaIndex data structures.
 
-(vector-store-index)=
-
 ## Using a Vector Store as an Index
 
 LlamaIndex also supports different vector stores
@@ -42,7 +40,7 @@ as the storage backend for `VectorStoreIndex`.
 - Zep (`ZepVectorStore`). [Installation](https://docs.getzep.com/deployment/quickstart/). [Python Client](https://docs.getzep.com/sdk/).
 - Zilliz (`MilvusVectorStore`). [Quickstart](https://zilliz.com/doc/quick_start)
 
-A detailed API reference is [found here](/api_reference/indices/vector_store.rst).
+A detailed API reference is [found here](../../api_reference/storage/vector_store/index.md).
 
 Similar to any other index within LlamaIndex (tree, keyword table, list), `VectorStoreIndex` can be constructed upon any collection
 of documents. We use the vector store within the index to store embeddings for the input text chunks.
@@ -684,7 +682,7 @@ vector_store = MilvusVectorStore(
 
 ## Loading Data from Vector Stores using Data Connector
 
-LlamaIndex supports loading data from a huge number of sources. See [Data Connectors](/module_guides/loading/connector/modules.md) for more details and API documentation.
+LlamaIndex supports loading data from a huge number of sources. See [Data Connectors](../../module_guides/loading/connector/modules.md) for more details and API documentation.
 
 Chroma stores both documents and vectors. This is an example of how to use Chroma:
 
@@ -787,48 +785,43 @@ documents = reader.load_data(
 
 [Example notebooks can be found here](https://github.com/jerryjliu/llama_index/tree/main/docs/examples/data_connectors).
 
-```{toctree}
----
-caption: Examples
-maxdepth: 1
----
-../../examples/vector_stores/AstraDBIndexDemo.ipynb
-../../examples/vector_stores/AsyncIndexCreationDemo.ipynb
-../../examples/vector_stores/AzureAISearchIndexDemo.ipynb
-../../examples/vector_stores/AzureCosmosDBMongoDBvCoreDemo.ipynb
-../../examples/vector_stores/CassandraIndexDemo.ipynb
-../../examples/vector_stores/ChromaIndexDemo.ipynb
-../../examples/vector_stores/DashvectorIndexDemo.ipynb
-../../examples/vector_stores/DashvectorIndexDemo-Hybrid.ipynb
-../../examples/vector_stores/DeepLakeIndexDemo.ipynb
-../../examples/vector_stores/DocArrayHnswIndexDemo.ipynb
-../../examples/vector_stores/DocArrayInMemoryIndexDemo.ipynb
-../../examples/vector_stores/EpsillaIndexDemo.ipynb
-../../examples/vector_stores/LanceDBIndexDemo.ipynb
-../../examples/vector_stores/LanternIndexDemo.ipynb
-../../examples/vector_stores/MetalIndexDemo.ipynb
-../../examples/vector_stores/MilvusIndexDemo.ipynb
-../../examples/vector_stores/MyScaleIndexDemo.ipynb
-../../examples/vector_stores/ElasticsearchIndexDemo.ipynb
-../../examples/vector_stores/FaissIndexDemo.ipynb
-../../examples/vector_stores/MongoDBAtlasVectorSearch.ipynb
-../../examples/vector_stores/Neo4jVectorDemo.ipynb
-../../examples/vector_stores/OpensearchDemo.ipynb
-../../examples/vector_stores/PineconeIndexDemo.ipynb
-../../examples/vector_stores/PineconeIndexDemo-Hybrid.ipynb
-../../examples/vector_stores/PGVectoRsDemo.ipynb
-../../examples/vector_stores/postgres.ipynb
-../../examples/vector_stores/RedisIndexDemo.ipynb
-../../examples/vector_stores/QdrantIndexDemo.ipynb
-../../examples/vector_stores/qdrant_hybrid.ipynb
-../../examples/vector_stores/RocksetIndexDemo.ipynb
-../../examples/vector_stores/SimpleIndexDemo.ipynb
-../../examples/vector_stores/SupabaseVectorIndexDemo.ipynb
-../../examples/vector_stores/TairIndexDemo.ipynb
-../../examples/vector_stores/TencentVectorDBIndexDemo.ipynb
-../../examples/vector_stores/Timescalevector.ipynb
-../../examples/vector_stores/UpstashVectorDemo.ipynb
-../../examples/vector_stores/WeaviateIndexDemo.ipynb
-../../examples/vector_stores/WeaviateIndexDemo-Hybrid.ipynb
-../../examples/vector_stores/ZepIndexDemo.ipynb
-```
+## Vector Store Examples
+
+- [Astra DB](../../examples/vector_stores/AstraDBIndexDemo.ipynb)
+- [Async Index Creation](../../examples/vector_stores/AsyncIndexCreationDemo.ipynb)
+- [Azure AI Search](../../examples/vector_stores/AzureAISearchIndexDemo.ipynb)
+- [Azure Cosmos DB](../../examples/vector_stores/AzureCosmosDBMongoDBvCoreDemo.ipynb)
+- [Caasandra](../../examples/vector_stores/CassandraIndexDemo.ipynb)
+- [Chromadb](../../examples/vector_stores/ChromaIndexDemo.ipynb)
+- [Dash](../../examples/vector_stores/DashvectorIndexDemo.ipynb)
+- [Deeplake](../../examples/vector_stores/DeepLakeIndexDemo.ipynb)
+- [DocArray HNSW](../../examples/vector_stores/DocArrayHnswIndexDemo.ipynb)
+- [DocArray in-Memory](../../examples/vector_stores/DocArrayInMemoryIndexDemo.ipynb)
+- [Espilla](../../examples/vector_stores/EpsillaIndexDemo.ipynb)
+- [LanceDB](../../examples/vector_stores/LanceDBIndexDemo.ipynb)
+- [Lantern](../../examples/vector_stores/LanternIndexDemo.ipynb)
+- [Metal](../../examples/vector_stores/MetalIndexDemo.ipynb)
+- [Milvus](../../examples/vector_stores/MilvusIndexDemo.ipynb)
+- [MyScale](../../examples/vector_stores/MyScaleIndexDemo.ipynb)
+- [ElsaticSearch](../../examples/vector_stores/ElasticsearchIndexDemo.ipynb)
+- [FAISS](../../examples/vector_stores/FaissIndexDemo.ipynb)
+- [MongoDB Atlas](../../examples/vector_stores/MongoDBAtlasVectorSearch.ipynb)
+- [Neo4j](../../examples/vector_stores/Neo4jVectorDemo.ipynb)
+- [OpenSearch](../../examples/vector_stores/OpensearchDemo.ipynb)
+- [Pinecone](../../examples/vector_stores/PineconeIndexDemo.ipynb)
+- [Pinecone Hybrid Search](../../examples/vector_stores/PineconeIndexDemo-Hybrid.ipynb)
+- [PGvectoRS](../../examples/vector_stores/PGVectoRsDemo.ipynb)
+- [Postgres](../../examples/vector_stores/postgres.ipynb)
+- [Redis](../../examples/vector_stores/RedisIndexDemo.ipynb)
+- [Qdrant](../../examples/vector_stores/QdrantIndexDemo.ipynb)
+- [Qdrant Hybrid Search](../../examples/vector_stores/qdrant_hybrid.ipynb)
+- [Rockset](../../examples/vector_stores/RocksetIndexDemo.ipynb)
+- [Simple](../../examples/vector_stores/SimpleIndexDemo.ipynb)
+- [Supabase](../../examples/vector_stores/SupabaseVectorIndexDemo.ipynb)
+- [Tair](../../examples/vector_stores/TairIndexDemo.ipynb)
+- [Tencent](../../examples/vector_stores/TencentVectorDBIndexDemo.ipynb)
+- [Timesacle](../../examples/vector_stores/Timescalevector.ipynb)
+- [Upstash](../../examples/vector_stores/UpstashVectorDemo.ipynb)
+- [Weaviate](../../examples/vector_stores/WeaviateIndexDemo.ipynb)
+- [Weaviate Hybrid Search](../../examples/vector_stores/WeaviateIndexDemo-Hybrid.ipynb)
+- [Zep](../../examples/vector_stores/ZepIndexDemo.ipynb)
diff --git a/docs/community/llama_packs/root.md b/docs/docs/community/llama_packs/index.md
similarity index 90%
rename from docs/community/llama_packs/root.md
rename to docs/docs/community/llama_packs/index.md
index 773d27f459206be7920f53126c2c6529d06b52d5..916ff78cec40c2c67492af2e717ed2276683ec41 100644
--- a/docs/community/llama_packs/root.md
+++ b/docs/docs/community/llama_packs/index.md
@@ -56,11 +56,6 @@ Importantly, you can/should also go into `pack_directory` to inspect the source
 
 Some example module guides are given below. Remember, go on [LlamaHub](https://llamahub.ai) to access the full range of packs.
 
-```{toctree}
----
-maxdepth: 1
----
-/examples/llama_hub/llama_packs_example.ipynb
-/examples/llama_hub/llama_pack_resume.ipynb
-/examples/llama_hub/llama_pack_ollama.ipynb
-```
+- [LlamaPacks Example](../../examples/llama_hub/llama_packs_example.ipynb)
+- [Resume LlamaPack](../../examples/llama_hub/llama_pack_resume.ipynb)
+- [Ollama LlamaPack](../../examples/llama_hub/llama_pack_ollama.ipynb)
diff --git a/docs/docs/composability/diagram.png b/docs/docs/composability/diagram.png
new file mode 100644
index 0000000000000000000000000000000000000000..9734b399757d0e7d5aae85768423cd59b51873b0
Binary files /dev/null and b/docs/docs/composability/diagram.png differ
diff --git a/docs/docs/composability/diagram_b0.png b/docs/docs/composability/diagram_b0.png
new file mode 100644
index 0000000000000000000000000000000000000000..0e080daaac368b2f8497d5815637cc9f0d4a85f7
Binary files /dev/null and b/docs/docs/composability/diagram_b0.png differ
diff --git a/docs/docs/composability/diagram_b1.png b/docs/docs/composability/diagram_b1.png
new file mode 100644
index 0000000000000000000000000000000000000000..31a6d3055ff6259c6bf46c4cd8b23f1fa9f32ecc
Binary files /dev/null and b/docs/docs/composability/diagram_b1.png differ
diff --git a/docs/docs/composability/diagram_q1.png b/docs/docs/composability/diagram_q1.png
new file mode 100644
index 0000000000000000000000000000000000000000..feb6cbb723f8c537a029e36f2863288ecf9616ee
Binary files /dev/null and b/docs/docs/composability/diagram_q1.png differ
diff --git a/docs/docs/composability/diagram_q2.png b/docs/docs/composability/diagram_q2.png
new file mode 100644
index 0000000000000000000000000000000000000000..f89af4216df9e549bb5a6105709667c2bd9151de
Binary files /dev/null and b/docs/docs/composability/diagram_q2.png differ
diff --git a/docs/docs/contribution/contrib.png b/docs/docs/contribution/contrib.png
new file mode 100644
index 0000000000000000000000000000000000000000..ebb70d844aeffe1039f36c7b782a8d438d638a61
Binary files /dev/null and b/docs/docs/contribution/contrib.png differ
diff --git a/docs/docs/css/algolia.css b/docs/docs/css/algolia.css
new file mode 100644
index 0000000000000000000000000000000000000000..5995b8135d633498ed1bd651eccce4b176e8831b
--- /dev/null
+++ b/docs/docs/css/algolia.css
@@ -0,0 +1,96 @@
+/* Hide search button */
+.sidebar-search-container {
+  display: none;
+}
+
+/* Hide the search wrapper window when hitting Ctrl+K */
+.search-button__wrapper.show {
+  display: none !important;
+}
+
+/* Make sure Algolia's search container is always on top */
+.bd-article-container {
+  z-index: 10;
+}
+
+@media (prefers-color-scheme: dark) {
+  body:not([data-theme="light"]) .DocSearch-Button {
+    background-color: #3d4751 !important;
+    color: white !important;
+  }
+
+  body:not([data-theme="light"]) .DocSearch-Search-Icon {
+    color: white !important;
+  }
+
+  body:not([data-theme="light"]) .DocSearch-Button-Key {
+    color: black !important;
+    box-shadow:
+      0 0.0625rem 0 rgba(0, 0, 0, 0.2),
+      inset 0 0 0 0.01rem #3d4751 !important;
+  }
+
+  body:not([data-theme="light"]) .DocSearch-Commands-Key {
+    color: black !important;
+    box-shadow:
+      0 0.0625rem 0 rgba(0, 0, 0, 0.2),
+      inset 0 0 0 0.01rem #858a8f !important;
+  }
+}
+
+@media (prefers-color-scheme: dark) {
+  body[data-theme="dark"] .DocSearch-Button {
+    background-color: #3d4751 !important;
+    color: white !important;
+  }
+
+  body[data-theme="dark"] .DocSearch-Search-Icon {
+    color: white !important;
+  }
+
+  body[data-theme="dark"] .DocSearch-Button-Key {
+    color: black !important;
+    box-shadow:
+      0 0.0625rem 0 rgba(0, 0, 0, 0.2),
+      inset 0 0 0 0.01rem #3d4751 !important;
+  }
+
+  body[data-theme="dark"] .DocSearch-Commands-Key {
+    color: black !important;
+    box-shadow:
+      0 0.0625rem 0 rgba(0, 0, 0, 0.2),
+      inset 0 0 0 0.01rem #858a8f !important;
+  }
+}
+
+.DocSearch-Button-Key {
+  font-family:
+    "SFMono-Regular",
+    Menlo,
+    Consolas,
+    Monaco,
+    Liberation Mono,
+    Lucida Console,
+    monospace !important;
+  padding: 0 !important;
+  padding-top: 0.1rem !important;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+}
+
+.DocSearch-Commands-Key {
+  font-family:
+    "SFMono-Regular",
+    Menlo,
+    Consolas,
+    Monaco,
+    Liberation Mono,
+    Lucida Console,
+    monospace !important;
+  padding: 0 !important;
+  padding-left: 0.05rem !important;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+}
diff --git a/docs/docs/css/custom.css b/docs/docs/css/custom.css
new file mode 100644
index 0000000000000000000000000000000000000000..7925b00d32b413e5c0dfa7b4cef4092daa4b5cb7
--- /dev/null
+++ b/docs/docs/css/custom.css
@@ -0,0 +1,14 @@
+#my-component-root *,
+#headlessui-portal-root * {
+  z-index: 1000000000000;
+  font-size: 100%;
+}
+
+textarea {
+  border: 0;
+  padding: 0;
+}
+
+article p {
+  margin-bottom: 10px !important;
+}
diff --git a/docs/docs/css/style.css b/docs/docs/css/style.css
new file mode 100644
index 0000000000000000000000000000000000000000..3edd10d27e25ff99871581dfd3ebae04db011b84
--- /dev/null
+++ b/docs/docs/css/style.css
@@ -0,0 +1,46 @@
+.md-container .jp-Cell-outputWrapper .jp-OutputPrompt.jp-OutputArea-prompt,
+.md-container .jp-Cell-inputWrapper .jp-InputPrompt.jp-InputArea-prompt {
+  display: none !important;
+}
+
+/* CSS styles for side-by-side layout */
+.container {
+  display: flex-col;
+  justify-content: space-between;
+  margin-bottom: 20px; /* Adjust spacing between sections */
+  position: sticky;
+  top: 2.4rem;
+  z-index: 1000; /* Ensure it's above other content */
+  background-color: white; /* Match your page background */
+  padding: 0.2rem;
+}
+
+.example-heading {
+  margin: 0.2rem !important;
+}
+
+.usage-examples {
+  width: 100%; /* Adjust the width as needed */
+  border: 1px solid var(--md-default-fg-color--light);
+  border-radius: 2px;
+  padding: 0.2rem;
+}
+
+/* Additional styling for the toggle */
+.toggle-example {
+  cursor: pointer;
+  color: white;
+  text-decoration: underline;
+  background-color: var(--md-primary-fg-color);
+  padding: 0.2rem;
+  border-radius: 2px;
+}
+
+.hidden {
+  display: none;
+}
+
+/* mendable search styling */
+#my-component-root > div {
+  bottom: 100px;
+}
diff --git a/docs/docs/data_connectors/llamahub.png b/docs/docs/data_connectors/llamahub.png
new file mode 100644
index 0000000000000000000000000000000000000000..db2b01117da9c503bba3e6f83a66813dc83336d1
Binary files /dev/null and b/docs/docs/data_connectors/llamahub.png differ
diff --git a/docs/docs/embeddings/doc_example.jpeg b/docs/docs/embeddings/doc_example.jpeg
new file mode 100644
index 0000000000000000000000000000000000000000..81549c900c0c6f01dfdd7ca536d37e4f80d1c133
Binary files /dev/null and b/docs/docs/embeddings/doc_example.jpeg differ
diff --git a/docs/docs/evaluation/eval_query_response_context.png b/docs/docs/evaluation/eval_query_response_context.png
new file mode 100644
index 0000000000000000000000000000000000000000..d7a633cdfb2a959ebfdc32c3bc8cb8cca2a43c4a
Binary files /dev/null and b/docs/docs/evaluation/eval_query_response_context.png differ
diff --git a/docs/docs/evaluation/eval_query_sources.png b/docs/docs/evaluation/eval_query_sources.png
new file mode 100644
index 0000000000000000000000000000000000000000..d6f4b222c513154894c083d211c071927ff07530
Binary files /dev/null and b/docs/docs/evaluation/eval_query_sources.png differ
diff --git a/docs/docs/evaluation/eval_response_context.png b/docs/docs/evaluation/eval_response_context.png
new file mode 100644
index 0000000000000000000000000000000000000000..c3800d44475b10f1cb39997bfc2f16b2efd73b8f
Binary files /dev/null and b/docs/docs/evaluation/eval_response_context.png differ
diff --git a/docs/docs/examples/agent/Chatbot_SEC.ipynb b/docs/docs/examples/agent/Chatbot_SEC.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..36f90f26f1a27fb736fe6167a3f23d68c8944ef4
--- /dev/null
+++ b/docs/docs/examples/agent/Chatbot_SEC.ipynb
@@ -0,0 +1,886 @@
+{
+ "cells": [
+  {
+   "attachments": {},
+   "cell_type": "markdown",
+   "id": "e8c3c7da",
+   "metadata": {},
+   "source": [
+    "<a href=\"https://colab.research.google.com/github/run-llama/llama_index/blob/main/docs/examples/agent/Chatbot_SEC.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
+   ]
+  },
+  {
+   "attachments": {},
+   "cell_type": "markdown",
+   "id": "ae56bcff",
+   "metadata": {},
+   "source": [
+    "# 💬🤖 How to Build a Chatbot\n",
+    "\n",
+    "LlamaIndex serves as a bridge between your data and Language Learning Models (LLMs), providing a toolkit that enables you to establish a query interface around your data for a variety of tasks, such as question-answering and summarization.\n",
+    "\n",
+    "In this tutorial, we'll walk you through building a context-augmented chatbot using a [Data Agent](https://gpt-index.readthedocs.io/en/stable/core_modules/agent_modules/agents/root.html). This agent, powered by LLMs, is capable of intelligently executing tasks over your data. The end result is a chatbot agent equipped with a robust set of data interface tools provided by LlamaIndex to answer queries about your data.\n",
+    "\n",
+    "**Note**: This tutorial builds upon initial work on creating a query interface over SEC 10-K filings - [check it out here](https://medium.com/@jerryjliu98/how-unstructured-and-llamaindex-can-help-bring-the-power-of-llms-to-your-own-data-3657d063e30d).\n",
+    "\n",
+    "### Context\n",
+    "\n",
+    "In this guide, we’ll build a \"10-K Chatbot\" that uses raw UBER 10-K HTML filings from Dropbox. Users can interact with the chatbot to ask questions related to the 10-K filings."
+   ]
+  },
+  {
+   "attachments": {},
+   "cell_type": "markdown",
+   "id": "03f3e1de",
+   "metadata": {},
+   "source": [
+    "### Preparation"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "35c20fbe",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "%pip install llama-index-readers-file\n",
+    "%pip install llama-index-embeddings-openai\n",
+    "%pip install llama-index-agent-openai\n",
+    "%pip install llama-index-llms-openai"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "1211059f",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "import os\n",
+    "\n",
+    "os.environ[\"OPENAI_API_KEY\"] = \"sk-...\"\n",
+    "\n",
+    "import nest_asyncio\n",
+    "\n",
+    "nest_asyncio.apply()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "CuHeyb224pI2",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# set text wrapping\n",
+    "from IPython.display import HTML, display\n",
+    "\n",
+    "\n",
+    "def set_css():\n",
+    "    display(\n",
+    "        HTML(\n",
+    "            \"\"\"\n",
+    "  <style>\n",
+    "    pre {\n",
+    "        white-space: pre-wrap;\n",
+    "    }\n",
+    "  </style>\n",
+    "  \"\"\"\n",
+    "        )\n",
+    "    )\n",
+    "\n",
+    "\n",
+    "get_ipython().events.register(\"pre_run_cell\", set_css)"
+   ]
+  },
+  {
+   "attachments": {},
+   "cell_type": "markdown",
+   "id": "218cc812",
+   "metadata": {},
+   "source": [
+    "### Ingest Data\n",
+    "\n",
+    "Let's first download the raw 10-k files, from 2019-2022."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "YC4R6nkCp91d",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# NOTE: the code examples assume you're operating within a Jupyter notebook.\n",
+    "# download files\n",
+    "!mkdir data\n",
+    "!wget \"https://www.dropbox.com/s/948jr9cfs7fgj99/UBER.zip?dl=1\" -O data/UBER.zip\n",
+    "!unzip data/UBER.zip -d data"
+   ]
+  },
+  {
+   "attachments": {},
+   "cell_type": "markdown",
+   "id": "a2200f83",
+   "metadata": {},
+   "source": [
+    "To parse the HTML files into formatted text, we use the [Unstructured](https://github.com/Unstructured-IO/unstructured) library. Thanks to [LlamaHub](https://llamahub.ai/), we can directly integrate with Unstructured, allowing conversion of any text into a Document format that LlamaIndex can ingest.\n",
+    "\n",
+    "First we install the necessary packages:"
+   ]
+  },
+  {
+   "attachments": {},
+   "cell_type": "markdown",
+   "id": "f55a00d7",
+   "metadata": {},
+   "source": [
+    "Then we can use the `UnstructuredReader` to parse the HTML files into a list of `Document` objects."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "5dcd0f94",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "from llama_index.readers.file import UnstructuredReader\n",
+    "from pathlib import Path\n",
+    "\n",
+    "years = [2022, 2021, 2020, 2019]\n",
+    "\n",
+    "loader = UnstructuredReader()\n",
+    "doc_set = {}\n",
+    "all_docs = []\n",
+    "for year in years:\n",
+    "    year_docs = loader.load_data(\n",
+    "        file=Path(f\"./data/UBER/UBER_{year}.html\"), split_documents=False\n",
+    "    )\n",
+    "    # insert year metadata into each year\n",
+    "    for d in year_docs:\n",
+    "        d.metadata = {\"year\": year}\n",
+    "    doc_set[year] = year_docs\n",
+    "    all_docs.extend(year_docs)"
+   ]
+  },
+  {
+   "attachments": {},
+   "cell_type": "markdown",
+   "id": "312d0cfe",
+   "metadata": {},
+   "source": [
+    "### Setting up Vector Indices for each year\n",
+    "\n",
+    "We first setup a vector index for each year. Each vector index allows us\n",
+    "to ask questions about the 10-K filing of a given year.\n",
+    "\n",
+    "We build each index and save it to disk."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "7c90fafc",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/html": [
+       "\n",
+       "  <style>\n",
+       "    pre {\n",
+       "        white-space: pre-wrap;\n",
+       "    }\n",
+       "  </style>\n",
+       "  "
+      ],
+      "text/plain": [
+       "<IPython.core.display.HTML object>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "# initialize simple vector indices\n",
+    "# NOTE: don't run this cell if the indices are already loaded!\n",
+    "from llama_index.core import VectorStoreIndex, StorageContext\n",
+    "from llama_index.embeddings.openai import OpenAIEmbedding\n",
+    "from llama_index.llms.openai import OpenAI\n",
+    "from llama_index.core import Settings\n",
+    "\n",
+    "Settings.chunk_size = 512\n",
+    "Settings.chunk_overlap = 64\n",
+    "Settings.llm = OpenAI(model=\"gpt-3.5-turbo\")\n",
+    "Settings.embed_model = OpenAIEmbedding(model=\"text-embedding-3-small\")\n",
+    "\n",
+    "index_set = {}\n",
+    "for year in years:\n",
+    "    storage_context = StorageContext.from_defaults()\n",
+    "    cur_index = VectorStoreIndex.from_documents(\n",
+    "        doc_set[year],\n",
+    "        storage_context=storage_context,\n",
+    "    )\n",
+    "    index_set[year] = cur_index\n",
+    "    storage_context.persist(persist_dir=f\"./storage/{year}\")"
+   ]
+  },
+  {
+   "attachments": {},
+   "cell_type": "markdown",
+   "id": "f0704f6b",
+   "metadata": {},
+   "source": [
+    "To load an index from disk, do the following"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "7100e1b5",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/html": [
+       "\n",
+       "  <style>\n",
+       "    pre {\n",
+       "        white-space: pre-wrap;\n",
+       "    }\n",
+       "  </style>\n",
+       "  "
+      ],
+      "text/plain": [
+       "<IPython.core.display.HTML object>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "# Load indices from disk\n",
+    "from llama_index.core import load_index_from_storage\n",
+    "\n",
+    "index_set = {}\n",
+    "for year in years:\n",
+    "    storage_context = StorageContext.from_defaults(\n",
+    "        persist_dir=f\"./storage/{year}\"\n",
+    "    )\n",
+    "    cur_index = load_index_from_storage(\n",
+    "        storage_context,\n",
+    "    )\n",
+    "    index_set[year] = cur_index"
+   ]
+  },
+  {
+   "attachments": {},
+   "cell_type": "markdown",
+   "id": "0aa3f903",
+   "metadata": {},
+   "source": [
+    "### Setting up a Sub Question Query Engine to Synthesize Answers Across 10-K Filings\n",
+    "\n",
+    "Since we have access to documents of 4 years, we may not only want to ask questions regarding the 10-K document of a given year, but ask questions that require analysis over all 10-K filings.\n",
+    "\n",
+    "To address this, we can use a [Sub Question Query Engine](https://gpt-index.readthedocs.io/en/stable/examples/query_engine/sub_question_query_engine.html). It decomposes a query into subqueries, each answered by an individual vector index, and synthesizes the results to answer the overall query.\n",
+    "\n",
+    "LlamaIndex provides some wrappers around indices (and query engines) so that they can be used by query engines and agents. First we define a `QueryEngineTool` for each vector index.\n",
+    "Each tool has a name and a description; these are what the LLM agent sees to decide which tool to choose."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "ce53419f",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/html": [
+       "\n",
+       "  <style>\n",
+       "    pre {\n",
+       "        white-space: pre-wrap;\n",
+       "    }\n",
+       "  </style>\n",
+       "  "
+      ],
+      "text/plain": [
+       "<IPython.core.display.HTML object>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "from llama_index.core.tools import QueryEngineTool, ToolMetadata\n",
+    "\n",
+    "individual_query_engine_tools = [\n",
+    "    QueryEngineTool(\n",
+    "        query_engine=index_set[year].as_query_engine(),\n",
+    "        metadata=ToolMetadata(\n",
+    "            name=f\"vector_index_{year}\",\n",
+    "            description=(\n",
+    "                \"useful for when you want to answer queries about the\"\n",
+    "                f\" {year} SEC 10-K for Uber\"\n",
+    "            ),\n",
+    "        ),\n",
+    "    )\n",
+    "    for year in years\n",
+    "]"
+   ]
+  },
+  {
+   "attachments": {},
+   "cell_type": "markdown",
+   "id": "6e8d2177",
+   "metadata": {},
+   "source": [
+    "Now we can create the Sub Question Query Engine, which will allow us to synthesize answers across the 10-K filings. We pass in the `individual_query_engine_tools` we defined above."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "9c6cee32",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/html": [
+       "\n",
+       "  <style>\n",
+       "    pre {\n",
+       "        white-space: pre-wrap;\n",
+       "    }\n",
+       "  </style>\n",
+       "  "
+      ],
+      "text/plain": [
+       "<IPython.core.display.HTML object>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "from llama_index.core.query_engine import SubQuestionQueryEngine\n",
+    "\n",
+    "query_engine = SubQuestionQueryEngine.from_defaults(\n",
+    "    query_engine_tools=individual_query_engine_tools,\n",
+    ")"
+   ]
+  },
+  {
+   "attachments": {},
+   "cell_type": "markdown",
+   "id": "de5362b6",
+   "metadata": {},
+   "source": [
+    "### Setting up the Chatbot Agent\n",
+    "\n",
+    "We use a LlamaIndex Data Agent to setup the outer chatbot agent, which has access to a set of Tools. Specifically, we will use an OpenAIAgent, that takes advantage of OpenAI API function calling. We want to use the separate Tools we defined previously for each index (corresponding to a given year), as well as a tool for the sub question query engine we defined above.\n",
+    "\n",
+    "First we define a `QueryEngineTool` for the sub question query engine:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "f42e5a52",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/html": [
+       "\n",
+       "  <style>\n",
+       "    pre {\n",
+       "        white-space: pre-wrap;\n",
+       "    }\n",
+       "  </style>\n",
+       "  "
+      ],
+      "text/plain": [
+       "<IPython.core.display.HTML object>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "query_engine_tool = QueryEngineTool(\n",
+    "    query_engine=query_engine,\n",
+    "    metadata=ToolMetadata(\n",
+    "        name=\"sub_question_query_engine\",\n",
+    "        description=(\n",
+    "            \"useful for when you want to answer queries that require analyzing\"\n",
+    "            \" multiple SEC 10-K documents for Uber\"\n",
+    "        ),\n",
+    "    ),\n",
+    ")"
+   ]
+  },
+  {
+   "attachments": {},
+   "cell_type": "markdown",
+   "id": "fdcc922d",
+   "metadata": {},
+   "source": [
+    "Then, we combine the Tools we defined above into a single list of tools for the agent:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "fad25dca",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/html": [
+       "\n",
+       "  <style>\n",
+       "    pre {\n",
+       "        white-space: pre-wrap;\n",
+       "    }\n",
+       "  </style>\n",
+       "  "
+      ],
+      "text/plain": [
+       "<IPython.core.display.HTML object>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "tools = individual_query_engine_tools + [query_engine_tool]"
+   ]
+  },
+  {
+   "attachments": {},
+   "cell_type": "markdown",
+   "id": "14219225",
+   "metadata": {},
+   "source": [
+    "Finally, we call `OpenAIAgent.from_tools` to create the agent, passing in the list of tools we defined above."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "bb01833c",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/html": [
+       "\n",
+       "  <style>\n",
+       "    pre {\n",
+       "        white-space: pre-wrap;\n",
+       "    }\n",
+       "  </style>\n",
+       "  "
+      ],
+      "text/plain": [
+       "<IPython.core.display.HTML object>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "from llama_index.agent.openai import OpenAIAgent\n",
+    "\n",
+    "agent = OpenAIAgent.from_tools(tools, verbose=True)"
+   ]
+  },
+  {
+   "attachments": {},
+   "cell_type": "markdown",
+   "id": "9e6112d4",
+   "metadata": {},
+   "source": [
+    "### Testing the Agent\n",
+    "\n",
+    "We can now test the agent with various queries.\n",
+    "\n",
+    "If we test it with a simple \"hello\" query, the agent does not use any Tools."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "269e6700",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/html": [
+       "\n",
+       "  <style>\n",
+       "    pre {\n",
+       "        white-space: pre-wrap;\n",
+       "    }\n",
+       "  </style>\n",
+       "  "
+      ],
+      "text/plain": [
+       "<IPython.core.display.HTML object>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Added user message to memory: hi, i am bob\n",
+      "Hello Bob! How can I assist you today?\n"
+     ]
+    }
+   ],
+   "source": [
+    "response = agent.chat(\"hi, i am bob\")\n",
+    "print(str(response))"
+   ]
+  },
+  {
+   "attachments": {},
+   "cell_type": "markdown",
+   "id": "2fe5fb92",
+   "metadata": {},
+   "source": [
+    "If we test it with a query regarding the 10-k of a given year, the agent will use\n",
+    "the relevant vector index Tool."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "bb8226e6",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/html": [
+       "\n",
+       "  <style>\n",
+       "    pre {\n",
+       "        white-space: pre-wrap;\n",
+       "    }\n",
+       "  </style>\n",
+       "  "
+      ],
+      "text/plain": [
+       "<IPython.core.display.HTML object>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Added user message to memory: What were some of the biggest risk factors in 2020 for Uber?\n",
+      "=== Calling Function ===\n",
+      "Calling function: vector_index_2020 with args: {\n",
+      "  \"input\": \"biggest risk factors\"\n",
+      "}\n",
+      "Got output: The biggest risk factors mentioned in the context are:\n",
+      "\n",
+      "1. The adverse impact of the COVID-19 pandemic and actions taken to mitigate it on the business.\n",
+      "2. The potential reclassification of drivers as employees, workers, or quasi-employees instead of independent contractors.\n",
+      "3. Intense competition in the mobility, delivery, and logistics industries.\n",
+      "4. The need to lower fares or service fees and offer driver incentives and consumer discounts to remain competitive.\n",
+      "5. Significant losses incurred and the uncertainty of achieving profitability.\n",
+      "6. Difficulty in attracting and maintaining a critical mass of platform users.\n",
+      "7. Operational, compliance, and cultural challenges.\n",
+      "8. Negative media coverage and reputation issues.\n",
+      "9. Inability to optimize organizational structure or manage growth effectively.\n",
+      "10. Safety incidents that harm the ability to attract and retain platform users.\n",
+      "11. Risks associated with substantial investments in new offerings and technologies.\n",
+      "12. Potential fines or enforcement measures due to challenges faced.\n",
+      "13. Uncertainty and potential long-term financial impact of the COVID-19 pandemic, including changes in user behavior and demand for mobility services.\n",
+      "14. Potential adverse impact from business partners and third-party vendors affected by the pandemic.\n",
+      "15. Volatility in financial markets and its effect on stock price and access to capital markets.\n",
+      "\n",
+      "These are the biggest risk factors mentioned in the given context.\n",
+      "========================\n",
+      "\n",
+      "The biggest risk factors for Uber in 2020 were:\n",
+      "\n",
+      "1. The adverse impact of the COVID-19 pandemic and actions taken to mitigate it on the business.\n",
+      "2. The potential reclassification of drivers as employees, workers, or quasi-employees instead of independent contractors.\n",
+      "3. Intense competition in the mobility, delivery, and logistics industries.\n",
+      "4. The need to lower fares or service fees and offer driver incentives and consumer discounts to remain competitive.\n",
+      "5. Significant losses incurred and the uncertainty of achieving profitability.\n",
+      "6. Difficulty in attracting and maintaining a critical mass of platform users.\n",
+      "7. Operational, compliance, and cultural challenges.\n",
+      "8. Negative media coverage and reputation issues.\n",
+      "9. Inability to optimize organizational structure or manage growth effectively.\n",
+      "10. Safety incidents that harm the ability to attract and retain platform users.\n",
+      "11. Risks associated with substantial investments in new offerings and technologies.\n",
+      "12. Potential fines or enforcement measures due to challenges faced.\n",
+      "13. Uncertainty and potential long-term financial impact of the COVID-19 pandemic, including changes in user behavior and demand for mobility services.\n",
+      "14. Potential adverse impact from business partners and third-party vendors affected by the pandemic.\n",
+      "15. Volatility in financial markets and its effect on stock price and access to capital markets.\n",
+      "\n",
+      "These risk factors highlight the challenges and uncertainties faced by Uber in 2020.\n"
+     ]
+    }
+   ],
+   "source": [
+    "response = agent.chat(\n",
+    "    \"What were some of the biggest risk factors in 2020 for Uber?\"\n",
+    ")\n",
+    "print(str(response))"
+   ]
+  },
+  {
+   "attachments": {},
+   "cell_type": "markdown",
+   "id": "78ac181f",
+   "metadata": {},
+   "source": [
+    "Finally, if we test it with a query to compare/contrast risk factors across years, the agent will use the Sub Question Query Engine Tool."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "72e475bf",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/html": [
+       "\n",
+       "  <style>\n",
+       "    pre {\n",
+       "        white-space: pre-wrap;\n",
+       "    }\n",
+       "  </style>\n",
+       "  "
+      ],
+      "text/plain": [
+       "<IPython.core.display.HTML object>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Added user message to memory: Compare/contrast the risk factors described in the Uber 10-K across years. Give answer in bullet points.\n",
+      "=== Calling Function ===\n",
+      "Calling function: sub_question_query_engine with args: {\n",
+      "  \"input\": \"Compare/contrast the risk factors described in the Uber 10-K across years\"\n",
+      "}\n",
+      "Generated 4 sub questions.\n",
+      "\u001b[1;3;38;2;237;90;200m[vector_index_2022] Q: What are the risk factors described in the 2022 SEC 10-K for Uber?\n",
+      "\u001b[0m\u001b[1;3;38;2;90;149;237m[vector_index_2021] Q: What are the risk factors described in the 2021 SEC 10-K for Uber?\n",
+      "\u001b[0m\u001b[1;3;38;2;11;159;203m[vector_index_2020] Q: What are the risk factors described in the 2020 SEC 10-K for Uber?\n",
+      "\u001b[0m\u001b[1;3;38;2;155;135;227m[vector_index_2019] Q: What are the risk factors described in the 2019 SEC 10-K for Uber?\n",
+      "\u001b[0m\u001b[1;3;38;2;237;90;200m[vector_index_2022] A: The risk factors described in the 2022 SEC 10-K for Uber are not provided in the given context information.\n",
+      "\u001b[0m\u001b[1;3;38;2;90;149;237m[vector_index_2021] A: The risk factors described in the 2021 SEC 10-K for Uber are not provided in the given context information.\n",
+      "\u001b[0m\u001b[1;3;38;2;155;135;227m[vector_index_2019] A: The risk factors described in the 2019 SEC 10-K for Uber include potential infringement of intellectual property, the need to protect proprietary information, dependence on rapid technological advances, seasonality in revenue generation, fluctuations in usage of the platform, seasonal increases in revenue for certain quarters, and the potential impact of employee actions.\n",
+      "\u001b[0m\u001b[1;3;38;2;11;159;203m[vector_index_2020] A: The risk factors described in the 2020 SEC 10-K for Uber include the potential adverse effects on their business, financial condition, and results of operations. These risks could cause a decline in the trading price of their common stock and harm their business prospects. Additionally, there may be risks and uncertainties not currently known to Uber or that they do not believe are material. For a more detailed discussion of these risk factors, please refer to the \"Risk Factors\" section in Uber's Annual Report on Form 10-K.\n",
+      "\u001b[0mGot output: The risk factors described in the Uber 10-K vary across different years. In the 2020 SEC 10-K, the risk factors include potential adverse effects on their business, financial condition, and results of operations. However, the 2019 SEC 10-K includes additional risk factors such as potential infringement of intellectual property, the need to protect proprietary information, dependence on rapid technological advances, seasonality in revenue generation, fluctuations in usage of the platform, seasonal increases in revenue for certain quarters, and the potential impact of employee actions. It is important to note that the specific risk factors may change from year to year based on the evolving business environment and circumstances.\n",
+      "========================\n",
+      "\n",
+      "=== Calling Function ===\n",
+      "Calling function: vector_index_2022 with args: {\n",
+      "  \"input\": \"risk factors\"\n",
+      "}\n",
+      "Got output: Some of the risk factors mentioned in the context include the potential failure to meet regulatory requirements related to climate change, the impact of contagious diseases and pandemics on the business, the occurrence of catastrophic events, the uncertainty surrounding future pandemics or disease outbreaks, and the competitive nature of the mobility, delivery, and logistics industries. Additionally, the classification of drivers as employees instead of independent contractors, the need to lower fares or service fees to remain competitive, and the company's history of significant losses and anticipated increase in operating expenses are also mentioned as risk factors.\n",
+      "========================\n",
+      "\n",
+      "=== Calling Function ===\n",
+      "Calling function: vector_index_2021 with args: {\n",
+      "  \"input\": \"risk factors\"\n",
+      "}\n",
+      "Got output: The COVID-19 pandemic and the impact of actions to mitigate the pandemic have adversely affected and may continue to adversely affect parts of our business. Our business would be adversely affected if Drivers were classified as employees, workers or quasi-employees instead of independent contractors. The mobility, delivery, and logistics industries are highly competitive, with well-established and low-cost alternatives that have been available for decades, low barriers to entry, low switching costs, and well-capitalized competitors in nearly every major geographic region. To remain competitive in certain markets, we have in the past lowered, and may continue to lower, fares or service fees, and we have in the past offered, and may continue to offer, significant Driver incentives and consumer discounts and promotions. We have incurred significant losses since inception, including in the United States and other major markets. We expect our operating expenses to increase significantly in the foreseeable future, and we may not achieve or maintain profitability. If we are unable to attract or maintain a critical mass of Drivers, consumers, merchants, shippers, and carriers, whether as a result of competition or other factors, our platform will become less appealing to platform users. Maintaining and enhancing our brand and reputation is critical to our business prospects. We have previously received significant media coverage and negative publicity regarding our brand and reputation, and while we have taken significant steps to rehabilitate our brand and reputation, failure to maintain and enhance our brand and reputation will cause our business to suffer. Our historical workplace culture and forward-leaning approach created operational, compliance, and cultural challenges and our efforts to address these challenges may not be successful. If we are unable to optimize our organizational structure or effectively manage our growth, our financial performance and future prospects will be adversely affected. Platform users may engage in, or be subject to, criminal, violent, inappropriate, or dangerous activity that results in major safety incidents, which may harm our ability to attract and retain Drivers, consumers, merchants, shippers, and carriers. We are making substantial investments in new offerings and technologies, and may increase such investments in the future. These new ventures are inherently risky, and we may never realize any expected benefits from them.\n",
+      "========================\n",
+      "\n",
+      "=== Calling Function ===\n",
+      "Calling function: vector_index_2020 with args: {\n",
+      "  \"input\": \"risk factors\"\n",
+      "}\n",
+      "Got output: The risk factors mentioned in the context include the adverse impact of the COVID-19 pandemic, potential reclassification of drivers as employees, intense competition in the mobility, delivery, and logistics industries, the need to lower fares and offer incentives to remain competitive, significant losses and increased operating expenses, the importance of attracting and maintaining platform users, operational and cultural challenges, negative media coverage affecting brand reputation, difficulties in managing growth and organizational structure, safety incidents, risks associated with new ventures and investments, legal uncertainties, challenges in international operations, currency fluctuations, tax consequences, financial reporting burdens, political and economic instability, public health concerns, and limited influence over minority-owned affiliates. These risk factors could have an adverse effect on the business, financial condition, operating results, and prospects of the company.\n",
+      "========================\n",
+      "\n",
+      "=== Calling Function ===\n",
+      "Calling function: vector_index_2019 with args: {\n",
+      "  \"input\": \"risk factors\"\n",
+      "}\n",
+      "Got output: The personal mobility, meal delivery, and logistics industries are highly competitive, with well-established and low-cost alternatives that have been available for decades, low barriers to entry, low switching costs, and well-capitalized competitors in nearly every major geographic region. If we are unable to compete effectively in these industries, our business and financial prospects would be adversely impacted.\n",
+      "========================\n",
+      "\n",
+      "Here is a comparison of the risk factors described in the Uber 10-K across years:\n",
+      "\n",
+      "2022:\n",
+      "- Potential failure to meet regulatory requirements related to climate change\n",
+      "- Impact of contagious diseases and pandemics on the business\n",
+      "- Occurrence of catastrophic events\n",
+      "- Uncertainty surrounding future pandemics or disease outbreaks\n",
+      "- Competitive nature of the mobility, delivery, and logistics industries\n",
+      "- Classification of drivers as employees instead of independent contractors\n",
+      "- Need to lower fares or service fees to remain competitive\n",
+      "- History of significant losses and anticipated increase in operating expenses\n",
+      "\n",
+      "2021:\n",
+      "- Adverse impact of the COVID-19 pandemic and actions to mitigate it\n",
+      "- Potential reclassification of drivers as employees instead of independent contractors\n",
+      "- Intense competition in the mobility, delivery, and logistics industries\n",
+      "- Need to lower fares or service fees and offer driver incentives and consumer discounts\n",
+      "- Significant losses incurred and uncertainty of achieving profitability\n",
+      "- Difficulty in attracting and maintaining a critical mass of platform users\n",
+      "- Operational, compliance, and cultural challenges\n",
+      "- Negative media coverage and reputation issues\n",
+      "- Inability to optimize organizational structure or manage growth effectively\n",
+      "- Safety incidents that harm the ability to attract and retain platform users\n",
+      "- Risks associated with substantial investments in new offerings and technologies\n",
+      "\n",
+      "2020:\n",
+      "- Adverse impact of the COVID-19 pandemic and actions taken to mitigate it\n",
+      "- Potential reclassification of drivers as employees, workers, or quasi-employees instead of independent contractors\n",
+      "- Intense competition in the mobility, delivery, and logistics industries\n",
+      "- Need to lower fares or service fees and offer driver incentives and consumer discounts\n",
+      "- Significant losses incurred and uncertainty of achieving profitability\n",
+      "- Difficulty in attracting and maintaining a critical mass of platform users\n",
+      "- Operational, compliance, and cultural challenges\n",
+      "- Negative media coverage and reputation issues\n",
+      "- Inability to optimize organizational structure or manage growth effectively\n",
+      "- Safety incidents that harm the ability to attract and retain platform users\n",
+      "- Risks associated with substantial investments in new offerings and technologies\n",
+      "- Potential fines or enforcement measures due to challenges faced\n",
+      "- Uncertainty and potential long-term financial impact of the COVID-19 pandemic\n",
+      "- Potential adverse impact from business partners and third-party vendors affected by the pandemic\n",
+      "- Volatility in financial markets and its effect on stock price and access to capital markets\n",
+      "\n",
+      "2019:\n",
+      "- Highly competitive personal mobility, meal delivery, and logistics industries\n",
+      "- Potential inability to compete effectively in these industries\n",
+      "\n",
+      "These bullet points highlight the similarities and differences in the risk factors described in the Uber 10-K across years.\n"
+     ]
+    }
+   ],
+   "source": [
+    "cross_query_str = (\n",
+    "    \"Compare/contrast the risk factors described in the Uber 10-K across\"\n",
+    "    \" years. Give answer in bullet points.\"\n",
+    ")\n",
+    "\n",
+    "response = agent.chat(cross_query_str)\n",
+    "print(str(response))"
+   ]
+  },
+  {
+   "attachments": {},
+   "cell_type": "markdown",
+   "id": "1153ee23",
+   "metadata": {},
+   "source": [
+    "### Setting up the Chatbot Loop\n",
+    "\n",
+    "Now that we have the chatbot setup, it only takes a few more steps to setup a basic interactive loop to chat with our SEC-augmented chatbot!"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "5fa14fa6",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/html": [
+       "\n",
+       "  <style>\n",
+       "    pre {\n",
+       "        white-space: pre-wrap;\n",
+       "    }\n",
+       "  </style>\n",
+       "  "
+      ],
+      "text/plain": [
+       "<IPython.core.display.HTML object>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Agent: In 2022, Uber is facing several legal proceedings. Here are some of them:\n",
+      "\n",
+      "1. California: The state Attorney General and city attorneys filed a complaint against Uber and Lyft, alleging that drivers are misclassified as independent contractors. A preliminary injunction was issued but stayed pending appeal. The Court of Appeal affirmed the lower court's ruling, and Uber filed a petition for review with the California Supreme Court. However, the Supreme Court declined the petition for review. The lawsuit is ongoing, focusing on claims by the California Attorney General for periods prior to the enactment of Proposition 22.\n",
+      "\n",
+      "2. Massachusetts: The Attorney General of Massachusetts filed a complaint against Uber, alleging that drivers are employees entitled to wage and labor law protections. Uber's motion to dismiss the complaint was denied, and a summary judgment motion is pending.\n",
+      "\n",
+      "3. New York: Uber is facing allegations of misclassification and employment violations by the state Attorney General. The resolution of this matter is uncertain.\n",
+      "\n",
+      "4. Switzerland: Several administrative bodies in Switzerland have issued rulings classifying Uber drivers as employees for social security or labor purposes. Uber is challenging these rulings before the Social Security and Administrative Tribunals.\n",
+      "\n",
+      "These are some of the legal proceedings against Uber in 2022. The outcomes and potential losses in these cases are uncertain.\n"
+     ]
+    }
+   ],
+   "source": [
+    "agent = OpenAIAgent.from_tools(tools)  # verbose=False by default\n",
+    "\n",
+    "while True:\n",
+    "    text_input = input(\"User: \")\n",
+    "    if text_input == \"exit\":\n",
+    "        break\n",
+    "    response = agent.chat(text_input)\n",
+    "    print(f\"Agent: {response}\")\n",
+    "\n",
+    "# User: What were some of the legal proceedings against Uber in 2022?"
+   ]
+  }
+ ],
+ "metadata": {
+  "colab": {
+   "provenance": []
+  },
+  "kernelspec": {
+   "display_name": "Python 3 (ipykernel)",
+   "language": "python",
+   "name": "python3"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 3
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython3"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/docs/examples/agent/agent_builder.ipynb b/docs/docs/examples/agent/agent_builder.ipynb
similarity index 100%
rename from docs/examples/agent/agent_builder.ipynb
rename to docs/docs/examples/agent/agent_builder.ipynb
diff --git a/docs/examples/agent/agent_runner/agent_around_query_pipeline_with_HyDE_for_PDFs.ipynb b/docs/docs/examples/agent/agent_runner/agent_around_query_pipeline_with_HyDE_for_PDFs.ipynb
similarity index 100%
rename from docs/examples/agent/agent_runner/agent_around_query_pipeline_with_HyDE_for_PDFs.ipynb
rename to docs/docs/examples/agent/agent_runner/agent_around_query_pipeline_with_HyDE_for_PDFs.ipynb
diff --git a/docs/examples/agent/agent_runner/agent_runner.ipynb b/docs/docs/examples/agent/agent_runner/agent_runner.ipynb
similarity index 100%
rename from docs/examples/agent/agent_runner/agent_runner.ipynb
rename to docs/docs/examples/agent/agent_runner/agent_runner.ipynb
diff --git a/docs/examples/agent/agent_runner/agent_runner_rag.ipynb b/docs/docs/examples/agent/agent_runner/agent_runner_rag.ipynb
similarity index 100%
rename from docs/examples/agent/agent_runner/agent_runner_rag.ipynb
rename to docs/docs/examples/agent/agent_runner/agent_runner_rag.ipynb
diff --git a/docs/examples/agent/agent_runner/agent_runner_rag_controllable.ipynb b/docs/docs/examples/agent/agent_runner/agent_runner_rag_controllable.ipynb
similarity index 100%
rename from docs/examples/agent/agent_runner/agent_runner_rag_controllable.ipynb
rename to docs/docs/examples/agent/agent_runner/agent_runner_rag_controllable.ipynb
diff --git a/docs/examples/agent/agent_runner/query_pipeline_agent.ipynb b/docs/docs/examples/agent/agent_runner/query_pipeline_agent.ipynb
similarity index 100%
rename from docs/examples/agent/agent_runner/query_pipeline_agent.ipynb
rename to docs/docs/examples/agent/agent_runner/query_pipeline_agent.ipynb
diff --git a/docs/examples/agent/custom_agent.ipynb b/docs/docs/examples/agent/custom_agent.ipynb
similarity index 100%
rename from docs/examples/agent/custom_agent.ipynb
rename to docs/docs/examples/agent/custom_agent.ipynb
diff --git a/docs/examples/agent/multi_document_agents-v1.ipynb b/docs/docs/examples/agent/multi_document_agents-v1.ipynb
similarity index 100%
rename from docs/examples/agent/multi_document_agents-v1.ipynb
rename to docs/docs/examples/agent/multi_document_agents-v1.ipynb
diff --git a/docs/examples/agent/multi_document_agents.ipynb b/docs/docs/examples/agent/multi_document_agents.ipynb
similarity index 100%
rename from docs/examples/agent/multi_document_agents.ipynb
rename to docs/docs/examples/agent/multi_document_agents.ipynb
diff --git a/docs/examples/agent/openai_agent.ipynb b/docs/docs/examples/agent/openai_agent.ipynb
similarity index 100%
rename from docs/examples/agent/openai_agent.ipynb
rename to docs/docs/examples/agent/openai_agent.ipynb
diff --git a/docs/examples/agent/openai_agent_context_retrieval.ipynb b/docs/docs/examples/agent/openai_agent_context_retrieval.ipynb
similarity index 100%
rename from docs/examples/agent/openai_agent_context_retrieval.ipynb
rename to docs/docs/examples/agent/openai_agent_context_retrieval.ipynb
diff --git a/docs/examples/agent/openai_agent_parallel_function_calling.ipynb b/docs/docs/examples/agent/openai_agent_parallel_function_calling.ipynb
similarity index 100%
rename from docs/examples/agent/openai_agent_parallel_function_calling.ipynb
rename to docs/docs/examples/agent/openai_agent_parallel_function_calling.ipynb
diff --git a/docs/examples/agent/openai_agent_query_cookbook.ipynb b/docs/docs/examples/agent/openai_agent_query_cookbook.ipynb
similarity index 100%
rename from docs/examples/agent/openai_agent_query_cookbook.ipynb
rename to docs/docs/examples/agent/openai_agent_query_cookbook.ipynb
diff --git a/docs/examples/agent/openai_agent_query_plan.ipynb b/docs/docs/examples/agent/openai_agent_query_plan.ipynb
similarity index 100%
rename from docs/examples/agent/openai_agent_query_plan.ipynb
rename to docs/docs/examples/agent/openai_agent_query_plan.ipynb
diff --git a/docs/examples/agent/openai_agent_retrieval.ipynb b/docs/docs/examples/agent/openai_agent_retrieval.ipynb
similarity index 100%
rename from docs/examples/agent/openai_agent_retrieval.ipynb
rename to docs/docs/examples/agent/openai_agent_retrieval.ipynb
diff --git a/docs/examples/agent/openai_agent_with_query_engine.ipynb b/docs/docs/examples/agent/openai_agent_with_query_engine.ipynb
similarity index 100%
rename from docs/examples/agent/openai_agent_with_query_engine.ipynb
rename to docs/docs/examples/agent/openai_agent_with_query_engine.ipynb
diff --git a/docs/examples/agent/openai_assistant_agent.ipynb b/docs/docs/examples/agent/openai_assistant_agent.ipynb
similarity index 100%
rename from docs/examples/agent/openai_assistant_agent.ipynb
rename to docs/docs/examples/agent/openai_assistant_agent.ipynb
diff --git a/docs/examples/agent/openai_assistant_query_cookbook.ipynb b/docs/docs/examples/agent/openai_assistant_query_cookbook.ipynb
similarity index 100%
rename from docs/examples/agent/openai_assistant_query_cookbook.ipynb
rename to docs/docs/examples/agent/openai_assistant_query_cookbook.ipynb
diff --git a/docs/examples/agent/openai_forced_function_call.ipynb b/docs/docs/examples/agent/openai_forced_function_call.ipynb
similarity index 100%
rename from docs/examples/agent/openai_forced_function_call.ipynb
rename to docs/docs/examples/agent/openai_forced_function_call.ipynb
diff --git a/docs/examples/agent/openai_retrieval_benchmark.ipynb b/docs/docs/examples/agent/openai_retrieval_benchmark.ipynb
similarity index 100%
rename from docs/examples/agent/openai_retrieval_benchmark.ipynb
rename to docs/docs/examples/agent/openai_retrieval_benchmark.ipynb
diff --git a/docs/examples/agent/react_agent.ipynb b/docs/docs/examples/agent/react_agent.ipynb
similarity index 100%
rename from docs/examples/agent/react_agent.ipynb
rename to docs/docs/examples/agent/react_agent.ipynb
diff --git a/docs/examples/agent/react_agent_with_query_engine.ipynb b/docs/docs/examples/agent/react_agent_with_query_engine.ipynb
similarity index 100%
rename from docs/examples/agent/react_agent_with_query_engine.ipynb
rename to docs/docs/examples/agent/react_agent_with_query_engine.ipynb
diff --git a/docs/examples/callbacks/AimCallback.ipynb b/docs/docs/examples/callbacks/AimCallback.ipynb
similarity index 100%
rename from docs/examples/callbacks/AimCallback.ipynb
rename to docs/docs/examples/callbacks/AimCallback.ipynb
diff --git a/docs/examples/callbacks/HoneyHiveLlamaIndexTracer.ipynb b/docs/docs/examples/callbacks/HoneyHiveLlamaIndexTracer.ipynb
similarity index 100%
rename from docs/examples/callbacks/HoneyHiveLlamaIndexTracer.ipynb
rename to docs/docs/examples/callbacks/HoneyHiveLlamaIndexTracer.ipynb
diff --git a/docs/examples/callbacks/LangfuseCallbackHandler.ipynb b/docs/docs/examples/callbacks/LangfuseCallbackHandler.ipynb
similarity index 100%
rename from docs/examples/callbacks/LangfuseCallbackHandler.ipynb
rename to docs/docs/examples/callbacks/LangfuseCallbackHandler.ipynb
diff --git a/docs/examples/callbacks/LlamaDebugHandler.ipynb b/docs/docs/examples/callbacks/LlamaDebugHandler.ipynb
similarity index 100%
rename from docs/examples/callbacks/LlamaDebugHandler.ipynb
rename to docs/docs/examples/callbacks/LlamaDebugHandler.ipynb
diff --git a/docs/examples/callbacks/OpenInferenceCallback.ipynb b/docs/docs/examples/callbacks/OpenInferenceCallback.ipynb
similarity index 100%
rename from docs/examples/callbacks/OpenInferenceCallback.ipynb
rename to docs/docs/examples/callbacks/OpenInferenceCallback.ipynb
diff --git a/docs/examples/callbacks/OpenLLMetry.ipynb b/docs/docs/examples/callbacks/OpenLLMetry.ipynb
similarity index 100%
rename from docs/examples/callbacks/OpenLLMetry.ipynb
rename to docs/docs/examples/callbacks/OpenLLMetry.ipynb
diff --git a/docs/examples/callbacks/PromptLayerHandler.ipynb b/docs/docs/examples/callbacks/PromptLayerHandler.ipynb
similarity index 100%
rename from docs/examples/callbacks/PromptLayerHandler.ipynb
rename to docs/docs/examples/callbacks/PromptLayerHandler.ipynb
diff --git a/docs/examples/callbacks/TokenCountingHandler.ipynb b/docs/docs/examples/callbacks/TokenCountingHandler.ipynb
similarity index 100%
rename from docs/examples/callbacks/TokenCountingHandler.ipynb
rename to docs/docs/examples/callbacks/TokenCountingHandler.ipynb
diff --git a/docs/examples/callbacks/UpTrainCallback.ipynb b/docs/docs/examples/callbacks/UpTrainCallback.ipynb
similarity index 100%
rename from docs/examples/callbacks/UpTrainCallback.ipynb
rename to docs/docs/examples/callbacks/UpTrainCallback.ipynb
diff --git a/docs/examples/callbacks/WandbCallbackHandler.ipynb b/docs/docs/examples/callbacks/WandbCallbackHandler.ipynb
similarity index 100%
rename from docs/examples/callbacks/WandbCallbackHandler.ipynb
rename to docs/docs/examples/callbacks/WandbCallbackHandler.ipynb
diff --git a/docs/examples/chat_engine/chat_engine_best.ipynb b/docs/docs/examples/chat_engine/chat_engine_best.ipynb
similarity index 100%
rename from docs/examples/chat_engine/chat_engine_best.ipynb
rename to docs/docs/examples/chat_engine/chat_engine_best.ipynb
diff --git a/docs/examples/chat_engine/chat_engine_condense_plus_context.ipynb b/docs/docs/examples/chat_engine/chat_engine_condense_plus_context.ipynb
similarity index 100%
rename from docs/examples/chat_engine/chat_engine_condense_plus_context.ipynb
rename to docs/docs/examples/chat_engine/chat_engine_condense_plus_context.ipynb
diff --git a/docs/examples/chat_engine/chat_engine_condense_question.ipynb b/docs/docs/examples/chat_engine/chat_engine_condense_question.ipynb
similarity index 100%
rename from docs/examples/chat_engine/chat_engine_condense_question.ipynb
rename to docs/docs/examples/chat_engine/chat_engine_condense_question.ipynb
diff --git a/docs/examples/chat_engine/chat_engine_context.ipynb b/docs/docs/examples/chat_engine/chat_engine_context.ipynb
similarity index 100%
rename from docs/examples/chat_engine/chat_engine_context.ipynb
rename to docs/docs/examples/chat_engine/chat_engine_context.ipynb
diff --git a/docs/examples/chat_engine/chat_engine_openai.ipynb b/docs/docs/examples/chat_engine/chat_engine_openai.ipynb
similarity index 100%
rename from docs/examples/chat_engine/chat_engine_openai.ipynb
rename to docs/docs/examples/chat_engine/chat_engine_openai.ipynb
diff --git a/docs/examples/chat_engine/chat_engine_personality.ipynb b/docs/docs/examples/chat_engine/chat_engine_personality.ipynb
similarity index 100%
rename from docs/examples/chat_engine/chat_engine_personality.ipynb
rename to docs/docs/examples/chat_engine/chat_engine_personality.ipynb
diff --git a/docs/examples/chat_engine/chat_engine_react.ipynb b/docs/docs/examples/chat_engine/chat_engine_react.ipynb
similarity index 100%
rename from docs/examples/chat_engine/chat_engine_react.ipynb
rename to docs/docs/examples/chat_engine/chat_engine_react.ipynb
diff --git a/docs/examples/chat_engine/chat_engine_repl.ipynb b/docs/docs/examples/chat_engine/chat_engine_repl.ipynb
similarity index 100%
rename from docs/examples/chat_engine/chat_engine_repl.ipynb
rename to docs/docs/examples/chat_engine/chat_engine_repl.ipynb
diff --git a/docs/examples/citation/pdf_page_reference.ipynb b/docs/docs/examples/citation/pdf_page_reference.ipynb
similarity index 100%
rename from docs/examples/citation/pdf_page_reference.ipynb
rename to docs/docs/examples/citation/pdf_page_reference.ipynb
diff --git a/docs/cookbooks/anthropic_haiku.ipynb b/docs/docs/examples/cookbooks/anthropic_haiku.ipynb
similarity index 100%
rename from docs/cookbooks/anthropic_haiku.ipynb
rename to docs/docs/examples/cookbooks/anthropic_haiku.ipynb
diff --git a/docs/cookbooks/mistralai.ipynb b/docs/docs/examples/cookbooks/mistralai.ipynb
similarity index 100%
rename from docs/cookbooks/mistralai.ipynb
rename to docs/docs/examples/cookbooks/mistralai.ipynb
diff --git a/docs/cookbooks/mixedbread_reranker.ipynb b/docs/docs/examples/cookbooks/mixedbread_reranker.ipynb
similarity index 100%
rename from docs/cookbooks/mixedbread_reranker.ipynb
rename to docs/docs/examples/cookbooks/mixedbread_reranker.ipynb
diff --git a/docs/examples/customization/llms/AzureOpenAI.ipynb b/docs/docs/examples/customization/llms/AzureOpenAI.ipynb
similarity index 100%
rename from docs/examples/customization/llms/AzureOpenAI.ipynb
rename to docs/docs/examples/customization/llms/AzureOpenAI.ipynb
diff --git a/docs/examples/customization/llms/SimpleIndexDemo-ChatGPT.ipynb b/docs/docs/examples/customization/llms/SimpleIndexDemo-ChatGPT.ipynb
similarity index 100%
rename from docs/examples/customization/llms/SimpleIndexDemo-ChatGPT.ipynb
rename to docs/docs/examples/customization/llms/SimpleIndexDemo-ChatGPT.ipynb
diff --git a/docs/examples/customization/llms/SimpleIndexDemo-Huggingface_camel.ipynb b/docs/docs/examples/customization/llms/SimpleIndexDemo-Huggingface_camel.ipynb
similarity index 100%
rename from docs/examples/customization/llms/SimpleIndexDemo-Huggingface_camel.ipynb
rename to docs/docs/examples/customization/llms/SimpleIndexDemo-Huggingface_camel.ipynb
diff --git a/docs/examples/customization/llms/SimpleIndexDemo-Huggingface_stablelm.ipynb b/docs/docs/examples/customization/llms/SimpleIndexDemo-Huggingface_stablelm.ipynb
similarity index 100%
rename from docs/examples/customization/llms/SimpleIndexDemo-Huggingface_stablelm.ipynb
rename to docs/docs/examples/customization/llms/SimpleIndexDemo-Huggingface_stablelm.ipynb
diff --git a/docs/examples/customization/prompts/chat_prompts.ipynb b/docs/docs/examples/customization/prompts/chat_prompts.ipynb
similarity index 100%
rename from docs/examples/customization/prompts/chat_prompts.ipynb
rename to docs/docs/examples/customization/prompts/chat_prompts.ipynb
diff --git a/docs/examples/customization/prompts/completion_prompts.ipynb b/docs/docs/examples/customization/prompts/completion_prompts.ipynb
similarity index 100%
rename from docs/examples/customization/prompts/completion_prompts.ipynb
rename to docs/docs/examples/customization/prompts/completion_prompts.ipynb
diff --git a/docs/examples/customization/streaming/SimpleIndexDemo-streaming.ipynb b/docs/docs/examples/customization/streaming/SimpleIndexDemo-streaming.ipynb
similarity index 100%
rename from docs/examples/customization/streaming/SimpleIndexDemo-streaming.ipynb
rename to docs/docs/examples/customization/streaming/SimpleIndexDemo-streaming.ipynb
diff --git a/docs/examples/customization/streaming/chat_engine_condense_question_stream_response.ipynb b/docs/docs/examples/customization/streaming/chat_engine_condense_question_stream_response.ipynb
similarity index 100%
rename from docs/examples/customization/streaming/chat_engine_condense_question_stream_response.ipynb
rename to docs/docs/examples/customization/streaming/chat_engine_condense_question_stream_response.ipynb
diff --git a/docs/examples/data/10k/lyft_2021.pdf b/docs/docs/examples/data/10k/lyft_2021.pdf
similarity index 100%
rename from docs/examples/data/10k/lyft_2021.pdf
rename to docs/docs/examples/data/10k/lyft_2021.pdf
diff --git a/docs/examples/data/10k/uber_2021.pdf b/docs/docs/examples/data/10k/uber_2021.pdf
similarity index 100%
rename from docs/examples/data/10k/uber_2021.pdf
rename to docs/docs/examples/data/10k/uber_2021.pdf
diff --git a/docs/examples/data/10q/uber_10q_june_2022.pdf b/docs/docs/examples/data/10q/uber_10q_june_2022.pdf
similarity index 100%
rename from docs/examples/data/10q/uber_10q_june_2022.pdf
rename to docs/docs/examples/data/10q/uber_10q_june_2022.pdf
diff --git a/docs/examples/data/10q/uber_10q_march_2022.pdf b/docs/docs/examples/data/10q/uber_10q_march_2022.pdf
similarity index 100%
rename from docs/examples/data/10q/uber_10q_march_2022.pdf
rename to docs/docs/examples/data/10q/uber_10q_march_2022.pdf
diff --git a/docs/examples/data/10q/uber_10q_sept_2022.pdf b/docs/docs/examples/data/10q/uber_10q_sept_2022.pdf
similarity index 100%
rename from docs/examples/data/10q/uber_10q_sept_2022.pdf
rename to docs/docs/examples/data/10q/uber_10q_sept_2022.pdf
diff --git a/docs/examples/data/csv/commit_history.csv b/docs/docs/examples/data/csv/commit_history.csv
similarity index 100%
rename from docs/examples/data/csv/commit_history.csv
rename to docs/docs/examples/data/csv/commit_history.csv
diff --git a/docs/examples/data/csv/titanic_train.csv b/docs/docs/examples/data/csv/titanic_train.csv
similarity index 100%
rename from docs/examples/data/csv/titanic_train.csv
rename to docs/docs/examples/data/csv/titanic_train.csv
diff --git a/docs/examples/data/email/ark-trading-jan-12-2024.eml b/docs/docs/examples/data/email/ark-trading-jan-12-2024.eml
similarity index 100%
rename from docs/examples/data/email/ark-trading-jan-12-2024.eml
rename to docs/docs/examples/data/email/ark-trading-jan-12-2024.eml
diff --git a/docs/examples/data/email/ark-trading-jan-12-2024.msg b/docs/docs/examples/data/email/ark-trading-jan-12-2024.msg
similarity index 100%
rename from docs/examples/data/email/ark-trading-jan-12-2024.msg
rename to docs/docs/examples/data/email/ark-trading-jan-12-2024.msg
diff --git a/docs/examples/data/gpt4_experiments/llama2_mistral.png b/docs/docs/examples/data/gpt4_experiments/llama2_mistral.png
similarity index 100%
rename from docs/examples/data/gpt4_experiments/llama2_mistral.png
rename to docs/docs/examples/data/gpt4_experiments/llama2_mistral.png
diff --git a/docs/examples/data/gpt4_experiments/llama2_model_analysis.png b/docs/docs/examples/data/gpt4_experiments/llama2_model_analysis.png
similarity index 100%
rename from docs/examples/data/gpt4_experiments/llama2_model_analysis.png
rename to docs/docs/examples/data/gpt4_experiments/llama2_model_analysis.png
diff --git a/docs/examples/data/gpt4_experiments/llama2_violations_charts.png b/docs/docs/examples/data/gpt4_experiments/llama2_violations_charts.png
similarity index 100%
rename from docs/examples/data/gpt4_experiments/llama2_violations_charts.png
rename to docs/docs/examples/data/gpt4_experiments/llama2_violations_charts.png
diff --git a/docs/examples/data/images/ark_email_sample.PNG b/docs/docs/examples/data/images/ark_email_sample.PNG
similarity index 100%
rename from docs/examples/data/images/ark_email_sample.PNG
rename to docs/docs/examples/data/images/ark_email_sample.PNG
diff --git a/docs/examples/data/images/prometheus_paper_card.png b/docs/docs/examples/data/images/prometheus_paper_card.png
similarity index 100%
rename from docs/examples/data/images/prometheus_paper_card.png
rename to docs/docs/examples/data/images/prometheus_paper_card.png
diff --git a/docs/examples/data/paul_graham/paul_graham_essay.txt b/docs/docs/examples/data/paul_graham/paul_graham_essay.txt
similarity index 100%
rename from docs/examples/data/paul_graham/paul_graham_essay.txt
rename to docs/docs/examples/data/paul_graham/paul_graham_essay.txt
diff --git a/docs/examples/data_connectors/ChromaDemo.ipynb b/docs/docs/examples/data_connectors/ChromaDemo.ipynb
similarity index 100%
rename from docs/examples/data_connectors/ChromaDemo.ipynb
rename to docs/docs/examples/data_connectors/ChromaDemo.ipynb
diff --git a/docs/examples/data_connectors/DashvectorReaderDemo.ipynb b/docs/docs/examples/data_connectors/DashvectorReaderDemo.ipynb
similarity index 100%
rename from docs/examples/data_connectors/DashvectorReaderDemo.ipynb
rename to docs/docs/examples/data_connectors/DashvectorReaderDemo.ipynb
diff --git a/docs/examples/data_connectors/DatabaseReaderDemo.ipynb b/docs/docs/examples/data_connectors/DatabaseReaderDemo.ipynb
similarity index 100%
rename from docs/examples/data_connectors/DatabaseReaderDemo.ipynb
rename to docs/docs/examples/data_connectors/DatabaseReaderDemo.ipynb
diff --git a/docs/examples/data_connectors/DeepLakeReader.ipynb b/docs/docs/examples/data_connectors/DeepLakeReader.ipynb
similarity index 100%
rename from docs/examples/data_connectors/DeepLakeReader.ipynb
rename to docs/docs/examples/data_connectors/DeepLakeReader.ipynb
diff --git a/docs/examples/data_connectors/DiscordDemo.ipynb b/docs/docs/examples/data_connectors/DiscordDemo.ipynb
similarity index 100%
rename from docs/examples/data_connectors/DiscordDemo.ipynb
rename to docs/docs/examples/data_connectors/DiscordDemo.ipynb
diff --git a/docs/examples/data_connectors/FaissDemo.ipynb b/docs/docs/examples/data_connectors/FaissDemo.ipynb
similarity index 100%
rename from docs/examples/data_connectors/FaissDemo.ipynb
rename to docs/docs/examples/data_connectors/FaissDemo.ipynb
diff --git a/docs/examples/data_connectors/GithubRepositoryReaderDemo.ipynb b/docs/docs/examples/data_connectors/GithubRepositoryReaderDemo.ipynb
similarity index 100%
rename from docs/examples/data_connectors/GithubRepositoryReaderDemo.ipynb
rename to docs/docs/examples/data_connectors/GithubRepositoryReaderDemo.ipynb
diff --git a/docs/examples/data_connectors/GoogleDocsDemo.ipynb b/docs/docs/examples/data_connectors/GoogleDocsDemo.ipynb
similarity index 100%
rename from docs/examples/data_connectors/GoogleDocsDemo.ipynb
rename to docs/docs/examples/data_connectors/GoogleDocsDemo.ipynb
diff --git a/docs/examples/data_connectors/GoogleSheetsDemo.ipynb b/docs/docs/examples/data_connectors/GoogleSheetsDemo.ipynb
similarity index 100%
rename from docs/examples/data_connectors/GoogleSheetsDemo.ipynb
rename to docs/docs/examples/data_connectors/GoogleSheetsDemo.ipynb
diff --git a/docs/examples/data_connectors/MakeDemo.ipynb b/docs/docs/examples/data_connectors/MakeDemo.ipynb
similarity index 100%
rename from docs/examples/data_connectors/MakeDemo.ipynb
rename to docs/docs/examples/data_connectors/MakeDemo.ipynb
diff --git a/docs/examples/data_connectors/MboxReaderDemo.ipynb b/docs/docs/examples/data_connectors/MboxReaderDemo.ipynb
similarity index 100%
rename from docs/examples/data_connectors/MboxReaderDemo.ipynb
rename to docs/docs/examples/data_connectors/MboxReaderDemo.ipynb
diff --git a/docs/examples/data_connectors/MilvusReaderDemo.ipynb b/docs/docs/examples/data_connectors/MilvusReaderDemo.ipynb
similarity index 100%
rename from docs/examples/data_connectors/MilvusReaderDemo.ipynb
rename to docs/docs/examples/data_connectors/MilvusReaderDemo.ipynb
diff --git a/docs/examples/data_connectors/MongoDemo.ipynb b/docs/docs/examples/data_connectors/MongoDemo.ipynb
similarity index 100%
rename from docs/examples/data_connectors/MongoDemo.ipynb
rename to docs/docs/examples/data_connectors/MongoDemo.ipynb
diff --git a/docs/examples/data_connectors/MyScaleReaderDemo.ipynb b/docs/docs/examples/data_connectors/MyScaleReaderDemo.ipynb
similarity index 100%
rename from docs/examples/data_connectors/MyScaleReaderDemo.ipynb
rename to docs/docs/examples/data_connectors/MyScaleReaderDemo.ipynb
diff --git a/docs/examples/data_connectors/NotionDemo.ipynb b/docs/docs/examples/data_connectors/NotionDemo.ipynb
similarity index 100%
rename from docs/examples/data_connectors/NotionDemo.ipynb
rename to docs/docs/examples/data_connectors/NotionDemo.ipynb
diff --git a/docs/examples/data_connectors/ObsidianReaderDemo.ipynb b/docs/docs/examples/data_connectors/ObsidianReaderDemo.ipynb
similarity index 100%
rename from docs/examples/data_connectors/ObsidianReaderDemo.ipynb
rename to docs/docs/examples/data_connectors/ObsidianReaderDemo.ipynb
diff --git a/docs/examples/data_connectors/PathwayReaderDemo.ipynb b/docs/docs/examples/data_connectors/PathwayReaderDemo.ipynb
similarity index 100%
rename from docs/examples/data_connectors/PathwayReaderDemo.ipynb
rename to docs/docs/examples/data_connectors/PathwayReaderDemo.ipynb
diff --git a/docs/examples/data_connectors/PineconeDemo.ipynb b/docs/docs/examples/data_connectors/PineconeDemo.ipynb
similarity index 100%
rename from docs/examples/data_connectors/PineconeDemo.ipynb
rename to docs/docs/examples/data_connectors/PineconeDemo.ipynb
diff --git a/docs/examples/data_connectors/PsychicDemo.ipynb b/docs/docs/examples/data_connectors/PsychicDemo.ipynb
similarity index 100%
rename from docs/examples/data_connectors/PsychicDemo.ipynb
rename to docs/docs/examples/data_connectors/PsychicDemo.ipynb
diff --git a/docs/examples/data_connectors/QdrantDemo.ipynb b/docs/docs/examples/data_connectors/QdrantDemo.ipynb
similarity index 100%
rename from docs/examples/data_connectors/QdrantDemo.ipynb
rename to docs/docs/examples/data_connectors/QdrantDemo.ipynb
diff --git a/docs/examples/data_connectors/SlackDemo.ipynb b/docs/docs/examples/data_connectors/SlackDemo.ipynb
similarity index 100%
rename from docs/examples/data_connectors/SlackDemo.ipynb
rename to docs/docs/examples/data_connectors/SlackDemo.ipynb
diff --git a/docs/examples/data_connectors/TwitterDemo.ipynb b/docs/docs/examples/data_connectors/TwitterDemo.ipynb
similarity index 100%
rename from docs/examples/data_connectors/TwitterDemo.ipynb
rename to docs/docs/examples/data_connectors/TwitterDemo.ipynb
diff --git a/docs/examples/data_connectors/WeaviateDemo.ipynb b/docs/docs/examples/data_connectors/WeaviateDemo.ipynb
similarity index 100%
rename from docs/examples/data_connectors/WeaviateDemo.ipynb
rename to docs/docs/examples/data_connectors/WeaviateDemo.ipynb
diff --git a/docs/examples/data_connectors/WebPageDemo.ipynb b/docs/docs/examples/data_connectors/WebPageDemo.ipynb
similarity index 100%
rename from docs/examples/data_connectors/WebPageDemo.ipynb
rename to docs/docs/examples/data_connectors/WebPageDemo.ipynb
diff --git a/docs/examples/data_connectors/deplot/DeplotReader.ipynb b/docs/docs/examples/data_connectors/deplot/DeplotReader.ipynb
similarity index 100%
rename from docs/examples/data_connectors/deplot/DeplotReader.ipynb
rename to docs/docs/examples/data_connectors/deplot/DeplotReader.ipynb
diff --git a/docs/examples/data_connectors/deplot/biden_popularity.png b/docs/docs/examples/data_connectors/deplot/biden_popularity.png
similarity index 100%
rename from docs/examples/data_connectors/deplot/biden_popularity.png
rename to docs/docs/examples/data_connectors/deplot/biden_popularity.png
diff --git a/docs/examples/data_connectors/deplot/marine_chart.png b/docs/docs/examples/data_connectors/deplot/marine_chart.png
similarity index 100%
rename from docs/examples/data_connectors/deplot/marine_chart.png
rename to docs/docs/examples/data_connectors/deplot/marine_chart.png
diff --git a/docs/examples/data_connectors/deplot/pew1.png b/docs/docs/examples/data_connectors/deplot/pew1.png
similarity index 100%
rename from docs/examples/data_connectors/deplot/pew1.png
rename to docs/docs/examples/data_connectors/deplot/pew1.png
diff --git a/docs/examples/data_connectors/html_tag_reader.ipynb b/docs/docs/examples/data_connectors/html_tag_reader.ipynb
similarity index 100%
rename from docs/examples/data_connectors/html_tag_reader.ipynb
rename to docs/docs/examples/data_connectors/html_tag_reader.ipynb
diff --git a/docs/examples/data_connectors/simple_directory_reader.ipynb b/docs/docs/examples/data_connectors/simple_directory_reader.ipynb
similarity index 100%
rename from docs/examples/data_connectors/simple_directory_reader.ipynb
rename to docs/docs/examples/data_connectors/simple_directory_reader.ipynb
diff --git a/docs/examples/data_connectors/simple_directory_reader_parallel.ipynb b/docs/docs/examples/data_connectors/simple_directory_reader_parallel.ipynb
similarity index 100%
rename from docs/examples/data_connectors/simple_directory_reader_parallel.ipynb
rename to docs/docs/examples/data_connectors/simple_directory_reader_parallel.ipynb
diff --git a/docs/examples/data_connectors/simple_directory_reader_remote_fs.ipynb b/docs/docs/examples/data_connectors/simple_directory_reader_remote_fs.ipynb
similarity index 100%
rename from docs/examples/data_connectors/simple_directory_reader_remote_fs.ipynb
rename to docs/docs/examples/data_connectors/simple_directory_reader_remote_fs.ipynb
diff --git a/docs/examples/discover_llamaindex/document_management/BUILD b/docs/docs/examples/discover_llamaindex/document_management/BUILD
similarity index 100%
rename from docs/examples/discover_llamaindex/document_management/BUILD
rename to docs/docs/examples/discover_llamaindex/document_management/BUILD
diff --git a/docs/examples/discover_llamaindex/document_management/Discord_Thread_Management.ipynb b/docs/docs/examples/discover_llamaindex/document_management/Discord_Thread_Management.ipynb
similarity index 100%
rename from docs/examples/discover_llamaindex/document_management/Discord_Thread_Management.ipynb
rename to docs/docs/examples/discover_llamaindex/document_management/Discord_Thread_Management.ipynb
diff --git a/docs/examples/discover_llamaindex/document_management/discord_dumps/help_channel_dump_05_25_23.json b/docs/docs/examples/discover_llamaindex/document_management/discord_dumps/help_channel_dump_05_25_23.json
similarity index 100%
rename from docs/examples/discover_llamaindex/document_management/discord_dumps/help_channel_dump_05_25_23.json
rename to docs/docs/examples/discover_llamaindex/document_management/discord_dumps/help_channel_dump_05_25_23.json
diff --git a/docs/examples/discover_llamaindex/document_management/discord_dumps/help_channel_dump_06_02_23.json b/docs/docs/examples/discover_llamaindex/document_management/discord_dumps/help_channel_dump_06_02_23.json
similarity index 100%
rename from docs/examples/discover_llamaindex/document_management/discord_dumps/help_channel_dump_06_02_23.json
rename to docs/docs/examples/discover_llamaindex/document_management/discord_dumps/help_channel_dump_06_02_23.json
diff --git a/docs/examples/discover_llamaindex/document_management/group_conversations.py b/docs/docs/examples/discover_llamaindex/document_management/group_conversations.py
similarity index 100%
rename from docs/examples/discover_llamaindex/document_management/group_conversations.py
rename to docs/docs/examples/discover_llamaindex/document_management/group_conversations.py
diff --git a/docs/examples/docstore/DocstoreDemo.ipynb b/docs/docs/examples/docstore/DocstoreDemo.ipynb
similarity index 100%
rename from docs/examples/docstore/DocstoreDemo.ipynb
rename to docs/docs/examples/docstore/DocstoreDemo.ipynb
diff --git a/docs/examples/docstore/DynamoDBDocstoreDemo.ipynb b/docs/docs/examples/docstore/DynamoDBDocstoreDemo.ipynb
similarity index 100%
rename from docs/examples/docstore/DynamoDBDocstoreDemo.ipynb
rename to docs/docs/examples/docstore/DynamoDBDocstoreDemo.ipynb
diff --git a/docs/examples/docstore/FirestoreDemo.ipynb b/docs/docs/examples/docstore/FirestoreDemo.ipynb
similarity index 100%
rename from docs/examples/docstore/FirestoreDemo.ipynb
rename to docs/docs/examples/docstore/FirestoreDemo.ipynb
diff --git a/docs/examples/docstore/MongoDocstoreDemo.ipynb b/docs/docs/examples/docstore/MongoDocstoreDemo.ipynb
similarity index 100%
rename from docs/examples/docstore/MongoDocstoreDemo.ipynb
rename to docs/docs/examples/docstore/MongoDocstoreDemo.ipynb
diff --git a/docs/examples/docstore/RedisDocstoreIndexStoreDemo.ipynb b/docs/docs/examples/docstore/RedisDocstoreIndexStoreDemo.ipynb
similarity index 100%
rename from docs/examples/docstore/RedisDocstoreIndexStoreDemo.ipynb
rename to docs/docs/examples/docstore/RedisDocstoreIndexStoreDemo.ipynb
diff --git a/docs/examples/embeddings/Anyscale.ipynb b/docs/docs/examples/embeddings/Anyscale.ipynb
similarity index 100%
rename from docs/examples/embeddings/Anyscale.ipynb
rename to docs/docs/examples/embeddings/Anyscale.ipynb
diff --git a/docs/examples/embeddings/Langchain.ipynb b/docs/docs/examples/embeddings/Langchain.ipynb
similarity index 100%
rename from docs/examples/embeddings/Langchain.ipynb
rename to docs/docs/examples/embeddings/Langchain.ipynb
diff --git a/docs/examples/embeddings/OpenAI.ipynb b/docs/docs/examples/embeddings/OpenAI.ipynb
similarity index 100%
rename from docs/examples/embeddings/OpenAI.ipynb
rename to docs/docs/examples/embeddings/OpenAI.ipynb
diff --git a/docs/examples/embeddings/bedrock.ipynb b/docs/docs/examples/embeddings/bedrock.ipynb
similarity index 100%
rename from docs/examples/embeddings/bedrock.ipynb
rename to docs/docs/examples/embeddings/bedrock.ipynb
diff --git a/docs/examples/embeddings/clarifai.ipynb b/docs/docs/examples/embeddings/clarifai.ipynb
similarity index 100%
rename from docs/examples/embeddings/clarifai.ipynb
rename to docs/docs/examples/embeddings/clarifai.ipynb
diff --git a/docs/examples/embeddings/cohereai.ipynb b/docs/docs/examples/embeddings/cohereai.ipynb
similarity index 100%
rename from docs/examples/embeddings/cohereai.ipynb
rename to docs/docs/examples/embeddings/cohereai.ipynb
diff --git a/docs/examples/embeddings/custom_embeddings.ipynb b/docs/docs/examples/embeddings/custom_embeddings.ipynb
similarity index 100%
rename from docs/examples/embeddings/custom_embeddings.ipynb
rename to docs/docs/examples/embeddings/custom_embeddings.ipynb
diff --git a/docs/examples/embeddings/dashscope_embeddings.ipynb b/docs/docs/examples/embeddings/dashscope_embeddings.ipynb
similarity index 100%
rename from docs/examples/embeddings/dashscope_embeddings.ipynb
rename to docs/docs/examples/embeddings/dashscope_embeddings.ipynb
diff --git a/docs/examples/embeddings/elasticsearch.ipynb b/docs/docs/examples/embeddings/elasticsearch.ipynb
similarity index 100%
rename from docs/examples/embeddings/elasticsearch.ipynb
rename to docs/docs/examples/embeddings/elasticsearch.ipynb
diff --git a/docs/examples/embeddings/fastembed.ipynb b/docs/docs/examples/embeddings/fastembed.ipynb
similarity index 100%
rename from docs/examples/embeddings/fastembed.ipynb
rename to docs/docs/examples/embeddings/fastembed.ipynb
diff --git a/docs/examples/embeddings/fireworks.ipynb b/docs/docs/examples/embeddings/fireworks.ipynb
similarity index 100%
rename from docs/examples/embeddings/fireworks.ipynb
rename to docs/docs/examples/embeddings/fireworks.ipynb
diff --git a/docs/examples/embeddings/gemini.ipynb b/docs/docs/examples/embeddings/gemini.ipynb
similarity index 100%
rename from docs/examples/embeddings/gemini.ipynb
rename to docs/docs/examples/embeddings/gemini.ipynb
diff --git a/docs/examples/embeddings/google_palm.ipynb b/docs/docs/examples/embeddings/google_palm.ipynb
similarity index 100%
rename from docs/examples/embeddings/google_palm.ipynb
rename to docs/docs/examples/embeddings/google_palm.ipynb
diff --git a/docs/examples/embeddings/gradient.ipynb b/docs/docs/examples/embeddings/gradient.ipynb
similarity index 100%
rename from docs/examples/embeddings/gradient.ipynb
rename to docs/docs/examples/embeddings/gradient.ipynb
diff --git a/docs/examples/embeddings/huggingface.ipynb b/docs/docs/examples/embeddings/huggingface.ipynb
similarity index 100%
rename from docs/examples/embeddings/huggingface.ipynb
rename to docs/docs/examples/embeddings/huggingface.ipynb
diff --git a/docs/examples/embeddings/jina_embeddings.ipynb b/docs/docs/examples/embeddings/jina_embeddings.ipynb
similarity index 100%
rename from docs/examples/embeddings/jina_embeddings.ipynb
rename to docs/docs/examples/embeddings/jina_embeddings.ipynb
diff --git a/docs/examples/embeddings/jinaai_embeddings.ipynb b/docs/docs/examples/embeddings/jinaai_embeddings.ipynb
similarity index 100%
rename from docs/examples/embeddings/jinaai_embeddings.ipynb
rename to docs/docs/examples/embeddings/jinaai_embeddings.ipynb
diff --git a/docs/examples/embeddings/llamafile.ipynb b/docs/docs/examples/embeddings/llamafile.ipynb
similarity index 100%
rename from docs/examples/embeddings/llamafile.ipynb
rename to docs/docs/examples/embeddings/llamafile.ipynb
diff --git a/docs/examples/embeddings/llm_rails.ipynb b/docs/docs/examples/embeddings/llm_rails.ipynb
similarity index 100%
rename from docs/examples/embeddings/llm_rails.ipynb
rename to docs/docs/examples/embeddings/llm_rails.ipynb
diff --git a/docs/examples/embeddings/mistralai.ipynb b/docs/docs/examples/embeddings/mistralai.ipynb
similarity index 100%
rename from docs/examples/embeddings/mistralai.ipynb
rename to docs/docs/examples/embeddings/mistralai.ipynb
diff --git a/docs/examples/embeddings/nomic.ipynb b/docs/docs/examples/embeddings/nomic.ipynb
similarity index 100%
rename from docs/examples/embeddings/nomic.ipynb
rename to docs/docs/examples/embeddings/nomic.ipynb
diff --git a/docs/examples/embeddings/ollama_embedding.ipynb b/docs/docs/examples/embeddings/ollama_embedding.ipynb
similarity index 100%
rename from docs/examples/embeddings/ollama_embedding.ipynb
rename to docs/docs/examples/embeddings/ollama_embedding.ipynb
diff --git a/docs/examples/embeddings/optimum_intel.ipynb b/docs/docs/examples/embeddings/optimum_intel.ipynb
similarity index 100%
rename from docs/examples/embeddings/optimum_intel.ipynb
rename to docs/docs/examples/embeddings/optimum_intel.ipynb
diff --git a/docs/examples/embeddings/premai.ipynb b/docs/docs/examples/embeddings/premai.ipynb
similarity index 100%
rename from docs/examples/embeddings/premai.ipynb
rename to docs/docs/examples/embeddings/premai.ipynb
diff --git a/docs/examples/embeddings/sagemaker_embedding_endpoint.ipynb b/docs/docs/examples/embeddings/sagemaker_embedding_endpoint.ipynb
similarity index 100%
rename from docs/examples/embeddings/sagemaker_embedding_endpoint.ipynb
rename to docs/docs/examples/embeddings/sagemaker_embedding_endpoint.ipynb
diff --git a/docs/examples/embeddings/text_embedding_inference.ipynb b/docs/docs/examples/embeddings/text_embedding_inference.ipynb
similarity index 100%
rename from docs/examples/embeddings/text_embedding_inference.ipynb
rename to docs/docs/examples/embeddings/text_embedding_inference.ipynb
diff --git a/docs/examples/embeddings/together.ipynb b/docs/docs/examples/embeddings/together.ipynb
similarity index 100%
rename from docs/examples/embeddings/together.ipynb
rename to docs/docs/examples/embeddings/together.ipynb
diff --git a/docs/examples/embeddings/voyageai.ipynb b/docs/docs/examples/embeddings/voyageai.ipynb
similarity index 100%
rename from docs/examples/embeddings/voyageai.ipynb
rename to docs/docs/examples/embeddings/voyageai.ipynb
diff --git a/docs/examples/evaluation/BeirEvaluation.ipynb b/docs/docs/examples/evaluation/BeirEvaluation.ipynb
similarity index 100%
rename from docs/examples/evaluation/BeirEvaluation.ipynb
rename to docs/docs/examples/evaluation/BeirEvaluation.ipynb
diff --git a/docs/examples/evaluation/Deepeval.ipynb b/docs/docs/examples/evaluation/Deepeval.ipynb
similarity index 100%
rename from docs/examples/evaluation/Deepeval.ipynb
rename to docs/docs/examples/evaluation/Deepeval.ipynb
diff --git a/docs/examples/evaluation/HotpotQADistractor.ipynb b/docs/docs/examples/evaluation/HotpotQADistractor.ipynb
similarity index 100%
rename from docs/examples/evaluation/HotpotQADistractor.ipynb
rename to docs/docs/examples/evaluation/HotpotQADistractor.ipynb
diff --git a/docs/examples/evaluation/QuestionGeneration.ipynb b/docs/docs/examples/evaluation/QuestionGeneration.ipynb
similarity index 100%
rename from docs/examples/evaluation/QuestionGeneration.ipynb
rename to docs/docs/examples/evaluation/QuestionGeneration.ipynb
diff --git a/docs/examples/evaluation/RetryQuery.ipynb b/docs/docs/examples/evaluation/RetryQuery.ipynb
similarity index 100%
rename from docs/examples/evaluation/RetryQuery.ipynb
rename to docs/docs/examples/evaluation/RetryQuery.ipynb
diff --git a/docs/examples/evaluation/TonicValidateEvaluators.ipynb b/docs/docs/examples/evaluation/TonicValidateEvaluators.ipynb
similarity index 100%
rename from docs/examples/evaluation/TonicValidateEvaluators.ipynb
rename to docs/docs/examples/evaluation/TonicValidateEvaluators.ipynb
diff --git a/docs/examples/evaluation/UpTrain.ipynb b/docs/docs/examples/evaluation/UpTrain.ipynb
similarity index 100%
rename from docs/examples/evaluation/UpTrain.ipynb
rename to docs/docs/examples/evaluation/UpTrain.ipynb
diff --git a/docs/examples/evaluation/answer_and_context_relevancy.ipynb b/docs/docs/examples/evaluation/answer_and_context_relevancy.ipynb
similarity index 100%
rename from docs/examples/evaluation/answer_and_context_relevancy.ipynb
rename to docs/docs/examples/evaluation/answer_and_context_relevancy.ipynb
diff --git a/docs/examples/evaluation/batch_eval.ipynb b/docs/docs/examples/evaluation/batch_eval.ipynb
similarity index 100%
rename from docs/examples/evaluation/batch_eval.ipynb
rename to docs/docs/examples/evaluation/batch_eval.ipynb
diff --git a/docs/examples/evaluation/correctness_eval.ipynb b/docs/docs/examples/evaluation/correctness_eval.ipynb
similarity index 100%
rename from docs/examples/evaluation/correctness_eval.ipynb
rename to docs/docs/examples/evaluation/correctness_eval.ipynb
diff --git a/docs/examples/evaluation/faithfulness_eval.ipynb b/docs/docs/examples/evaluation/faithfulness_eval.ipynb
similarity index 100%
rename from docs/examples/evaluation/faithfulness_eval.ipynb
rename to docs/docs/examples/evaluation/faithfulness_eval.ipynb
diff --git a/docs/examples/evaluation/guideline_eval.ipynb b/docs/docs/examples/evaluation/guideline_eval.ipynb
similarity index 100%
rename from docs/examples/evaluation/guideline_eval.ipynb
rename to docs/docs/examples/evaluation/guideline_eval.ipynb
diff --git a/docs/examples/evaluation/mt_bench_human_judgement.ipynb b/docs/docs/examples/evaluation/mt_bench_human_judgement.ipynb
similarity index 100%
rename from docs/examples/evaluation/mt_bench_human_judgement.ipynb
rename to docs/docs/examples/evaluation/mt_bench_human_judgement.ipynb
diff --git a/docs/examples/evaluation/mt_bench_single_grading.ipynb b/docs/docs/examples/evaluation/mt_bench_single_grading.ipynb
similarity index 100%
rename from docs/examples/evaluation/mt_bench_single_grading.ipynb
rename to docs/docs/examples/evaluation/mt_bench_single_grading.ipynb
diff --git a/docs/examples/evaluation/multi_modal/multi_modal_rag_evaluation.ipynb b/docs/docs/examples/evaluation/multi_modal/multi_modal_rag_evaluation.ipynb
similarity index 100%
rename from docs/examples/evaluation/multi_modal/multi_modal_rag_evaluation.ipynb
rename to docs/docs/examples/evaluation/multi_modal/multi_modal_rag_evaluation.ipynb
diff --git a/docs/examples/evaluation/pairwise_eval.ipynb b/docs/docs/examples/evaluation/pairwise_eval.ipynb
similarity index 100%
rename from docs/examples/evaluation/pairwise_eval.ipynb
rename to docs/docs/examples/evaluation/pairwise_eval.ipynb
diff --git a/docs/examples/evaluation/prometheus_evaluation.ipynb b/docs/docs/examples/evaluation/prometheus_evaluation.ipynb
similarity index 100%
rename from docs/examples/evaluation/prometheus_evaluation.ipynb
rename to docs/docs/examples/evaluation/prometheus_evaluation.ipynb
diff --git a/docs/examples/evaluation/relevancy_eval.ipynb b/docs/docs/examples/evaluation/relevancy_eval.ipynb
similarity index 100%
rename from docs/examples/evaluation/relevancy_eval.ipynb
rename to docs/docs/examples/evaluation/relevancy_eval.ipynb
diff --git a/docs/examples/evaluation/retrieval/retriever_eval.ipynb b/docs/docs/examples/evaluation/retrieval/retriever_eval.ipynb
similarity index 100%
rename from docs/examples/evaluation/retrieval/retriever_eval.ipynb
rename to docs/docs/examples/evaluation/retrieval/retriever_eval.ipynb
diff --git a/docs/examples/evaluation/semantic_similarity_eval.ipynb b/docs/docs/examples/evaluation/semantic_similarity_eval.ipynb
similarity index 100%
rename from docs/examples/evaluation/semantic_similarity_eval.ipynb
rename to docs/docs/examples/evaluation/semantic_similarity_eval.ipynb
diff --git a/docs/examples/evaluation/test_wiki_data/nyc_text.txt b/docs/docs/examples/evaluation/test_wiki_data/nyc_text.txt
similarity index 100%
rename from docs/examples/evaluation/test_wiki_data/nyc_text.txt
rename to docs/docs/examples/evaluation/test_wiki_data/nyc_text.txt
diff --git a/docs/examples/finetuning/cross_encoder_finetuning/cross_encoder_finetuning.ipynb b/docs/docs/examples/finetuning/cross_encoder_finetuning/cross_encoder_finetuning.ipynb
similarity index 100%
rename from docs/examples/finetuning/cross_encoder_finetuning/cross_encoder_finetuning.ipynb
rename to docs/docs/examples/finetuning/cross_encoder_finetuning/cross_encoder_finetuning.ipynb
diff --git a/docs/examples/finetuning/embeddings/BUILD b/docs/docs/examples/finetuning/embeddings/BUILD
similarity index 100%
rename from docs/examples/finetuning/embeddings/BUILD
rename to docs/docs/examples/finetuning/embeddings/BUILD
diff --git a/docs/examples/finetuning/embeddings/eval_utils.py b/docs/docs/examples/finetuning/embeddings/eval_utils.py
similarity index 100%
rename from docs/examples/finetuning/embeddings/eval_utils.py
rename to docs/docs/examples/finetuning/embeddings/eval_utils.py
diff --git a/docs/examples/finetuning/embeddings/finetune_embedding.ipynb b/docs/docs/examples/finetuning/embeddings/finetune_embedding.ipynb
similarity index 100%
rename from docs/examples/finetuning/embeddings/finetune_embedding.ipynb
rename to docs/docs/examples/finetuning/embeddings/finetune_embedding.ipynb
diff --git a/docs/examples/finetuning/embeddings/finetune_embedding_adapter.ipynb b/docs/docs/examples/finetuning/embeddings/finetune_embedding_adapter.ipynb
similarity index 100%
rename from docs/examples/finetuning/embeddings/finetune_embedding_adapter.ipynb
rename to docs/docs/examples/finetuning/embeddings/finetune_embedding_adapter.ipynb
diff --git a/docs/examples/finetuning/eval_questions.txt b/docs/docs/examples/finetuning/eval_questions.txt
similarity index 100%
rename from docs/examples/finetuning/eval_questions.txt
rename to docs/docs/examples/finetuning/eval_questions.txt
diff --git a/docs/examples/finetuning/finetuning_events.jsonl b/docs/docs/examples/finetuning/finetuning_events.jsonl
similarity index 100%
rename from docs/examples/finetuning/finetuning_events.jsonl
rename to docs/docs/examples/finetuning/finetuning_events.jsonl
diff --git a/docs/examples/finetuning/gradient/data.jsonl b/docs/docs/examples/finetuning/gradient/data.jsonl
similarity index 100%
rename from docs/examples/finetuning/gradient/data.jsonl
rename to docs/docs/examples/finetuning/gradient/data.jsonl
diff --git a/docs/examples/finetuning/gradient/gradient_fine_tuning.ipynb b/docs/docs/examples/finetuning/gradient/gradient_fine_tuning.ipynb
similarity index 100%
rename from docs/examples/finetuning/gradient/gradient_fine_tuning.ipynb
rename to docs/docs/examples/finetuning/gradient/gradient_fine_tuning.ipynb
diff --git a/docs/examples/finetuning/gradient/gradient_structured.ipynb b/docs/docs/examples/finetuning/gradient/gradient_structured.ipynb
similarity index 100%
rename from docs/examples/finetuning/gradient/gradient_structured.ipynb
rename to docs/docs/examples/finetuning/gradient/gradient_structured.ipynb
diff --git a/docs/examples/finetuning/gradient/gradient_text2sql.ipynb b/docs/docs/examples/finetuning/gradient/gradient_text2sql.ipynb
similarity index 100%
rename from docs/examples/finetuning/gradient/gradient_text2sql.ipynb
rename to docs/docs/examples/finetuning/gradient/gradient_text2sql.ipynb
diff --git a/docs/examples/finetuning/llm_judge/correctness/finetune_llm_judge_single_grading_correctness.ipynb b/docs/docs/examples/finetuning/llm_judge/correctness/finetune_llm_judge_single_grading_correctness.ipynb
similarity index 100%
rename from docs/examples/finetuning/llm_judge/correctness/finetune_llm_judge_single_grading_correctness.ipynb
rename to docs/docs/examples/finetuning/llm_judge/correctness/finetune_llm_judge_single_grading_correctness.ipynb
diff --git a/docs/examples/finetuning/llm_judge/pairwise/finetune_llm_judge.ipynb b/docs/docs/examples/finetuning/llm_judge/pairwise/finetune_llm_judge.ipynb
similarity index 100%
rename from docs/examples/finetuning/llm_judge/pairwise/finetune_llm_judge.ipynb
rename to docs/docs/examples/finetuning/llm_judge/pairwise/finetune_llm_judge.ipynb
diff --git a/docs/examples/finetuning/openai_fine_tuning.ipynb b/docs/docs/examples/finetuning/openai_fine_tuning.ipynb
similarity index 100%
rename from docs/examples/finetuning/openai_fine_tuning.ipynb
rename to docs/docs/examples/finetuning/openai_fine_tuning.ipynb
diff --git a/docs/examples/finetuning/openai_fine_tuning_functions.ipynb b/docs/docs/examples/finetuning/openai_fine_tuning_functions.ipynb
similarity index 100%
rename from docs/examples/finetuning/openai_fine_tuning_functions.ipynb
rename to docs/docs/examples/finetuning/openai_fine_tuning_functions.ipynb
diff --git a/docs/examples/finetuning/react_agent/eval_questions_10q.txt b/docs/docs/examples/finetuning/react_agent/eval_questions_10q.txt
similarity index 100%
rename from docs/examples/finetuning/react_agent/eval_questions_10q.txt
rename to docs/docs/examples/finetuning/react_agent/eval_questions_10q.txt
diff --git a/docs/examples/finetuning/react_agent/finetuning_events_10q.jsonl b/docs/docs/examples/finetuning/react_agent/finetuning_events_10q.jsonl
similarity index 100%
rename from docs/examples/finetuning/react_agent/finetuning_events_10q.jsonl
rename to docs/docs/examples/finetuning/react_agent/finetuning_events_10q.jsonl
diff --git a/docs/examples/finetuning/react_agent/react_agent_finetune.ipynb b/docs/docs/examples/finetuning/react_agent/react_agent_finetune.ipynb
similarity index 100%
rename from docs/examples/finetuning/react_agent/react_agent_finetune.ipynb
rename to docs/docs/examples/finetuning/react_agent/react_agent_finetune.ipynb
diff --git a/docs/examples/finetuning/react_agent/train_questions_10q.txt b/docs/docs/examples/finetuning/react_agent/train_questions_10q.txt
similarity index 100%
rename from docs/examples/finetuning/react_agent/train_questions_10q.txt
rename to docs/docs/examples/finetuning/react_agent/train_questions_10q.txt
diff --git a/docs/examples/finetuning/rerankers/cohere_custom_reranker.ipynb b/docs/docs/examples/finetuning/rerankers/cohere_custom_reranker.ipynb
similarity index 100%
rename from docs/examples/finetuning/rerankers/cohere_custom_reranker.ipynb
rename to docs/docs/examples/finetuning/rerankers/cohere_custom_reranker.ipynb
diff --git a/docs/examples/finetuning/router/router_finetune.ipynb b/docs/docs/examples/finetuning/router/router_finetune.ipynb
similarity index 100%
rename from docs/examples/finetuning/router/router_finetune.ipynb
rename to docs/docs/examples/finetuning/router/router_finetune.ipynb
diff --git a/docs/examples/finetuning/train_questions.txt b/docs/docs/examples/finetuning/train_questions.txt
similarity index 100%
rename from docs/examples/finetuning/train_questions.txt
rename to docs/docs/examples/finetuning/train_questions.txt
diff --git a/docs/docs/examples/index.md b/docs/docs/examples/index.md
new file mode 100644
index 0000000000000000000000000000000000000000..224362d57c1251ee40bea0673903aa4eba42f306
--- /dev/null
+++ b/docs/docs/examples/index.md
@@ -0,0 +1,3 @@
+# Examples
+
+In the naviagation to the left, you will find many example notebooks, displaying the usage of various llama-index components and use-cases.
diff --git a/docs/examples/index_structs/doc_summary/DocSummary.ipynb b/docs/docs/examples/index_structs/doc_summary/DocSummary.ipynb
similarity index 100%
rename from docs/examples/index_structs/doc_summary/DocSummary.ipynb
rename to docs/docs/examples/index_structs/doc_summary/DocSummary.ipynb
diff --git a/docs/examples/index_structs/knowledge_graph/2023_Science_Wikipedia_KnowledgeGraph.html b/docs/docs/examples/index_structs/knowledge_graph/2023_Science_Wikipedia_KnowledgeGraph.html
similarity index 100%
rename from docs/examples/index_structs/knowledge_graph/2023_Science_Wikipedia_KnowledgeGraph.html
rename to docs/docs/examples/index_structs/knowledge_graph/2023_Science_Wikipedia_KnowledgeGraph.html
diff --git a/docs/examples/index_structs/knowledge_graph/FalkorDBGraphDemo.ipynb b/docs/docs/examples/index_structs/knowledge_graph/FalkorDBGraphDemo.ipynb
similarity index 100%
rename from docs/examples/index_structs/knowledge_graph/FalkorDBGraphDemo.ipynb
rename to docs/docs/examples/index_structs/knowledge_graph/FalkorDBGraphDemo.ipynb
diff --git a/docs/examples/index_structs/knowledge_graph/KnowledgeGraphDemo.ipynb b/docs/docs/examples/index_structs/knowledge_graph/KnowledgeGraphDemo.ipynb
similarity index 100%
rename from docs/examples/index_structs/knowledge_graph/KnowledgeGraphDemo.ipynb
rename to docs/docs/examples/index_structs/knowledge_graph/KnowledgeGraphDemo.ipynb
diff --git a/docs/examples/index_structs/knowledge_graph/KuzuGraphDemo.ipynb b/docs/docs/examples/index_structs/knowledge_graph/KuzuGraphDemo.ipynb
similarity index 100%
rename from docs/examples/index_structs/knowledge_graph/KuzuGraphDemo.ipynb
rename to docs/docs/examples/index_structs/knowledge_graph/KuzuGraphDemo.ipynb
diff --git a/docs/examples/index_structs/knowledge_graph/NebulaGraphKGIndexDemo.ipynb b/docs/docs/examples/index_structs/knowledge_graph/NebulaGraphKGIndexDemo.ipynb
similarity index 100%
rename from docs/examples/index_structs/knowledge_graph/NebulaGraphKGIndexDemo.ipynb
rename to docs/docs/examples/index_structs/knowledge_graph/NebulaGraphKGIndexDemo.ipynb
diff --git a/docs/examples/index_structs/knowledge_graph/Neo4jKGIndexDemo.ipynb b/docs/docs/examples/index_structs/knowledge_graph/Neo4jKGIndexDemo.ipynb
similarity index 100%
rename from docs/examples/index_structs/knowledge_graph/Neo4jKGIndexDemo.ipynb
rename to docs/docs/examples/index_structs/knowledge_graph/Neo4jKGIndexDemo.ipynb
diff --git a/docs/examples/index_structs/knowledge_graph/example.html b/docs/docs/examples/index_structs/knowledge_graph/example.html
similarity index 100%
rename from docs/examples/index_structs/knowledge_graph/example.html
rename to docs/docs/examples/index_structs/knowledge_graph/example.html
diff --git a/docs/examples/index_structs/knowledge_graph/falkordbgraph_draw.html b/docs/docs/examples/index_structs/knowledge_graph/falkordbgraph_draw.html
similarity index 100%
rename from docs/examples/index_structs/knowledge_graph/falkordbgraph_draw.html
rename to docs/docs/examples/index_structs/knowledge_graph/falkordbgraph_draw.html
diff --git a/docs/examples/index_structs/knowledge_graph/index_kg.json b/docs/docs/examples/index_structs/knowledge_graph/index_kg.json
similarity index 100%
rename from docs/examples/index_structs/knowledge_graph/index_kg.json
rename to docs/docs/examples/index_structs/knowledge_graph/index_kg.json
diff --git a/docs/examples/index_structs/knowledge_graph/index_kg_embeddings.json b/docs/docs/examples/index_structs/knowledge_graph/index_kg_embeddings.json
similarity index 100%
rename from docs/examples/index_structs/knowledge_graph/index_kg_embeddings.json
rename to docs/docs/examples/index_structs/knowledge_graph/index_kg_embeddings.json
diff --git a/docs/examples/index_structs/knowledge_graph/knowledge_graph2.ipynb b/docs/docs/examples/index_structs/knowledge_graph/knowledge_graph2.ipynb
similarity index 100%
rename from docs/examples/index_structs/knowledge_graph/knowledge_graph2.ipynb
rename to docs/docs/examples/index_structs/knowledge_graph/knowledge_graph2.ipynb
diff --git a/docs/examples/index_structs/knowledge_graph/kuzugraph_draw.html b/docs/docs/examples/index_structs/knowledge_graph/kuzugraph_draw.html
similarity index 100%
rename from docs/examples/index_structs/knowledge_graph/kuzugraph_draw.html
rename to docs/docs/examples/index_structs/knowledge_graph/kuzugraph_draw.html
diff --git a/docs/examples/index_structs/knowledge_graph/nebulagraph_draw.html b/docs/docs/examples/index_structs/knowledge_graph/nebulagraph_draw.html
similarity index 100%
rename from docs/examples/index_structs/knowledge_graph/nebulagraph_draw.html
rename to docs/docs/examples/index_structs/knowledge_graph/nebulagraph_draw.html
diff --git a/docs/examples/index_structs/knowledge_graph/storage/graph_store.json b/docs/docs/examples/index_structs/knowledge_graph/storage/graph_store.json
similarity index 100%
rename from docs/examples/index_structs/knowledge_graph/storage/graph_store.json
rename to docs/docs/examples/index_structs/knowledge_graph/storage/graph_store.json
diff --git a/docs/examples/index_structs/struct_indices/SQLIndexDemo.ipynb b/docs/docs/examples/index_structs/struct_indices/SQLIndexDemo.ipynb
similarity index 100%
rename from docs/examples/index_structs/struct_indices/SQLIndexDemo.ipynb
rename to docs/docs/examples/index_structs/struct_indices/SQLIndexDemo.ipynb
diff --git a/docs/examples/index_structs/struct_indices/duckdb_sql_query.ipynb b/docs/docs/examples/index_structs/struct_indices/duckdb_sql_query.ipynb
similarity index 100%
rename from docs/examples/index_structs/struct_indices/duckdb_sql_query.ipynb
rename to docs/docs/examples/index_structs/struct_indices/duckdb_sql_query.ipynb
diff --git a/docs/examples/ingestion/advanced_ingestion_pipeline.ipynb b/docs/docs/examples/ingestion/advanced_ingestion_pipeline.ipynb
similarity index 100%
rename from docs/examples/ingestion/advanced_ingestion_pipeline.ipynb
rename to docs/docs/examples/ingestion/advanced_ingestion_pipeline.ipynb
diff --git a/docs/examples/ingestion/async_ingestion_pipeline.ipynb b/docs/docs/examples/ingestion/async_ingestion_pipeline.ipynb
similarity index 100%
rename from docs/examples/ingestion/async_ingestion_pipeline.ipynb
rename to docs/docs/examples/ingestion/async_ingestion_pipeline.ipynb
diff --git a/docs/examples/ingestion/document_management_pipeline.ipynb b/docs/docs/examples/ingestion/document_management_pipeline.ipynb
similarity index 100%
rename from docs/examples/ingestion/document_management_pipeline.ipynb
rename to docs/docs/examples/ingestion/document_management_pipeline.ipynb
diff --git a/docs/examples/ingestion/ingestion_gdrive.ipynb b/docs/docs/examples/ingestion/ingestion_gdrive.ipynb
similarity index 100%
rename from docs/examples/ingestion/ingestion_gdrive.ipynb
rename to docs/docs/examples/ingestion/ingestion_gdrive.ipynb
diff --git a/docs/examples/ingestion/parallel_execution_ingestion_pipeline.ipynb b/docs/docs/examples/ingestion/parallel_execution_ingestion_pipeline.ipynb
similarity index 100%
rename from docs/examples/ingestion/parallel_execution_ingestion_pipeline.ipynb
rename to docs/docs/examples/ingestion/parallel_execution_ingestion_pipeline.ipynb
diff --git a/docs/examples/ingestion/redis_ingestion_pipeline.ipynb b/docs/docs/examples/ingestion/redis_ingestion_pipeline.ipynb
similarity index 100%
rename from docs/examples/ingestion/redis_ingestion_pipeline.ipynb
rename to docs/docs/examples/ingestion/redis_ingestion_pipeline.ipynb
diff --git a/docs/examples/instrumentation/basic_usage.ipynb b/docs/docs/examples/instrumentation/basic_usage.ipynb
similarity index 100%
rename from docs/examples/instrumentation/basic_usage.ipynb
rename to docs/docs/examples/instrumentation/basic_usage.ipynb
diff --git a/docs/examples/instrumentation/observe_api_calls.ipynb b/docs/docs/examples/instrumentation/observe_api_calls.ipynb
similarity index 100%
rename from docs/examples/instrumentation/observe_api_calls.ipynb
rename to docs/docs/examples/instrumentation/observe_api_calls.ipynb
diff --git a/docs/examples/llama_dataset/downloading_llama_datasets.ipynb b/docs/docs/examples/llama_dataset/downloading_llama_datasets.ipynb
similarity index 100%
rename from docs/examples/llama_dataset/downloading_llama_datasets.ipynb
rename to docs/docs/examples/llama_dataset/downloading_llama_datasets.ipynb
diff --git a/docs/examples/llama_dataset/labelled-rag-datasets.ipynb b/docs/docs/examples/llama_dataset/labelled-rag-datasets.ipynb
similarity index 100%
rename from docs/examples/llama_dataset/labelled-rag-datasets.ipynb
rename to docs/docs/examples/llama_dataset/labelled-rag-datasets.ipynb
diff --git a/docs/examples/llama_dataset/ragdataset_submission_template.ipynb b/docs/docs/examples/llama_dataset/ragdataset_submission_template.ipynb
similarity index 100%
rename from docs/examples/llama_dataset/ragdataset_submission_template.ipynb
rename to docs/docs/examples/llama_dataset/ragdataset_submission_template.ipynb
diff --git a/docs/examples/llama_dataset/uploading_llama_dataset.ipynb b/docs/docs/examples/llama_dataset/uploading_llama_dataset.ipynb
similarity index 100%
rename from docs/examples/llama_dataset/uploading_llama_dataset.ipynb
rename to docs/docs/examples/llama_dataset/uploading_llama_dataset.ipynb
diff --git a/docs/examples/llama_hub/llama_hub.ipynb b/docs/docs/examples/llama_hub/llama_hub.ipynb
similarity index 100%
rename from docs/examples/llama_hub/llama_hub.ipynb
rename to docs/docs/examples/llama_hub/llama_hub.ipynb
diff --git a/docs/examples/llama_hub/llama_pack_ollama.ipynb b/docs/docs/examples/llama_hub/llama_pack_ollama.ipynb
similarity index 100%
rename from docs/examples/llama_hub/llama_pack_ollama.ipynb
rename to docs/docs/examples/llama_hub/llama_pack_ollama.ipynb
diff --git a/docs/examples/llama_hub/llama_pack_resume.ipynb b/docs/docs/examples/llama_hub/llama_pack_resume.ipynb
similarity index 100%
rename from docs/examples/llama_hub/llama_pack_resume.ipynb
rename to docs/docs/examples/llama_hub/llama_pack_resume.ipynb
diff --git a/docs/examples/llama_hub/llama_packs_example.ipynb b/docs/docs/examples/llama_hub/llama_packs_example.ipynb
similarity index 100%
rename from docs/examples/llama_hub/llama_packs_example.ipynb
rename to docs/docs/examples/llama_hub/llama_packs_example.ipynb
diff --git a/docs/examples/llm/ai21.ipynb b/docs/docs/examples/llm/ai21.ipynb
similarity index 100%
rename from docs/examples/llm/ai21.ipynb
rename to docs/docs/examples/llm/ai21.ipynb
diff --git a/docs/examples/llm/anthropic.ipynb b/docs/docs/examples/llm/anthropic.ipynb
similarity index 100%
rename from docs/examples/llm/anthropic.ipynb
rename to docs/docs/examples/llm/anthropic.ipynb
diff --git a/docs/examples/llm/anyscale.ipynb b/docs/docs/examples/llm/anyscale.ipynb
similarity index 100%
rename from docs/examples/llm/anyscale.ipynb
rename to docs/docs/examples/llm/anyscale.ipynb
diff --git a/docs/examples/llm/azure_env.png b/docs/docs/examples/llm/azure_env.png
similarity index 100%
rename from docs/examples/llm/azure_env.png
rename to docs/docs/examples/llm/azure_env.png
diff --git a/docs/examples/llm/azure_openai.ipynb b/docs/docs/examples/llm/azure_openai.ipynb
similarity index 100%
rename from docs/examples/llm/azure_openai.ipynb
rename to docs/docs/examples/llm/azure_openai.ipynb
diff --git a/docs/examples/llm/azure_playground.png b/docs/docs/examples/llm/azure_playground.png
similarity index 100%
rename from docs/examples/llm/azure_playground.png
rename to docs/docs/examples/llm/azure_playground.png
diff --git a/docs/examples/llm/bedrock.ipynb b/docs/docs/examples/llm/bedrock.ipynb
similarity index 100%
rename from docs/examples/llm/bedrock.ipynb
rename to docs/docs/examples/llm/bedrock.ipynb
diff --git a/docs/examples/llm/clarifai.ipynb b/docs/docs/examples/llm/clarifai.ipynb
similarity index 100%
rename from docs/examples/llm/clarifai.ipynb
rename to docs/docs/examples/llm/clarifai.ipynb
diff --git a/docs/examples/llm/cohere.ipynb b/docs/docs/examples/llm/cohere.ipynb
similarity index 100%
rename from docs/examples/llm/cohere.ipynb
rename to docs/docs/examples/llm/cohere.ipynb
diff --git a/docs/examples/llm/dashscope.ipynb b/docs/docs/examples/llm/dashscope.ipynb
similarity index 100%
rename from docs/examples/llm/dashscope.ipynb
rename to docs/docs/examples/llm/dashscope.ipynb
diff --git a/docs/examples/llm/everlyai.ipynb b/docs/docs/examples/llm/everlyai.ipynb
similarity index 100%
rename from docs/examples/llm/everlyai.ipynb
rename to docs/docs/examples/llm/everlyai.ipynb
diff --git a/docs/examples/llm/fireworks.ipynb b/docs/docs/examples/llm/fireworks.ipynb
similarity index 100%
rename from docs/examples/llm/fireworks.ipynb
rename to docs/docs/examples/llm/fireworks.ipynb
diff --git a/docs/examples/llm/fireworks_cookbook.ipynb b/docs/docs/examples/llm/fireworks_cookbook.ipynb
similarity index 100%
rename from docs/examples/llm/fireworks_cookbook.ipynb
rename to docs/docs/examples/llm/fireworks_cookbook.ipynb
diff --git a/docs/examples/llm/friendli.ipynb b/docs/docs/examples/llm/friendli.ipynb
similarity index 100%
rename from docs/examples/llm/friendli.ipynb
rename to docs/docs/examples/llm/friendli.ipynb
diff --git a/docs/examples/llm/gemini.ipynb b/docs/docs/examples/llm/gemini.ipynb
similarity index 100%
rename from docs/examples/llm/gemini.ipynb
rename to docs/docs/examples/llm/gemini.ipynb
diff --git a/docs/examples/llm/gradient_base_model.ipynb b/docs/docs/examples/llm/gradient_base_model.ipynb
similarity index 100%
rename from docs/examples/llm/gradient_base_model.ipynb
rename to docs/docs/examples/llm/gradient_base_model.ipynb
diff --git a/docs/examples/llm/gradient_model_adapter.ipynb b/docs/docs/examples/llm/gradient_model_adapter.ipynb
similarity index 100%
rename from docs/examples/llm/gradient_model_adapter.ipynb
rename to docs/docs/examples/llm/gradient_model_adapter.ipynb
diff --git a/docs/examples/llm/groq.ipynb b/docs/docs/examples/llm/groq.ipynb
similarity index 100%
rename from docs/examples/llm/groq.ipynb
rename to docs/docs/examples/llm/groq.ipynb
diff --git a/docs/examples/llm/huggingface.ipynb b/docs/docs/examples/llm/huggingface.ipynb
similarity index 100%
rename from docs/examples/llm/huggingface.ipynb
rename to docs/docs/examples/llm/huggingface.ipynb
diff --git a/docs/examples/llm/konko.ipynb b/docs/docs/examples/llm/konko.ipynb
similarity index 100%
rename from docs/examples/llm/konko.ipynb
rename to docs/docs/examples/llm/konko.ipynb
diff --git a/docs/examples/llm/langchain.ipynb b/docs/docs/examples/llm/langchain.ipynb
similarity index 100%
rename from docs/examples/llm/langchain.ipynb
rename to docs/docs/examples/llm/langchain.ipynb
diff --git a/docs/examples/llm/litellm.ipynb b/docs/docs/examples/llm/litellm.ipynb
similarity index 100%
rename from docs/examples/llm/litellm.ipynb
rename to docs/docs/examples/llm/litellm.ipynb
diff --git a/docs/examples/llm/llama_2.ipynb b/docs/docs/examples/llm/llama_2.ipynb
similarity index 100%
rename from docs/examples/llm/llama_2.ipynb
rename to docs/docs/examples/llm/llama_2.ipynb
diff --git a/docs/examples/llm/llama_2_llama_cpp.ipynb b/docs/docs/examples/llm/llama_2_llama_cpp.ipynb
similarity index 100%
rename from docs/examples/llm/llama_2_llama_cpp.ipynb
rename to docs/docs/examples/llm/llama_2_llama_cpp.ipynb
diff --git a/docs/examples/llm/llama_2_rap_battle.ipynb b/docs/docs/examples/llm/llama_2_rap_battle.ipynb
similarity index 100%
rename from docs/examples/llm/llama_2_rap_battle.ipynb
rename to docs/docs/examples/llm/llama_2_rap_battle.ipynb
diff --git a/docs/examples/llm/llama_api.ipynb b/docs/docs/examples/llm/llama_api.ipynb
similarity index 100%
rename from docs/examples/llm/llama_api.ipynb
rename to docs/docs/examples/llm/llama_api.ipynb
diff --git a/docs/examples/llm/llamafile.ipynb b/docs/docs/examples/llm/llamafile.ipynb
similarity index 100%
rename from docs/examples/llm/llamafile.ipynb
rename to docs/docs/examples/llm/llamafile.ipynb
diff --git a/docs/examples/llm/llm_predictor.ipynb b/docs/docs/examples/llm/llm_predictor.ipynb
similarity index 100%
rename from docs/examples/llm/llm_predictor.ipynb
rename to docs/docs/examples/llm/llm_predictor.ipynb
diff --git a/docs/examples/llm/localai.ipynb b/docs/docs/examples/llm/localai.ipynb
similarity index 100%
rename from docs/examples/llm/localai.ipynb
rename to docs/docs/examples/llm/localai.ipynb
diff --git a/docs/examples/llm/maritalk.ipynb b/docs/docs/examples/llm/maritalk.ipynb
similarity index 100%
rename from docs/examples/llm/maritalk.ipynb
rename to docs/docs/examples/llm/maritalk.ipynb
diff --git a/docs/examples/llm/mistralai.ipynb b/docs/docs/examples/llm/mistralai.ipynb
similarity index 100%
rename from docs/examples/llm/mistralai.ipynb
rename to docs/docs/examples/llm/mistralai.ipynb
diff --git a/docs/examples/llm/modelscope.ipynb b/docs/docs/examples/llm/modelscope.ipynb
similarity index 100%
rename from docs/examples/llm/modelscope.ipynb
rename to docs/docs/examples/llm/modelscope.ipynb
diff --git a/docs/examples/llm/monsterapi.ipynb b/docs/docs/examples/llm/monsterapi.ipynb
similarity index 100%
rename from docs/examples/llm/monsterapi.ipynb
rename to docs/docs/examples/llm/monsterapi.ipynb
diff --git a/docs/examples/llm/mymagic.ipynb b/docs/docs/examples/llm/mymagic.ipynb
similarity index 100%
rename from docs/examples/llm/mymagic.ipynb
rename to docs/docs/examples/llm/mymagic.ipynb
diff --git a/docs/examples/llm/neutrino.ipynb b/docs/docs/examples/llm/neutrino.ipynb
similarity index 100%
rename from docs/examples/llm/neutrino.ipynb
rename to docs/docs/examples/llm/neutrino.ipynb
diff --git a/docs/examples/llm/nvidia_tensorrt.ipynb b/docs/docs/examples/llm/nvidia_tensorrt.ipynb
similarity index 100%
rename from docs/examples/llm/nvidia_tensorrt.ipynb
rename to docs/docs/examples/llm/nvidia_tensorrt.ipynb
diff --git a/docs/examples/llm/nvidia_triton.ipynb b/docs/docs/examples/llm/nvidia_triton.ipynb
similarity index 100%
rename from docs/examples/llm/nvidia_triton.ipynb
rename to docs/docs/examples/llm/nvidia_triton.ipynb
diff --git a/docs/examples/llm/ollama.ipynb b/docs/docs/examples/llm/ollama.ipynb
similarity index 100%
rename from docs/examples/llm/ollama.ipynb
rename to docs/docs/examples/llm/ollama.ipynb
diff --git a/docs/examples/llm/ollama_gemma.ipynb b/docs/docs/examples/llm/ollama_gemma.ipynb
similarity index 100%
rename from docs/examples/llm/ollama_gemma.ipynb
rename to docs/docs/examples/llm/ollama_gemma.ipynb
diff --git a/docs/examples/llm/openai.ipynb b/docs/docs/examples/llm/openai.ipynb
similarity index 100%
rename from docs/examples/llm/openai.ipynb
rename to docs/docs/examples/llm/openai.ipynb
diff --git a/docs/examples/llm/openai_json_vs_function_calling.ipynb b/docs/docs/examples/llm/openai_json_vs_function_calling.ipynb
similarity index 100%
rename from docs/examples/llm/openai_json_vs_function_calling.ipynb
rename to docs/docs/examples/llm/openai_json_vs_function_calling.ipynb
diff --git a/docs/examples/llm/openllm.ipynb b/docs/docs/examples/llm/openllm.ipynb
similarity index 100%
rename from docs/examples/llm/openllm.ipynb
rename to docs/docs/examples/llm/openllm.ipynb
diff --git a/docs/examples/llm/openrouter.ipynb b/docs/docs/examples/llm/openrouter.ipynb
similarity index 100%
rename from docs/examples/llm/openrouter.ipynb
rename to docs/docs/examples/llm/openrouter.ipynb
diff --git a/docs/examples/llm/palm.ipynb b/docs/docs/examples/llm/palm.ipynb
similarity index 100%
rename from docs/examples/llm/palm.ipynb
rename to docs/docs/examples/llm/palm.ipynb
diff --git a/docs/examples/llm/perplexity.ipynb b/docs/docs/examples/llm/perplexity.ipynb
similarity index 100%
rename from docs/examples/llm/perplexity.ipynb
rename to docs/docs/examples/llm/perplexity.ipynb
diff --git a/docs/examples/llm/portkey.ipynb b/docs/docs/examples/llm/portkey.ipynb
similarity index 100%
rename from docs/examples/llm/portkey.ipynb
rename to docs/docs/examples/llm/portkey.ipynb
diff --git a/docs/examples/llm/predibase.ipynb b/docs/docs/examples/llm/predibase.ipynb
similarity index 100%
rename from docs/examples/llm/predibase.ipynb
rename to docs/docs/examples/llm/predibase.ipynb
diff --git a/docs/examples/llm/premai.ipynb b/docs/docs/examples/llm/premai.ipynb
similarity index 100%
rename from docs/examples/llm/premai.ipynb
rename to docs/docs/examples/llm/premai.ipynb
diff --git a/docs/examples/llm/rungpt.ipynb b/docs/docs/examples/llm/rungpt.ipynb
similarity index 100%
rename from docs/examples/llm/rungpt.ipynb
rename to docs/docs/examples/llm/rungpt.ipynb
diff --git a/docs/examples/llm/sagemaker_endpoint_llm.ipynb b/docs/docs/examples/llm/sagemaker_endpoint_llm.ipynb
similarity index 100%
rename from docs/examples/llm/sagemaker_endpoint_llm.ipynb
rename to docs/docs/examples/llm/sagemaker_endpoint_llm.ipynb
diff --git a/docs/examples/llm/solar.ipynb b/docs/docs/examples/llm/solar.ipynb
similarity index 100%
rename from docs/examples/llm/solar.ipynb
rename to docs/docs/examples/llm/solar.ipynb
diff --git a/docs/examples/llm/together.ipynb b/docs/docs/examples/llm/together.ipynb
similarity index 100%
rename from docs/examples/llm/together.ipynb
rename to docs/docs/examples/llm/together.ipynb
diff --git a/docs/examples/llm/vertex.ipynb b/docs/docs/examples/llm/vertex.ipynb
similarity index 100%
rename from docs/examples/llm/vertex.ipynb
rename to docs/docs/examples/llm/vertex.ipynb
diff --git a/docs/examples/llm/vicuna.ipynb b/docs/docs/examples/llm/vicuna.ipynb
similarity index 100%
rename from docs/examples/llm/vicuna.ipynb
rename to docs/docs/examples/llm/vicuna.ipynb
diff --git a/docs/examples/llm/vllm.ipynb b/docs/docs/examples/llm/vllm.ipynb
similarity index 100%
rename from docs/examples/llm/vllm.ipynb
rename to docs/docs/examples/llm/vllm.ipynb
diff --git a/docs/examples/llm/watsonx.ipynb b/docs/docs/examples/llm/watsonx.ipynb
similarity index 100%
rename from docs/examples/llm/watsonx.ipynb
rename to docs/docs/examples/llm/watsonx.ipynb
diff --git a/docs/examples/llm/xinference_local_deployment.ipynb b/docs/docs/examples/llm/xinference_local_deployment.ipynb
similarity index 100%
rename from docs/examples/llm/xinference_local_deployment.ipynb
rename to docs/docs/examples/llm/xinference_local_deployment.ipynb
diff --git a/docs/examples/low_level/evaluation.ipynb b/docs/docs/examples/low_level/evaluation.ipynb
similarity index 100%
rename from docs/examples/low_level/evaluation.ipynb
rename to docs/docs/examples/low_level/evaluation.ipynb
diff --git a/docs/examples/low_level/fusion_retriever.ipynb b/docs/docs/examples/low_level/fusion_retriever.ipynb
similarity index 100%
rename from docs/examples/low_level/fusion_retriever.ipynb
rename to docs/docs/examples/low_level/fusion_retriever.ipynb
diff --git a/docs/examples/low_level/ingestion.ipynb b/docs/docs/examples/low_level/ingestion.ipynb
similarity index 100%
rename from docs/examples/low_level/ingestion.ipynb
rename to docs/docs/examples/low_level/ingestion.ipynb
diff --git a/docs/examples/low_level/oss_ingestion_retrieval.ipynb b/docs/docs/examples/low_level/oss_ingestion_retrieval.ipynb
similarity index 100%
rename from docs/examples/low_level/oss_ingestion_retrieval.ipynb
rename to docs/docs/examples/low_level/oss_ingestion_retrieval.ipynb
diff --git a/docs/examples/low_level/response_synthesis.ipynb b/docs/docs/examples/low_level/response_synthesis.ipynb
similarity index 100%
rename from docs/examples/low_level/response_synthesis.ipynb
rename to docs/docs/examples/low_level/response_synthesis.ipynb
diff --git a/docs/examples/low_level/retrieval.ipynb b/docs/docs/examples/low_level/retrieval.ipynb
similarity index 100%
rename from docs/examples/low_level/retrieval.ipynb
rename to docs/docs/examples/low_level/retrieval.ipynb
diff --git a/docs/examples/low_level/router.ipynb b/docs/docs/examples/low_level/router.ipynb
similarity index 100%
rename from docs/examples/low_level/router.ipynb
rename to docs/docs/examples/low_level/router.ipynb
diff --git a/docs/examples/low_level/vector_store.ipynb b/docs/docs/examples/low_level/vector_store.ipynb
similarity index 100%
rename from docs/examples/low_level/vector_store.ipynb
rename to docs/docs/examples/low_level/vector_store.ipynb
diff --git a/docs/examples/managed/GoogleDemo.ipynb b/docs/docs/examples/managed/GoogleDemo.ipynb
similarity index 100%
rename from docs/examples/managed/GoogleDemo.ipynb
rename to docs/docs/examples/managed/GoogleDemo.ipynb
diff --git a/docs/examples/managed/manage_retrieval_benchmark.ipynb b/docs/docs/examples/managed/manage_retrieval_benchmark.ipynb
similarity index 100%
rename from docs/examples/managed/manage_retrieval_benchmark.ipynb
rename to docs/docs/examples/managed/manage_retrieval_benchmark.ipynb
diff --git a/docs/examples/managed/vectaraDemo.ipynb b/docs/docs/examples/managed/vectaraDemo.ipynb
similarity index 100%
rename from docs/examples/managed/vectaraDemo.ipynb
rename to docs/docs/examples/managed/vectaraDemo.ipynb
diff --git a/docs/examples/managed/zcpDemo.ipynb b/docs/docs/examples/managed/zcpDemo.ipynb
similarity index 100%
rename from docs/examples/managed/zcpDemo.ipynb
rename to docs/docs/examples/managed/zcpDemo.ipynb
diff --git a/docs/examples/metadata_extraction/EntityExtractionClimate.ipynb b/docs/docs/examples/metadata_extraction/EntityExtractionClimate.ipynb
similarity index 100%
rename from docs/examples/metadata_extraction/EntityExtractionClimate.ipynb
rename to docs/docs/examples/metadata_extraction/EntityExtractionClimate.ipynb
diff --git a/docs/examples/metadata_extraction/MarvinMetadataExtractorDemo.ipynb b/docs/docs/examples/metadata_extraction/MarvinMetadataExtractorDemo.ipynb
similarity index 100%
rename from docs/examples/metadata_extraction/MarvinMetadataExtractorDemo.ipynb
rename to docs/docs/examples/metadata_extraction/MarvinMetadataExtractorDemo.ipynb
diff --git a/docs/examples/metadata_extraction/MetadataExtractionSEC.ipynb b/docs/docs/examples/metadata_extraction/MetadataExtractionSEC.ipynb
similarity index 100%
rename from docs/examples/metadata_extraction/MetadataExtractionSEC.ipynb
rename to docs/docs/examples/metadata_extraction/MetadataExtractionSEC.ipynb
diff --git a/docs/examples/metadata_extraction/MetadataExtraction_LLMSurvey.ipynb b/docs/docs/examples/metadata_extraction/MetadataExtraction_LLMSurvey.ipynb
similarity index 100%
rename from docs/examples/metadata_extraction/MetadataExtraction_LLMSurvey.ipynb
rename to docs/docs/examples/metadata_extraction/MetadataExtraction_LLMSurvey.ipynb
diff --git a/docs/examples/metadata_extraction/PydanticExtractor.ipynb b/docs/docs/examples/metadata_extraction/PydanticExtractor.ipynb
similarity index 100%
rename from docs/examples/metadata_extraction/PydanticExtractor.ipynb
rename to docs/docs/examples/metadata_extraction/PydanticExtractor.ipynb
diff --git a/docs/examples/metadata_extraction/data/Sports Supplements.csv b/docs/docs/examples/metadata_extraction/data/Sports Supplements.csv
similarity index 100%
rename from docs/examples/metadata_extraction/data/Sports Supplements.csv
rename to docs/docs/examples/metadata_extraction/data/Sports Supplements.csv
diff --git a/docs/examples/multi_modal/ChromaMultiModalDemo.ipynb b/docs/docs/examples/multi_modal/ChromaMultiModalDemo.ipynb
similarity index 100%
rename from docs/examples/multi_modal/ChromaMultiModalDemo.ipynb
rename to docs/docs/examples/multi_modal/ChromaMultiModalDemo.ipynb
diff --git a/docs/examples/multi_modal/anthropic_multi_modal.ipynb b/docs/docs/examples/multi_modal/anthropic_multi_modal.ipynb
similarity index 100%
rename from docs/examples/multi_modal/anthropic_multi_modal.ipynb
rename to docs/docs/examples/multi_modal/anthropic_multi_modal.ipynb
diff --git a/docs/examples/multi_modal/azure_openai_multi_modal.ipynb b/docs/docs/examples/multi_modal/azure_openai_multi_modal.ipynb
similarity index 100%
rename from docs/examples/multi_modal/azure_openai_multi_modal.ipynb
rename to docs/docs/examples/multi_modal/azure_openai_multi_modal.ipynb
diff --git a/docs/examples/multi_modal/dashscope_multi_modal.ipynb b/docs/docs/examples/multi_modal/dashscope_multi_modal.ipynb
similarity index 100%
rename from docs/examples/multi_modal/dashscope_multi_modal.ipynb
rename to docs/docs/examples/multi_modal/dashscope_multi_modal.ipynb
diff --git a/docs/examples/multi_modal/gemini.ipynb b/docs/docs/examples/multi_modal/gemini.ipynb
similarity index 100%
rename from docs/examples/multi_modal/gemini.ipynb
rename to docs/docs/examples/multi_modal/gemini.ipynb
diff --git a/docs/examples/multi_modal/gpt4v_experiments_cot.ipynb b/docs/docs/examples/multi_modal/gpt4v_experiments_cot.ipynb
similarity index 100%
rename from docs/examples/multi_modal/gpt4v_experiments_cot.ipynb
rename to docs/docs/examples/multi_modal/gpt4v_experiments_cot.ipynb
diff --git a/docs/examples/multi_modal/gpt4v_multi_modal_retrieval.ipynb b/docs/docs/examples/multi_modal/gpt4v_multi_modal_retrieval.ipynb
similarity index 100%
rename from docs/examples/multi_modal/gpt4v_multi_modal_retrieval.ipynb
rename to docs/docs/examples/multi_modal/gpt4v_multi_modal_retrieval.ipynb
diff --git a/docs/examples/multi_modal/image_to_image_retrieval.ipynb b/docs/docs/examples/multi_modal/image_to_image_retrieval.ipynb
similarity index 100%
rename from docs/examples/multi_modal/image_to_image_retrieval.ipynb
rename to docs/docs/examples/multi_modal/image_to_image_retrieval.ipynb
diff --git a/docs/examples/multi_modal/llava_demo.ipynb b/docs/docs/examples/multi_modal/llava_demo.ipynb
similarity index 100%
rename from docs/examples/multi_modal/llava_demo.ipynb
rename to docs/docs/examples/multi_modal/llava_demo.ipynb
diff --git a/docs/examples/multi_modal/llava_multi_modal_tesla_10q.ipynb b/docs/docs/examples/multi_modal/llava_multi_modal_tesla_10q.ipynb
similarity index 100%
rename from docs/examples/multi_modal/llava_multi_modal_tesla_10q.ipynb
rename to docs/docs/examples/multi_modal/llava_multi_modal_tesla_10q.ipynb
diff --git a/docs/examples/multi_modal/mm_agent.ipynb b/docs/docs/examples/multi_modal/mm_agent.ipynb
similarity index 100%
rename from docs/examples/multi_modal/mm_agent.ipynb
rename to docs/docs/examples/multi_modal/mm_agent.ipynb
diff --git a/docs/examples/multi_modal/multi_modal_pydantic.ipynb b/docs/docs/examples/multi_modal/multi_modal_pydantic.ipynb
similarity index 100%
rename from docs/examples/multi_modal/multi_modal_pydantic.ipynb
rename to docs/docs/examples/multi_modal/multi_modal_pydantic.ipynb
diff --git a/docs/examples/multi_modal/multi_modal_retrieval.ipynb b/docs/docs/examples/multi_modal/multi_modal_retrieval.ipynb
similarity index 100%
rename from docs/examples/multi_modal/multi_modal_retrieval.ipynb
rename to docs/docs/examples/multi_modal/multi_modal_retrieval.ipynb
diff --git a/docs/examples/multi_modal/multi_modal_video_RAG.ipynb b/docs/docs/examples/multi_modal/multi_modal_video_RAG.ipynb
similarity index 100%
rename from docs/examples/multi_modal/multi_modal_video_RAG.ipynb
rename to docs/docs/examples/multi_modal/multi_modal_video_RAG.ipynb
diff --git a/docs/examples/multi_modal/ollama_cookbook.ipynb b/docs/docs/examples/multi_modal/ollama_cookbook.ipynb
similarity index 100%
rename from docs/examples/multi_modal/ollama_cookbook.ipynb
rename to docs/docs/examples/multi_modal/ollama_cookbook.ipynb
diff --git a/docs/examples/multi_modal/openai_multi_modal.ipynb b/docs/docs/examples/multi_modal/openai_multi_modal.ipynb
similarity index 100%
rename from docs/examples/multi_modal/openai_multi_modal.ipynb
rename to docs/docs/examples/multi_modal/openai_multi_modal.ipynb
diff --git a/docs/examples/multi_modal/replicate_multi_modal.ipynb b/docs/docs/examples/multi_modal/replicate_multi_modal.ipynb
similarity index 100%
rename from docs/examples/multi_modal/replicate_multi_modal.ipynb
rename to docs/docs/examples/multi_modal/replicate_multi_modal.ipynb
diff --git a/docs/examples/multi_modal/structured_image_retrieval.ipynb b/docs/docs/examples/multi_modal/structured_image_retrieval.ipynb
similarity index 100%
rename from docs/examples/multi_modal/structured_image_retrieval.ipynb
rename to docs/docs/examples/multi_modal/structured_image_retrieval.ipynb
diff --git a/docs/examples/multi_tenancy/multi_tenancy_rag.ipynb b/docs/docs/examples/multi_tenancy/multi_tenancy_rag.ipynb
similarity index 100%
rename from docs/examples/multi_tenancy/multi_tenancy_rag.ipynb
rename to docs/docs/examples/multi_tenancy/multi_tenancy_rag.ipynb
diff --git a/docs/examples/node_parsers/semantic_chunking.ipynb b/docs/docs/examples/node_parsers/semantic_chunking.ipynb
similarity index 100%
rename from docs/examples/node_parsers/semantic_chunking.ipynb
rename to docs/docs/examples/node_parsers/semantic_chunking.ipynb
diff --git a/docs/examples/node_postprocessor/CohereRerank.ipynb b/docs/docs/examples/node_postprocessor/CohereRerank.ipynb
similarity index 100%
rename from docs/examples/node_postprocessor/CohereRerank.ipynb
rename to docs/docs/examples/node_postprocessor/CohereRerank.ipynb
diff --git a/docs/examples/node_postprocessor/ColbertRerank.ipynb b/docs/docs/examples/node_postprocessor/ColbertRerank.ipynb
similarity index 100%
rename from docs/examples/node_postprocessor/ColbertRerank.ipynb
rename to docs/docs/examples/node_postprocessor/ColbertRerank.ipynb
diff --git a/docs/examples/node_postprocessor/FileNodeProcessors.ipynb b/docs/docs/examples/node_postprocessor/FileNodeProcessors.ipynb
similarity index 100%
rename from docs/examples/node_postprocessor/FileNodeProcessors.ipynb
rename to docs/docs/examples/node_postprocessor/FileNodeProcessors.ipynb
diff --git a/docs/examples/node_postprocessor/FlagEmbeddingReranker.ipynb b/docs/docs/examples/node_postprocessor/FlagEmbeddingReranker.ipynb
similarity index 100%
rename from docs/examples/node_postprocessor/FlagEmbeddingReranker.ipynb
rename to docs/docs/examples/node_postprocessor/FlagEmbeddingReranker.ipynb
diff --git a/docs/examples/node_postprocessor/JinaRerank.ipynb b/docs/docs/examples/node_postprocessor/JinaRerank.ipynb
similarity index 100%
rename from docs/examples/node_postprocessor/JinaRerank.ipynb
rename to docs/docs/examples/node_postprocessor/JinaRerank.ipynb
diff --git a/docs/examples/node_postprocessor/LLMReranker-Gatsby.ipynb b/docs/docs/examples/node_postprocessor/LLMReranker-Gatsby.ipynb
similarity index 100%
rename from docs/examples/node_postprocessor/LLMReranker-Gatsby.ipynb
rename to docs/docs/examples/node_postprocessor/LLMReranker-Gatsby.ipynb
diff --git a/docs/examples/node_postprocessor/LLMReranker-Lyft-10k.ipynb b/docs/docs/examples/node_postprocessor/LLMReranker-Lyft-10k.ipynb
similarity index 100%
rename from docs/examples/node_postprocessor/LLMReranker-Lyft-10k.ipynb
rename to docs/docs/examples/node_postprocessor/LLMReranker-Lyft-10k.ipynb
diff --git a/docs/examples/node_postprocessor/LongContextReorder.ipynb b/docs/docs/examples/node_postprocessor/LongContextReorder.ipynb
similarity index 100%
rename from docs/examples/node_postprocessor/LongContextReorder.ipynb
rename to docs/docs/examples/node_postprocessor/LongContextReorder.ipynb
diff --git a/docs/examples/node_postprocessor/MetadataReplacementDemo.ipynb b/docs/docs/examples/node_postprocessor/MetadataReplacementDemo.ipynb
similarity index 100%
rename from docs/examples/node_postprocessor/MetadataReplacementDemo.ipynb
rename to docs/docs/examples/node_postprocessor/MetadataReplacementDemo.ipynb
diff --git a/docs/examples/node_postprocessor/OptimizerDemo.ipynb b/docs/docs/examples/node_postprocessor/OptimizerDemo.ipynb
similarity index 100%
rename from docs/examples/node_postprocessor/OptimizerDemo.ipynb
rename to docs/docs/examples/node_postprocessor/OptimizerDemo.ipynb
diff --git a/docs/examples/node_postprocessor/PII.ipynb b/docs/docs/examples/node_postprocessor/PII.ipynb
similarity index 100%
rename from docs/examples/node_postprocessor/PII.ipynb
rename to docs/docs/examples/node_postprocessor/PII.ipynb
diff --git a/docs/examples/node_postprocessor/PrevNextPostprocessorDemo.ipynb b/docs/docs/examples/node_postprocessor/PrevNextPostprocessorDemo.ipynb
similarity index 100%
rename from docs/examples/node_postprocessor/PrevNextPostprocessorDemo.ipynb
rename to docs/docs/examples/node_postprocessor/PrevNextPostprocessorDemo.ipynb
diff --git a/docs/examples/node_postprocessor/RecencyPostprocessorDemo.ipynb b/docs/docs/examples/node_postprocessor/RecencyPostprocessorDemo.ipynb
similarity index 100%
rename from docs/examples/node_postprocessor/RecencyPostprocessorDemo.ipynb
rename to docs/docs/examples/node_postprocessor/RecencyPostprocessorDemo.ipynb
diff --git a/docs/examples/node_postprocessor/SentenceTransformerRerank.ipynb b/docs/docs/examples/node_postprocessor/SentenceTransformerRerank.ipynb
similarity index 100%
rename from docs/examples/node_postprocessor/SentenceTransformerRerank.ipynb
rename to docs/docs/examples/node_postprocessor/SentenceTransformerRerank.ipynb
diff --git a/docs/examples/node_postprocessor/TimeWeightedPostprocessorDemo.ipynb b/docs/docs/examples/node_postprocessor/TimeWeightedPostprocessorDemo.ipynb
similarity index 100%
rename from docs/examples/node_postprocessor/TimeWeightedPostprocessorDemo.ipynb
rename to docs/docs/examples/node_postprocessor/TimeWeightedPostprocessorDemo.ipynb
diff --git a/docs/examples/node_postprocessor/index_recency_test.json b/docs/docs/examples/node_postprocessor/index_recency_test.json
similarity index 100%
rename from docs/examples/node_postprocessor/index_recency_test.json
rename to docs/docs/examples/node_postprocessor/index_recency_test.json
diff --git a/docs/examples/node_postprocessor/rankGPT.ipynb b/docs/docs/examples/node_postprocessor/rankGPT.ipynb
similarity index 100%
rename from docs/examples/node_postprocessor/rankGPT.ipynb
rename to docs/docs/examples/node_postprocessor/rankGPT.ipynb
diff --git a/docs/examples/objects/object_index.ipynb b/docs/docs/examples/objects/object_index.ipynb
similarity index 100%
rename from docs/examples/objects/object_index.ipynb
rename to docs/docs/examples/objects/object_index.ipynb
diff --git a/docs/examples/output_parsing/BUILD b/docs/docs/examples/output_parsing/BUILD
similarity index 100%
rename from docs/examples/output_parsing/BUILD
rename to docs/docs/examples/output_parsing/BUILD
diff --git a/docs/examples/output_parsing/GuardrailsDemo.ipynb b/docs/docs/examples/output_parsing/GuardrailsDemo.ipynb
similarity index 100%
rename from docs/examples/output_parsing/GuardrailsDemo.ipynb
rename to docs/docs/examples/output_parsing/GuardrailsDemo.ipynb
diff --git a/docs/examples/output_parsing/LangchainOutputParserDemo.ipynb b/docs/docs/examples/output_parsing/LangchainOutputParserDemo.ipynb
similarity index 100%
rename from docs/examples/output_parsing/LangchainOutputParserDemo.ipynb
rename to docs/docs/examples/output_parsing/LangchainOutputParserDemo.ipynb
diff --git a/docs/examples/output_parsing/df_program.ipynb b/docs/docs/examples/output_parsing/df_program.ipynb
similarity index 100%
rename from docs/examples/output_parsing/df_program.ipynb
rename to docs/docs/examples/output_parsing/df_program.ipynb
diff --git a/docs/examples/output_parsing/directory.py b/docs/docs/examples/output_parsing/directory.py
similarity index 100%
rename from docs/examples/output_parsing/directory.py
rename to docs/docs/examples/output_parsing/directory.py
diff --git a/docs/examples/output_parsing/evaporate_program.ipynb b/docs/docs/examples/output_parsing/evaporate_program.ipynb
similarity index 100%
rename from docs/examples/output_parsing/evaporate_program.ipynb
rename to docs/docs/examples/output_parsing/evaporate_program.ipynb
diff --git a/docs/examples/output_parsing/guidance_pydantic_program.ipynb b/docs/docs/examples/output_parsing/guidance_pydantic_program.ipynb
similarity index 100%
rename from docs/examples/output_parsing/guidance_pydantic_program.ipynb
rename to docs/docs/examples/output_parsing/guidance_pydantic_program.ipynb
diff --git a/docs/examples/output_parsing/guidance_sub_question.ipynb b/docs/docs/examples/output_parsing/guidance_sub_question.ipynb
similarity index 100%
rename from docs/examples/output_parsing/guidance_sub_question.ipynb
rename to docs/docs/examples/output_parsing/guidance_sub_question.ipynb
diff --git a/docs/examples/output_parsing/llm_program.ipynb b/docs/docs/examples/output_parsing/llm_program.ipynb
similarity index 100%
rename from docs/examples/output_parsing/llm_program.ipynb
rename to docs/docs/examples/output_parsing/llm_program.ipynb
diff --git a/docs/examples/output_parsing/lmformatenforcer_pydantic_program.ipynb b/docs/docs/examples/output_parsing/lmformatenforcer_pydantic_program.ipynb
similarity index 100%
rename from docs/examples/output_parsing/lmformatenforcer_pydantic_program.ipynb
rename to docs/docs/examples/output_parsing/lmformatenforcer_pydantic_program.ipynb
diff --git a/docs/examples/output_parsing/lmformatenforcer_regular_expressions.ipynb b/docs/docs/examples/output_parsing/lmformatenforcer_regular_expressions.ipynb
similarity index 100%
rename from docs/examples/output_parsing/lmformatenforcer_regular_expressions.ipynb
rename to docs/docs/examples/output_parsing/lmformatenforcer_regular_expressions.ipynb
diff --git a/docs/examples/output_parsing/openai_pydantic_program.ipynb b/docs/docs/examples/output_parsing/openai_pydantic_program.ipynb
similarity index 100%
rename from docs/examples/output_parsing/openai_pydantic_program.ipynb
rename to docs/docs/examples/output_parsing/openai_pydantic_program.ipynb
diff --git a/docs/examples/output_parsing/openai_sub_question.ipynb b/docs/docs/examples/output_parsing/openai_sub_question.ipynb
similarity index 100%
rename from docs/examples/output_parsing/openai_sub_question.ipynb
rename to docs/docs/examples/output_parsing/openai_sub_question.ipynb
diff --git a/docs/examples/param_optimizer/param_optimizer.ipynb b/docs/docs/examples/param_optimizer/param_optimizer.ipynb
similarity index 100%
rename from docs/examples/param_optimizer/param_optimizer.ipynb
rename to docs/docs/examples/param_optimizer/param_optimizer.ipynb
diff --git a/docs/examples/pipeline/query_pipeline.ipynb b/docs/docs/examples/pipeline/query_pipeline.ipynb
similarity index 100%
rename from docs/examples/pipeline/query_pipeline.ipynb
rename to docs/docs/examples/pipeline/query_pipeline.ipynb
diff --git a/docs/examples/pipeline/query_pipeline_async.ipynb b/docs/docs/examples/pipeline/query_pipeline_async.ipynb
similarity index 100%
rename from docs/examples/pipeline/query_pipeline_async.ipynb
rename to docs/docs/examples/pipeline/query_pipeline_async.ipynb
diff --git a/docs/examples/pipeline/query_pipeline_pandas.ipynb b/docs/docs/examples/pipeline/query_pipeline_pandas.ipynb
similarity index 100%
rename from docs/examples/pipeline/query_pipeline_pandas.ipynb
rename to docs/docs/examples/pipeline/query_pipeline_pandas.ipynb
diff --git a/docs/examples/pipeline/query_pipeline_routing.ipynb b/docs/docs/examples/pipeline/query_pipeline_routing.ipynb
similarity index 100%
rename from docs/examples/pipeline/query_pipeline_routing.ipynb
rename to docs/docs/examples/pipeline/query_pipeline_routing.ipynb
diff --git a/docs/examples/pipeline/query_pipeline_sql.ipynb b/docs/docs/examples/pipeline/query_pipeline_sql.ipynb
similarity index 100%
rename from docs/examples/pipeline/query_pipeline_sql.ipynb
rename to docs/docs/examples/pipeline/query_pipeline_sql.ipynb
diff --git a/docs/examples/prompts/advanced_prompts.ipynb b/docs/docs/examples/prompts/advanced_prompts.ipynb
similarity index 100%
rename from docs/examples/prompts/advanced_prompts.ipynb
rename to docs/docs/examples/prompts/advanced_prompts.ipynb
diff --git a/docs/examples/prompts/emotion_prompt.ipynb b/docs/docs/examples/prompts/emotion_prompt.ipynb
similarity index 100%
rename from docs/examples/prompts/emotion_prompt.ipynb
rename to docs/docs/examples/prompts/emotion_prompt.ipynb
diff --git a/docs/examples/prompts/llama2_qa_citation_events.jsonl b/docs/docs/examples/prompts/llama2_qa_citation_events.jsonl
similarity index 100%
rename from docs/examples/prompts/llama2_qa_citation_events.jsonl
rename to docs/docs/examples/prompts/llama2_qa_citation_events.jsonl
diff --git a/docs/examples/prompts/prompt_mixin.ipynb b/docs/docs/examples/prompts/prompt_mixin.ipynb
similarity index 100%
rename from docs/examples/prompts/prompt_mixin.ipynb
rename to docs/docs/examples/prompts/prompt_mixin.ipynb
diff --git a/docs/examples/prompts/prompt_optimization.ipynb b/docs/docs/examples/prompts/prompt_optimization.ipynb
similarity index 100%
rename from docs/examples/prompts/prompt_optimization.ipynb
rename to docs/docs/examples/prompts/prompt_optimization.ipynb
diff --git a/docs/examples/prompts/prompts_rag.ipynb b/docs/docs/examples/prompts/prompts_rag.ipynb
similarity index 100%
rename from docs/examples/prompts/prompts_rag.ipynb
rename to docs/docs/examples/prompts/prompts_rag.ipynb
diff --git a/docs/examples/query_engine/CustomRetrievers.ipynb b/docs/docs/examples/query_engine/CustomRetrievers.ipynb
similarity index 100%
rename from docs/examples/query_engine/CustomRetrievers.ipynb
rename to docs/docs/examples/query_engine/CustomRetrievers.ipynb
diff --git a/docs/examples/query_engine/JSONalyze_query_engine.ipynb b/docs/docs/examples/query_engine/JSONalyze_query_engine.ipynb
similarity index 100%
rename from docs/examples/query_engine/JSONalyze_query_engine.ipynb
rename to docs/docs/examples/query_engine/JSONalyze_query_engine.ipynb
diff --git a/docs/examples/query_engine/JointQASummary.ipynb b/docs/docs/examples/query_engine/JointQASummary.ipynb
similarity index 100%
rename from docs/examples/query_engine/JointQASummary.ipynb
rename to docs/docs/examples/query_engine/JointQASummary.ipynb
diff --git a/docs/examples/query_engine/RetrieverRouterQueryEngine.ipynb b/docs/docs/examples/query_engine/RetrieverRouterQueryEngine.ipynb
similarity index 100%
rename from docs/examples/query_engine/RetrieverRouterQueryEngine.ipynb
rename to docs/docs/examples/query_engine/RetrieverRouterQueryEngine.ipynb
diff --git a/docs/examples/query_engine/RouterQueryEngine.ipynb b/docs/docs/examples/query_engine/RouterQueryEngine.ipynb
similarity index 100%
rename from docs/examples/query_engine/RouterQueryEngine.ipynb
rename to docs/docs/examples/query_engine/RouterQueryEngine.ipynb
diff --git a/docs/examples/query_engine/SQLAutoVectorQueryEngine.ipynb b/docs/docs/examples/query_engine/SQLAutoVectorQueryEngine.ipynb
similarity index 100%
rename from docs/examples/query_engine/SQLAutoVectorQueryEngine.ipynb
rename to docs/docs/examples/query_engine/SQLAutoVectorQueryEngine.ipynb
diff --git a/docs/examples/query_engine/SQLJoinQueryEngine.ipynb b/docs/docs/examples/query_engine/SQLJoinQueryEngine.ipynb
similarity index 100%
rename from docs/examples/query_engine/SQLJoinQueryEngine.ipynb
rename to docs/docs/examples/query_engine/SQLJoinQueryEngine.ipynb
diff --git a/docs/examples/query_engine/SQLRouterQueryEngine.ipynb b/docs/docs/examples/query_engine/SQLRouterQueryEngine.ipynb
similarity index 100%
rename from docs/examples/query_engine/SQLRouterQueryEngine.ipynb
rename to docs/docs/examples/query_engine/SQLRouterQueryEngine.ipynb
diff --git a/docs/examples/query_engine/citation_query_engine.ipynb b/docs/docs/examples/query_engine/citation_query_engine.ipynb
similarity index 100%
rename from docs/examples/query_engine/citation_query_engine.ipynb
rename to docs/docs/examples/query_engine/citation_query_engine.ipynb
diff --git a/docs/examples/query_engine/cogniswitch_query_engine.ipynb b/docs/docs/examples/query_engine/cogniswitch_query_engine.ipynb
similarity index 100%
rename from docs/examples/query_engine/cogniswitch_query_engine.ipynb
rename to docs/docs/examples/query_engine/cogniswitch_query_engine.ipynb
diff --git a/docs/examples/query_engine/custom_query_engine.ipynb b/docs/docs/examples/query_engine/custom_query_engine.ipynb
similarity index 100%
rename from docs/examples/query_engine/custom_query_engine.ipynb
rename to docs/docs/examples/query_engine/custom_query_engine.ipynb
diff --git a/docs/examples/query_engine/ensemble_query_engine.ipynb b/docs/docs/examples/query_engine/ensemble_query_engine.ipynb
similarity index 100%
rename from docs/examples/query_engine/ensemble_query_engine.ipynb
rename to docs/docs/examples/query_engine/ensemble_query_engine.ipynb
diff --git a/docs/examples/query_engine/flare_query_engine.ipynb b/docs/docs/examples/query_engine/flare_query_engine.ipynb
similarity index 100%
rename from docs/examples/query_engine/flare_query_engine.ipynb
rename to docs/docs/examples/query_engine/flare_query_engine.ipynb
diff --git a/docs/examples/query_engine/json_query_engine.ipynb b/docs/docs/examples/query_engine/json_query_engine.ipynb
similarity index 100%
rename from docs/examples/query_engine/json_query_engine.ipynb
rename to docs/docs/examples/query_engine/json_query_engine.ipynb
diff --git a/docs/examples/query_engine/knowledge_graph_query_engine.ipynb b/docs/docs/examples/query_engine/knowledge_graph_query_engine.ipynb
similarity index 100%
rename from docs/examples/query_engine/knowledge_graph_query_engine.ipynb
rename to docs/docs/examples/query_engine/knowledge_graph_query_engine.ipynb
diff --git a/docs/examples/query_engine/knowledge_graph_rag_query_engine.ipynb b/docs/docs/examples/query_engine/knowledge_graph_rag_query_engine.ipynb
similarity index 100%
rename from docs/examples/query_engine/knowledge_graph_rag_query_engine.ipynb
rename to docs/docs/examples/query_engine/knowledge_graph_rag_query_engine.ipynb
diff --git a/docs/examples/query_engine/multi_doc_auto_retrieval/multi_doc_auto_retrieval.ipynb b/docs/docs/examples/query_engine/multi_doc_auto_retrieval/multi_doc_auto_retrieval.ipynb
similarity index 100%
rename from docs/examples/query_engine/multi_doc_auto_retrieval/multi_doc_auto_retrieval.ipynb
rename to docs/docs/examples/query_engine/multi_doc_auto_retrieval/multi_doc_auto_retrieval.ipynb
diff --git a/docs/examples/query_engine/nebulagraph_draw.html b/docs/docs/examples/query_engine/nebulagraph_draw.html
similarity index 100%
rename from docs/examples/query_engine/nebulagraph_draw.html
rename to docs/docs/examples/query_engine/nebulagraph_draw.html
diff --git a/docs/examples/query_engine/nebulagraph_draw_quill.html b/docs/docs/examples/query_engine/nebulagraph_draw_quill.html
similarity index 100%
rename from docs/examples/query_engine/nebulagraph_draw_quill.html
rename to docs/docs/examples/query_engine/nebulagraph_draw_quill.html
diff --git a/docs/examples/query_engine/pandas_query_engine.ipynb b/docs/docs/examples/query_engine/pandas_query_engine.ipynb
similarity index 100%
rename from docs/examples/query_engine/pandas_query_engine.ipynb
rename to docs/docs/examples/query_engine/pandas_query_engine.ipynb
diff --git a/docs/examples/query_engine/pdf_tables/billionaires_page.pdf b/docs/docs/examples/query_engine/pdf_tables/billionaires_page.pdf
similarity index 100%
rename from docs/examples/query_engine/pdf_tables/billionaires_page.pdf
rename to docs/docs/examples/query_engine/pdf_tables/billionaires_page.pdf
diff --git a/docs/examples/query_engine/pdf_tables/recursive_retriever.ipynb b/docs/docs/examples/query_engine/pdf_tables/recursive_retriever.ipynb
similarity index 100%
rename from docs/examples/query_engine/pdf_tables/recursive_retriever.ipynb
rename to docs/docs/examples/query_engine/pdf_tables/recursive_retriever.ipynb
diff --git a/docs/examples/query_engine/pgvector_sql_query_engine.ipynb b/docs/docs/examples/query_engine/pgvector_sql_query_engine.ipynb
similarity index 100%
rename from docs/examples/query_engine/pgvector_sql_query_engine.ipynb
rename to docs/docs/examples/query_engine/pgvector_sql_query_engine.ipynb
diff --git a/docs/examples/query_engine/pydantic_query_engine.ipynb b/docs/docs/examples/query_engine/pydantic_query_engine.ipynb
similarity index 100%
rename from docs/examples/query_engine/pydantic_query_engine.ipynb
rename to docs/docs/examples/query_engine/pydantic_query_engine.ipynb
diff --git a/docs/examples/query_engine/recursive_retriever_agents.ipynb b/docs/docs/examples/query_engine/recursive_retriever_agents.ipynb
similarity index 100%
rename from docs/examples/query_engine/recursive_retriever_agents.ipynb
rename to docs/docs/examples/query_engine/recursive_retriever_agents.ipynb
diff --git a/docs/examples/query_engine/sec_tables/tesla_10q_table.ipynb b/docs/docs/examples/query_engine/sec_tables/tesla_10q_table.ipynb
similarity index 100%
rename from docs/examples/query_engine/sec_tables/tesla_10q_table.ipynb
rename to docs/docs/examples/query_engine/sec_tables/tesla_10q_table.ipynb
diff --git a/docs/examples/query_engine/sub_question_query_engine.ipynb b/docs/docs/examples/query_engine/sub_question_query_engine.ipynb
similarity index 100%
rename from docs/examples/query_engine/sub_question_query_engine.ipynb
rename to docs/docs/examples/query_engine/sub_question_query_engine.ipynb
diff --git a/docs/examples/query_transformations/HyDEQueryTransformDemo.ipynb b/docs/docs/examples/query_transformations/HyDEQueryTransformDemo.ipynb
similarity index 100%
rename from docs/examples/query_transformations/HyDEQueryTransformDemo.ipynb
rename to docs/docs/examples/query_transformations/HyDEQueryTransformDemo.ipynb
diff --git a/docs/examples/query_transformations/SimpleIndexDemo-multistep.ipynb b/docs/docs/examples/query_transformations/SimpleIndexDemo-multistep.ipynb
similarity index 100%
rename from docs/examples/query_transformations/SimpleIndexDemo-multistep.ipynb
rename to docs/docs/examples/query_transformations/SimpleIndexDemo-multistep.ipynb
diff --git a/docs/examples/query_transformations/query_transform_cookbook.ipynb b/docs/docs/examples/query_transformations/query_transform_cookbook.ipynb
similarity index 100%
rename from docs/examples/query_transformations/query_transform_cookbook.ipynb
rename to docs/docs/examples/query_transformations/query_transform_cookbook.ipynb
diff --git a/docs/examples/response_synthesizers/custom_prompt_synthesizer.ipynb b/docs/docs/examples/response_synthesizers/custom_prompt_synthesizer.ipynb
similarity index 100%
rename from docs/examples/response_synthesizers/custom_prompt_synthesizer.ipynb
rename to docs/docs/examples/response_synthesizers/custom_prompt_synthesizer.ipynb
diff --git a/docs/examples/response_synthesizers/long_context_test.ipynb b/docs/docs/examples/response_synthesizers/long_context_test.ipynb
similarity index 100%
rename from docs/examples/response_synthesizers/long_context_test.ipynb
rename to docs/docs/examples/response_synthesizers/long_context_test.ipynb
diff --git a/docs/examples/response_synthesizers/pydantic_tree_summarize.ipynb b/docs/docs/examples/response_synthesizers/pydantic_tree_summarize.ipynb
similarity index 100%
rename from docs/examples/response_synthesizers/pydantic_tree_summarize.ipynb
rename to docs/docs/examples/response_synthesizers/pydantic_tree_summarize.ipynb
diff --git a/docs/examples/response_synthesizers/refine.ipynb b/docs/docs/examples/response_synthesizers/refine.ipynb
similarity index 100%
rename from docs/examples/response_synthesizers/refine.ipynb
rename to docs/docs/examples/response_synthesizers/refine.ipynb
diff --git a/docs/examples/response_synthesizers/structured_refine.ipynb b/docs/docs/examples/response_synthesizers/structured_refine.ipynb
similarity index 100%
rename from docs/examples/response_synthesizers/structured_refine.ipynb
rename to docs/docs/examples/response_synthesizers/structured_refine.ipynb
diff --git a/docs/examples/response_synthesizers/tree_summarize.ipynb b/docs/docs/examples/response_synthesizers/tree_summarize.ipynb
similarity index 100%
rename from docs/examples/response_synthesizers/tree_summarize.ipynb
rename to docs/docs/examples/response_synthesizers/tree_summarize.ipynb
diff --git a/docs/examples/retrievers/auto_merging_retriever.ipynb b/docs/docs/examples/retrievers/auto_merging_retriever.ipynb
similarity index 100%
rename from docs/examples/retrievers/auto_merging_retriever.ipynb
rename to docs/docs/examples/retrievers/auto_merging_retriever.ipynb
diff --git a/docs/examples/retrievers/auto_vs_recursive_retriever.ipynb b/docs/docs/examples/retrievers/auto_vs_recursive_retriever.ipynb
similarity index 100%
rename from docs/examples/retrievers/auto_vs_recursive_retriever.ipynb
rename to docs/docs/examples/retrievers/auto_vs_recursive_retriever.ipynb
diff --git a/docs/examples/retrievers/bm25_retriever.ipynb b/docs/docs/examples/retrievers/bm25_retriever.ipynb
similarity index 100%
rename from docs/examples/retrievers/bm25_retriever.ipynb
rename to docs/docs/examples/retrievers/bm25_retriever.ipynb
diff --git a/docs/examples/retrievers/composable_retrievers.ipynb b/docs/docs/examples/retrievers/composable_retrievers.ipynb
similarity index 100%
rename from docs/examples/retrievers/composable_retrievers.ipynb
rename to docs/docs/examples/retrievers/composable_retrievers.ipynb
diff --git a/docs/docs/examples/retrievers/data/paul_graham/paul_graham_essay.txt b/docs/docs/examples/retrievers/data/paul_graham/paul_graham_essay.txt
new file mode 100644
index 0000000000000000000000000000000000000000..6ebd858793994d7f1299411dc5c8a582ca4a1175
--- /dev/null
+++ b/docs/docs/examples/retrievers/data/paul_graham/paul_graham_essay.txt
@@ -0,0 +1,353 @@
+
+
+What I Worked On
+
+February 2021
+
+Before college the two main things I worked on, outside of school, were writing and programming. I didn't write essays. I wrote what beginning writers were supposed to write then, and probably still are: short stories. My stories were awful. They had hardly any plot, just characters with strong feelings, which I imagined made them deep.
+
+The first programs I tried writing were on the IBM 1401 that our school district used for what was then called "data processing." This was in 9th grade, so I was 13 or 14. The school district's 1401 happened to be in the basement of our junior high school, and my friend Rich Draves and I got permission to use it. It was like a mini Bond villain's lair down there, with all these alien-looking machines — CPU, disk drives, printer, card reader — sitting up on a raised floor under bright fluorescent lights.
+
+The language we used was an early version of Fortran. You had to type programs on punch cards, then stack them in the card reader and press a button to load the program into memory and run it. The result would ordinarily be to print something on the spectacularly loud printer.
+
+I was puzzled by the 1401. I couldn't figure out what to do with it. And in retrospect there's not much I could have done with it. The only form of input to programs was data stored on punched cards, and I didn't have any data stored on punched cards. The only other option was to do things that didn't rely on any input, like calculate approximations of pi, but I didn't know enough math to do anything interesting of that type. So I'm not surprised I can't remember any programs I wrote, because they can't have done much. My clearest memory is of the moment I learned it was possible for programs not to terminate, when one of mine didn't. On a machine without time-sharing, this was a social as well as a technical error, as the data center manager's expression made clear.
+
+With microcomputers, everything changed. Now you could have a computer sitting right in front of you, on a desk, that could respond to your keystrokes as it was running instead of just churning through a stack of punch cards and then stopping. [1]
+
+The first of my friends to get a microcomputer built it himself. It was sold as a kit by Heathkit. I remember vividly how impressed and envious I felt watching him sitting in front of it, typing programs right into the computer.
+
+Computers were expensive in those days and it took me years of nagging before I convinced my father to buy one, a TRS-80, in about 1980. The gold standard then was the Apple II, but a TRS-80 was good enough. This was when I really started programming. I wrote simple games, a program to predict how high my model rockets would fly, and a word processor that my father used to write at least one book. There was only room in memory for about 2 pages of text, so he'd write 2 pages at a time and then print them out, but it was a lot better than a typewriter.
+
+Though I liked programming, I didn't plan to study it in college. In college I was going to study philosophy, which sounded much more powerful. It seemed, to my naive high school self, to be the study of the ultimate truths, compared to which the things studied in other fields would be mere domain knowledge. What I discovered when I got to college was that the other fields took up so much of the space of ideas that there wasn't much left for these supposed ultimate truths. All that seemed left for philosophy were edge cases that people in other fields felt could safely be ignored.
+
+I couldn't have put this into words when I was 18. All I knew at the time was that I kept taking philosophy courses and they kept being boring. So I decided to switch to AI.
+
+AI was in the air in the mid 1980s, but there were two things especially that made me want to work on it: a novel by Heinlein called The Moon is a Harsh Mistress, which featured an intelligent computer called Mike, and a PBS documentary that showed Terry Winograd using SHRDLU. I haven't tried rereading The Moon is a Harsh Mistress, so I don't know how well it has aged, but when I read it I was drawn entirely into its world. It seemed only a matter of time before we'd have Mike, and when I saw Winograd using SHRDLU, it seemed like that time would be a few years at most. All you had to do was teach SHRDLU more words.
+
+There weren't any classes in AI at Cornell then, not even graduate classes, so I started trying to teach myself. Which meant learning Lisp, since in those days Lisp was regarded as the language of AI. The commonly used programming languages then were pretty primitive, and programmers' ideas correspondingly so. The default language at Cornell was a Pascal-like language called PL/I, and the situation was similar elsewhere. Learning Lisp expanded my concept of a program so fast that it was years before I started to have a sense of where the new limits were. This was more like it; this was what I had expected college to do. It wasn't happening in a class, like it was supposed to, but that was ok. For the next couple years I was on a roll. I knew what I was going to do.
+
+For my undergraduate thesis, I reverse-engineered SHRDLU. My God did I love working on that program. It was a pleasing bit of code, but what made it even more exciting was my belief — hard to imagine now, but not unique in 1985 — that it was already climbing the lower slopes of intelligence.
+
+I had gotten into a program at Cornell that didn't make you choose a major. You could take whatever classes you liked, and choose whatever you liked to put on your degree. I of course chose "Artificial Intelligence." When I got the actual physical diploma, I was dismayed to find that the quotes had been included, which made them read as scare-quotes. At the time this bothered me, but now it seems amusingly accurate, for reasons I was about to discover.
+
+I applied to 3 grad schools: MIT and Yale, which were renowned for AI at the time, and Harvard, which I'd visited because Rich Draves went there, and was also home to Bill Woods, who'd invented the type of parser I used in my SHRDLU clone. Only Harvard accepted me, so that was where I went.
+
+I don't remember the moment it happened, or if there even was a specific moment, but during the first year of grad school I realized that AI, as practiced at the time, was a hoax. By which I mean the sort of AI in which a program that's told "the dog is sitting on the chair" translates this into some formal representation and adds it to the list of things it knows.
+
+What these programs really showed was that there's a subset of natural language that's a formal language. But a very proper subset. It was clear that there was an unbridgeable gap between what they could do and actually understanding natural language. It was not, in fact, simply a matter of teaching SHRDLU more words. That whole way of doing AI, with explicit data structures representing concepts, was not going to work. Its brokenness did, as so often happens, generate a lot of opportunities to write papers about various band-aids that could be applied to it, but it was never going to get us Mike.
+
+So I looked around to see what I could salvage from the wreckage of my plans, and there was Lisp. I knew from experience that Lisp was interesting for its own sake and not just for its association with AI, even though that was the main reason people cared about it at the time. So I decided to focus on Lisp. In fact, I decided to write a book about Lisp hacking. It's scary to think how little I knew about Lisp hacking when I started writing that book. But there's nothing like writing a book about something to help you learn it. The book, On Lisp, wasn't published till 1993, but I wrote much of it in grad school.
+
+Computer Science is an uneasy alliance between two halves, theory and systems. The theory people prove things, and the systems people build things. I wanted to build things. I had plenty of respect for theory — indeed, a sneaking suspicion that it was the more admirable of the two halves — but building things seemed so much more exciting.
+
+The problem with systems work, though, was that it didn't last. Any program you wrote today, no matter how good, would be obsolete in a couple decades at best. People might mention your software in footnotes, but no one would actually use it. And indeed, it would seem very feeble work. Only people with a sense of the history of the field would even realize that, in its time, it had been good.
+
+There were some surplus Xerox Dandelions floating around the computer lab at one point. Anyone who wanted one to play around with could have one. I was briefly tempted, but they were so slow by present standards; what was the point? No one else wanted one either, so off they went. That was what happened to systems work.
+
+I wanted not just to build things, but to build things that would last.
+
+In this dissatisfied state I went in 1988 to visit Rich Draves at CMU, where he was in grad school. One day I went to visit the Carnegie Institute, where I'd spent a lot of time as a kid. While looking at a painting there I realized something that might seem obvious, but was a big surprise to me. There, right on the wall, was something you could make that would last. Paintings didn't become obsolete. Some of the best ones were hundreds of years old.
+
+And moreover this was something you could make a living doing. Not as easily as you could by writing software, of course, but I thought if you were really industrious and lived really cheaply, it had to be possible to make enough to survive. And as an artist you could be truly independent. You wouldn't have a boss, or even need to get research funding.
+
+I had always liked looking at paintings. Could I make them? I had no idea. I'd never imagined it was even possible. I knew intellectually that people made art — that it didn't just appear spontaneously — but it was as if the people who made it were a different species. They either lived long ago or were mysterious geniuses doing strange things in profiles in Life magazine. The idea of actually being able to make art, to put that verb before that noun, seemed almost miraculous.
+
+That fall I started taking art classes at Harvard. Grad students could take classes in any department, and my advisor, Tom Cheatham, was very easy going. If he even knew about the strange classes I was taking, he never said anything.
+
+So now I was in a PhD program in computer science, yet planning to be an artist, yet also genuinely in love with Lisp hacking and working away at On Lisp. In other words, like many a grad student, I was working energetically on multiple projects that were not my thesis.
+
+I didn't see a way out of this situation. I didn't want to drop out of grad school, but how else was I going to get out? I remember when my friend Robert Morris got kicked out of Cornell for writing the internet worm of 1988, I was envious that he'd found such a spectacular way to get out of grad school.
+
+Then one day in April 1990 a crack appeared in the wall. I ran into professor Cheatham and he asked if I was far enough along to graduate that June. I didn't have a word of my dissertation written, but in what must have been the quickest bit of thinking in my life, I decided to take a shot at writing one in the 5 weeks or so that remained before the deadline, reusing parts of On Lisp where I could, and I was able to respond, with no perceptible delay "Yes, I think so. I'll give you something to read in a few days."
+
+I picked applications of continuations as the topic. In retrospect I should have written about macros and embedded languages. There's a whole world there that's barely been explored. But all I wanted was to get out of grad school, and my rapidly written dissertation sufficed, just barely.
+
+Meanwhile I was applying to art schools. I applied to two: RISD in the US, and the Accademia di Belli Arti in Florence, which, because it was the oldest art school, I imagined would be good. RISD accepted me, and I never heard back from the Accademia, so off to Providence I went.
+
+I'd applied for the BFA program at RISD, which meant in effect that I had to go to college again. This was not as strange as it sounds, because I was only 25, and art schools are full of people of different ages. RISD counted me as a transfer sophomore and said I had to do the foundation that summer. The foundation means the classes that everyone has to take in fundamental subjects like drawing, color, and design.
+
+Toward the end of the summer I got a big surprise: a letter from the Accademia, which had been delayed because they'd sent it to Cambridge England instead of Cambridge Massachusetts, inviting me to take the entrance exam in Florence that fall. This was now only weeks away. My nice landlady let me leave my stuff in her attic. I had some money saved from consulting work I'd done in grad school; there was probably enough to last a year if I lived cheaply. Now all I had to do was learn Italian.
+
+Only stranieri (foreigners) had to take this entrance exam. In retrospect it may well have been a way of excluding them, because there were so many stranieri attracted by the idea of studying art in Florence that the Italian students would otherwise have been outnumbered. I was in decent shape at painting and drawing from the RISD foundation that summer, but I still don't know how I managed to pass the written exam. I remember that I answered the essay question by writing about Cezanne, and that I cranked up the intellectual level as high as I could to make the most of my limited vocabulary. [2]
+
+I'm only up to age 25 and already there are such conspicuous patterns. Here I was, yet again about to attend some august institution in the hopes of learning about some prestigious subject, and yet again about to be disappointed. The students and faculty in the painting department at the Accademia were the nicest people you could imagine, but they had long since arrived at an arrangement whereby the students wouldn't require the faculty to teach anything, and in return the faculty wouldn't require the students to learn anything. And at the same time all involved would adhere outwardly to the conventions of a 19th century atelier. We actually had one of those little stoves, fed with kindling, that you see in 19th century studio paintings, and a nude model sitting as close to it as possible without getting burned. Except hardly anyone else painted her besides me. The rest of the students spent their time chatting or occasionally trying to imitate things they'd seen in American art magazines.
+
+Our model turned out to live just down the street from me. She made a living from a combination of modelling and making fakes for a local antique dealer. She'd copy an obscure old painting out of a book, and then he'd take the copy and maltreat it to make it look old. [3]
+
+While I was a student at the Accademia I started painting still lives in my bedroom at night. These paintings were tiny, because the room was, and because I painted them on leftover scraps of canvas, which was all I could afford at the time. Painting still lives is different from painting people, because the subject, as its name suggests, can't move. People can't sit for more than about 15 minutes at a time, and when they do they don't sit very still. So the traditional m.o. for painting people is to know how to paint a generic person, which you then modify to match the specific person you're painting. Whereas a still life you can, if you want, copy pixel by pixel from what you're seeing. You don't want to stop there, of course, or you get merely photographic accuracy, and what makes a still life interesting is that it's been through a head. You want to emphasize the visual cues that tell you, for example, that the reason the color changes suddenly at a certain point is that it's the edge of an object. By subtly emphasizing such things you can make paintings that are more realistic than photographs not just in some metaphorical sense, but in the strict information-theoretic sense. [4]
+
+I liked painting still lives because I was curious about what I was seeing. In everyday life, we aren't consciously aware of much we're seeing. Most visual perception is handled by low-level processes that merely tell your brain "that's a water droplet" without telling you details like where the lightest and darkest points are, or "that's a bush" without telling you the shape and position of every leaf. This is a feature of brains, not a bug. In everyday life it would be distracting to notice every leaf on every bush. But when you have to paint something, you have to look more closely, and when you do there's a lot to see. You can still be noticing new things after days of trying to paint something people usually take for granted, just as you can after days of trying to write an essay about something people usually take for granted.
+
+This is not the only way to paint. I'm not 100% sure it's even a good way to paint. But it seemed a good enough bet to be worth trying.
+
+Our teacher, professor Ulivi, was a nice guy. He could see I worked hard, and gave me a good grade, which he wrote down in a sort of passport each student had. But the Accademia wasn't teaching me anything except Italian, and my money was running out, so at the end of the first year I went back to the US.
+
+I wanted to go back to RISD, but I was now broke and RISD was very expensive, so I decided to get a job for a year and then return to RISD the next fall. I got one at a company called Interleaf, which made software for creating documents. You mean like Microsoft Word? Exactly. That was how I learned that low end software tends to eat high end software. But Interleaf still had a few years to live yet. [5]
+
+Interleaf had done something pretty bold. Inspired by Emacs, they'd added a scripting language, and even made the scripting language a dialect of Lisp. Now they wanted a Lisp hacker to write things in it. This was the closest thing I've had to a normal job, and I hereby apologize to my boss and coworkers, because I was a bad employee. Their Lisp was the thinnest icing on a giant C cake, and since I didn't know C and didn't want to learn it, I never understood most of the software. Plus I was terribly irresponsible. This was back when a programming job meant showing up every day during certain working hours. That seemed unnatural to me, and on this point the rest of the world is coming around to my way of thinking, but at the time it caused a lot of friction. Toward the end of the year I spent much of my time surreptitiously working on On Lisp, which I had by this time gotten a contract to publish.
+
+The good part was that I got paid huge amounts of money, especially by art student standards. In Florence, after paying my part of the rent, my budget for everything else had been $7 a day. Now I was getting paid more than 4 times that every hour, even when I was just sitting in a meeting. By living cheaply I not only managed to save enough to go back to RISD, but also paid off my college loans.
+
+I learned some useful things at Interleaf, though they were mostly about what not to do. I learned that it's better for technology companies to be run by product people than sales people (though sales is a real skill and people who are good at it are really good at it), that it leads to bugs when code is edited by too many people, that cheap office space is no bargain if it's depressing, that planned meetings are inferior to corridor conversations, that big, bureaucratic customers are a dangerous source of money, and that there's not much overlap between conventional office hours and the optimal time for hacking, or conventional offices and the optimal place for it.
+
+But the most important thing I learned, and which I used in both Viaweb and Y Combinator, is that the low end eats the high end: that it's good to be the "entry level" option, even though that will be less prestigious, because if you're not, someone else will be, and will squash you against the ceiling. Which in turn means that prestige is a danger sign.
+
+When I left to go back to RISD the next fall, I arranged to do freelance work for the group that did projects for customers, and this was how I survived for the next several years. When I came back to visit for a project later on, someone told me about a new thing called HTML, which was, as he described it, a derivative of SGML. Markup language enthusiasts were an occupational hazard at Interleaf and I ignored him, but this HTML thing later became a big part of my life.
+
+In the fall of 1992 I moved back to Providence to continue at RISD. The foundation had merely been intro stuff, and the Accademia had been a (very civilized) joke. Now I was going to see what real art school was like. But alas it was more like the Accademia than not. Better organized, certainly, and a lot more expensive, but it was now becoming clear that art school did not bear the same relationship to art that medical school bore to medicine. At least not the painting department. The textile department, which my next door neighbor belonged to, seemed to be pretty rigorous. No doubt illustration and architecture were too. But painting was post-rigorous. Painting students were supposed to express themselves, which to the more worldly ones meant to try to cook up some sort of distinctive signature style.
+
+A signature style is the visual equivalent of what in show business is known as a "schtick": something that immediately identifies the work as yours and no one else's. For example, when you see a painting that looks like a certain kind of cartoon, you know it's by Roy Lichtenstein. So if you see a big painting of this type hanging in the apartment of a hedge fund manager, you know he paid millions of dollars for it. That's not always why artists have a signature style, but it's usually why buyers pay a lot for such work. [6]
+
+There were plenty of earnest students too: kids who "could draw" in high school, and now had come to what was supposed to be the best art school in the country, to learn to draw even better. They tended to be confused and demoralized by what they found at RISD, but they kept going, because painting was what they did. I was not one of the kids who could draw in high school, but at RISD I was definitely closer to their tribe than the tribe of signature style seekers.
+
+I learned a lot in the color class I took at RISD, but otherwise I was basically teaching myself to paint, and I could do that for free. So in 1993 I dropped out. I hung around Providence for a bit, and then my college friend Nancy Parmet did me a big favor. A rent-controlled apartment in a building her mother owned in New York was becoming vacant. Did I want it? It wasn't much more than my current place, and New York was supposed to be where the artists were. So yes, I wanted it! [7]
+
+Asterix comics begin by zooming in on a tiny corner of Roman Gaul that turns out not to be controlled by the Romans. You can do something similar on a map of New York City: if you zoom in on the Upper East Side, there's a tiny corner that's not rich, or at least wasn't in 1993. It's called Yorkville, and that was my new home. Now I was a New York artist — in the strictly technical sense of making paintings and living in New York.
+
+I was nervous about money, because I could sense that Interleaf was on the way down. Freelance Lisp hacking work was very rare, and I didn't want to have to program in another language, which in those days would have meant C++ if I was lucky. So with my unerring nose for financial opportunity, I decided to write another book on Lisp. This would be a popular book, the sort of book that could be used as a textbook. I imagined myself living frugally off the royalties and spending all my time painting. (The painting on the cover of this book, ANSI Common Lisp, is one that I painted around this time.)
+
+The best thing about New York for me was the presence of Idelle and Julian Weber. Idelle Weber was a painter, one of the early photorealists, and I'd taken her painting class at Harvard. I've never known a teacher more beloved by her students. Large numbers of former students kept in touch with her, including me. After I moved to New York I became her de facto studio assistant.
+
+She liked to paint on big, square canvases, 4 to 5 feet on a side. One day in late 1994 as I was stretching one of these monsters there was something on the radio about a famous fund manager. He wasn't that much older than me, and was super rich. The thought suddenly occurred to me: why don't I become rich? Then I'll be able to work on whatever I want.
+
+Meanwhile I'd been hearing more and more about this new thing called the World Wide Web. Robert Morris showed it to me when I visited him in Cambridge, where he was now in grad school at Harvard. It seemed to me that the web would be a big deal. I'd seen what graphical user interfaces had done for the popularity of microcomputers. It seemed like the web would do the same for the internet.
+
+If I wanted to get rich, here was the next train leaving the station. I was right about that part. What I got wrong was the idea. I decided we should start a company to put art galleries online. I can't honestly say, after reading so many Y Combinator applications, that this was the worst startup idea ever, but it was up there. Art galleries didn't want to be online, and still don't, not the fancy ones. That's not how they sell. I wrote some software to generate web sites for galleries, and Robert wrote some to resize images and set up an http server to serve the pages. Then we tried to sign up galleries. To call this a difficult sale would be an understatement. It was difficult to give away. A few galleries let us make sites for them for free, but none paid us.
+
+Then some online stores started to appear, and I realized that except for the order buttons they were identical to the sites we'd been generating for galleries. This impressive-sounding thing called an "internet storefront" was something we already knew how to build.
+
+So in the summer of 1995, after I submitted the camera-ready copy of ANSI Common Lisp to the publishers, we started trying to write software to build online stores. At first this was going to be normal desktop software, which in those days meant Windows software. That was an alarming prospect, because neither of us knew how to write Windows software or wanted to learn. We lived in the Unix world. But we decided we'd at least try writing a prototype store builder on Unix. Robert wrote a shopping cart, and I wrote a new site generator for stores — in Lisp, of course.
+
+We were working out of Robert's apartment in Cambridge. His roommate was away for big chunks of time, during which I got to sleep in his room. For some reason there was no bed frame or sheets, just a mattress on the floor. One morning as I was lying on this mattress I had an idea that made me sit up like a capital L. What if we ran the software on the server, and let users control it by clicking on links? Then we'd never have to write anything to run on users' computers. We could generate the sites on the same server we'd serve them from. Users wouldn't need anything more than a browser.
+
+This kind of software, known as a web app, is common now, but at the time it wasn't clear that it was even possible. To find out, we decided to try making a version of our store builder that you could control through the browser. A couple days later, on August 12, we had one that worked. The UI was horrible, but it proved you could build a whole store through the browser, without any client software or typing anything into the command line on the server.
+
+Now we felt like we were really onto something. I had visions of a whole new generation of software working this way. You wouldn't need versions, or ports, or any of that crap. At Interleaf there had been a whole group called Release Engineering that seemed to be at least as big as the group that actually wrote the software. Now you could just update the software right on the server.
+
+We started a new company we called Viaweb, after the fact that our software worked via the web, and we got $10,000 in seed funding from Idelle's husband Julian. In return for that and doing the initial legal work and giving us business advice, we gave him 10% of the company. Ten years later this deal became the model for Y Combinator's. We knew founders needed something like this, because we'd needed it ourselves.
+
+At this stage I had a negative net worth, because the thousand dollars or so I had in the bank was more than counterbalanced by what I owed the government in taxes. (Had I diligently set aside the proper proportion of the money I'd made consulting for Interleaf? No, I had not.) So although Robert had his graduate student stipend, I needed that seed funding to live on.
+
+We originally hoped to launch in September, but we got more ambitious about the software as we worked on it. Eventually we managed to build a WYSIWYG site builder, in the sense that as you were creating pages, they looked exactly like the static ones that would be generated later, except that instead of leading to static pages, the links all referred to closures stored in a hash table on the server.
+
+It helped to have studied art, because the main goal of an online store builder is to make users look legit, and the key to looking legit is high production values. If you get page layouts and fonts and colors right, you can make a guy running a store out of his bedroom look more legit than a big company.
+
+(If you're curious why my site looks so old-fashioned, it's because it's still made with this software. It may look clunky today, but in 1996 it was the last word in slick.)
+
+In September, Robert rebelled. "We've been working on this for a month," he said, "and it's still not done." This is funny in retrospect, because he would still be working on it almost 3 years later. But I decided it might be prudent to recruit more programmers, and I asked Robert who else in grad school with him was really good. He recommended Trevor Blackwell, which surprised me at first, because at that point I knew Trevor mainly for his plan to reduce everything in his life to a stack of notecards, which he carried around with him. But Rtm was right, as usual. Trevor turned out to be a frighteningly effective hacker.
+
+It was a lot of fun working with Robert and Trevor. They're the two most independent-minded people I know, and in completely different ways. If you could see inside Rtm's brain it would look like a colonial New England church, and if you could see inside Trevor's it would look like the worst excesses of Austrian Rococo.
+
+We opened for business, with 6 stores, in January 1996. It was just as well we waited a few months, because although we worried we were late, we were actually almost fatally early. There was a lot of talk in the press then about ecommerce, but not many people actually wanted online stores. [8]
+
+There were three main parts to the software: the editor, which people used to build sites and which I wrote, the shopping cart, which Robert wrote, and the manager, which kept track of orders and statistics, and which Trevor wrote. In its time, the editor was one of the best general-purpose site builders. I kept the code tight and didn't have to integrate with any other software except Robert's and Trevor's, so it was quite fun to work on. If all I'd had to do was work on this software, the next 3 years would have been the easiest of my life. Unfortunately I had to do a lot more, all of it stuff I was worse at than programming, and the next 3 years were instead the most stressful.
+
+There were a lot of startups making ecommerce software in the second half of the 90s. We were determined to be the Microsoft Word, not the Interleaf. Which meant being easy to use and inexpensive. It was lucky for us that we were poor, because that caused us to make Viaweb even more inexpensive than we realized. We charged $100 a month for a small store and $300 a month for a big one. This low price was a big attraction, and a constant thorn in the sides of competitors, but it wasn't because of some clever insight that we set the price low. We had no idea what businesses paid for things. $300 a month seemed like a lot of money to us.
+
+We did a lot of things right by accident like that. For example, we did what's now called "doing things that don't scale," although at the time we would have described it as "being so lame that we're driven to the most desperate measures to get users." The most common of which was building stores for them. This seemed particularly humiliating, since the whole raison d'etre of our software was that people could use it to make their own stores. But anything to get users.
+
+We learned a lot more about retail than we wanted to know. For example, that if you could only have a small image of a man's shirt (and all images were small then by present standards), it was better to have a closeup of the collar than a picture of the whole shirt. The reason I remember learning this was that it meant I had to rescan about 30 images of men's shirts. My first set of scans were so beautiful too.
+
+Though this felt wrong, it was exactly the right thing to be doing. Building stores for users taught us about retail, and about how it felt to use our software. I was initially both mystified and repelled by "business" and thought we needed a "business person" to be in charge of it, but once we started to get users, I was converted, in much the same way I was converted to fatherhood once I had kids. Whatever users wanted, I was all theirs. Maybe one day we'd have so many users that I couldn't scan their images for them, but in the meantime there was nothing more important to do.
+
+Another thing I didn't get at the time is that growth rate is the ultimate test of a startup. Our growth rate was fine. We had about 70 stores at the end of 1996 and about 500 at the end of 1997. I mistakenly thought the thing that mattered was the absolute number of users. And that is the thing that matters in the sense that that's how much money you're making, and if you're not making enough, you might go out of business. But in the long term the growth rate takes care of the absolute number. If we'd been a startup I was advising at Y Combinator, I would have said: Stop being so stressed out, because you're doing fine. You're growing 7x a year. Just don't hire too many more people and you'll soon be profitable, and then you'll control your own destiny.
+
+Alas I hired lots more people, partly because our investors wanted me to, and partly because that's what startups did during the Internet Bubble. A company with just a handful of employees would have seemed amateurish. So we didn't reach breakeven until about when Yahoo bought us in the summer of 1998. Which in turn meant we were at the mercy of investors for the entire life of the company. And since both we and our investors were noobs at startups, the result was a mess even by startup standards.
+
+It was a huge relief when Yahoo bought us. In principle our Viaweb stock was valuable. It was a share in a business that was profitable and growing rapidly. But it didn't feel very valuable to me; I had no idea how to value a business, but I was all too keenly aware of the near-death experiences we seemed to have every few months. Nor had I changed my grad student lifestyle significantly since we started. So when Yahoo bought us it felt like going from rags to riches. Since we were going to California, I bought a car, a yellow 1998 VW GTI. I remember thinking that its leather seats alone were by far the most luxurious thing I owned.
+
+The next year, from the summer of 1998 to the summer of 1999, must have been the least productive of my life. I didn't realize it at the time, but I was worn out from the effort and stress of running Viaweb. For a while after I got to California I tried to continue my usual m.o. of programming till 3 in the morning, but fatigue combined with Yahoo's prematurely aged culture and grim cube farm in Santa Clara gradually dragged me down. After a few months it felt disconcertingly like working at Interleaf.
+
+Yahoo had given us a lot of options when they bought us. At the time I thought Yahoo was so overvalued that they'd never be worth anything, but to my astonishment the stock went up 5x in the next year. I hung on till the first chunk of options vested, then in the summer of 1999 I left. It had been so long since I'd painted anything that I'd half forgotten why I was doing this. My brain had been entirely full of software and men's shirts for 4 years. But I had done this to get rich so I could paint, I reminded myself, and now I was rich, so I should go paint.
+
+When I said I was leaving, my boss at Yahoo had a long conversation with me about my plans. I told him all about the kinds of pictures I wanted to paint. At the time I was touched that he took such an interest in me. Now I realize it was because he thought I was lying. My options at that point were worth about $2 million a month. If I was leaving that kind of money on the table, it could only be to go and start some new startup, and if I did, I might take people with me. This was the height of the Internet Bubble, and Yahoo was ground zero of it. My boss was at that moment a billionaire. Leaving then to start a new startup must have seemed to him an insanely, and yet also plausibly, ambitious plan.
+
+But I really was quitting to paint, and I started immediately. There was no time to lose. I'd already burned 4 years getting rich. Now when I talk to founders who are leaving after selling their companies, my advice is always the same: take a vacation. That's what I should have done, just gone off somewhere and done nothing for a month or two, but the idea never occurred to me.
+
+So I tried to paint, but I just didn't seem to have any energy or ambition. Part of the problem was that I didn't know many people in California. I'd compounded this problem by buying a house up in the Santa Cruz Mountains, with a beautiful view but miles from anywhere. I stuck it out for a few more months, then in desperation I went back to New York, where unless you understand about rent control you'll be surprised to hear I still had my apartment, sealed up like a tomb of my old life. Idelle was in New York at least, and there were other people trying to paint there, even though I didn't know any of them.
+
+When I got back to New York I resumed my old life, except now I was rich. It was as weird as it sounds. I resumed all my old patterns, except now there were doors where there hadn't been. Now when I was tired of walking, all I had to do was raise my hand, and (unless it was raining) a taxi would stop to pick me up. Now when I walked past charming little restaurants I could go in and order lunch. It was exciting for a while. Painting started to go better. I experimented with a new kind of still life where I'd paint one painting in the old way, then photograph it and print it, blown up, on canvas, and then use that as the underpainting for a second still life, painted from the same objects (which hopefully hadn't rotted yet).
+
+Meanwhile I looked for an apartment to buy. Now I could actually choose what neighborhood to live in. Where, I asked myself and various real estate agents, is the Cambridge of New York? Aided by occasional visits to actual Cambridge, I gradually realized there wasn't one. Huh.
+
+Around this time, in the spring of 2000, I had an idea. It was clear from our experience with Viaweb that web apps were the future. Why not build a web app for making web apps? Why not let people edit code on our server through the browser, and then host the resulting applications for them? [9] You could run all sorts of services on the servers that these applications could use just by making an API call: making and receiving phone calls, manipulating images, taking credit card payments, etc.
+
+I got so excited about this idea that I couldn't think about anything else. It seemed obvious that this was the future. I didn't particularly want to start another company, but it was clear that this idea would have to be embodied as one, so I decided to move to Cambridge and start it. I hoped to lure Robert into working on it with me, but there I ran into a hitch. Robert was now a postdoc at MIT, and though he'd made a lot of money the last time I'd lured him into working on one of my schemes, it had also been a huge time sink. So while he agreed that it sounded like a plausible idea, he firmly refused to work on it.
+
+Hmph. Well, I'd do it myself then. I recruited Dan Giffin, who had worked for Viaweb, and two undergrads who wanted summer jobs, and we got to work trying to build what it's now clear is about twenty companies and several open source projects worth of software. The language for defining applications would of course be a dialect of Lisp. But I wasn't so naive as to assume I could spring an overt Lisp on a general audience; we'd hide the parentheses, like Dylan did.
+
+By then there was a name for the kind of company Viaweb was, an "application service provider," or ASP. This name didn't last long before it was replaced by "software as a service," but it was current for long enough that I named this new company after it: it was going to be called Aspra.
+
+I started working on the application builder, Dan worked on network infrastructure, and the two undergrads worked on the first two services (images and phone calls). But about halfway through the summer I realized I really didn't want to run a company — especially not a big one, which it was looking like this would have to be. I'd only started Viaweb because I needed the money. Now that I didn't need money anymore, why was I doing this? If this vision had to be realized as a company, then screw the vision. I'd build a subset that could be done as an open source project.
+
+Much to my surprise, the time I spent working on this stuff was not wasted after all. After we started Y Combinator, I would often encounter startups working on parts of this new architecture, and it was very useful to have spent so much time thinking about it and even trying to write some of it.
+
+The subset I would build as an open source project was the new Lisp, whose parentheses I now wouldn't even have to hide. A lot of Lisp hackers dream of building a new Lisp, partly because one of the distinctive features of the language is that it has dialects, and partly, I think, because we have in our minds a Platonic form of Lisp that all existing dialects fall short of. I certainly did. So at the end of the summer Dan and I switched to working on this new dialect of Lisp, which I called Arc, in a house I bought in Cambridge.
+
+The following spring, lightning struck. I was invited to give a talk at a Lisp conference, so I gave one about how we'd used Lisp at Viaweb. Afterward I put a postscript file of this talk online, on paulgraham.com, which I'd created years before using Viaweb but had never used for anything. In one day it got 30,000 page views. What on earth had happened? The referring urls showed that someone had posted it on Slashdot. [10]
+
+Wow, I thought, there's an audience. If I write something and put it on the web, anyone can read it. That may seem obvious now, but it was surprising then. In the print era there was a narrow channel to readers, guarded by fierce monsters known as editors. The only way to get an audience for anything you wrote was to get it published as a book, or in a newspaper or magazine. Now anyone could publish anything.
+
+This had been possible in principle since 1993, but not many people had realized it yet. I had been intimately involved with building the infrastructure of the web for most of that time, and a writer as well, and it had taken me 8 years to realize it. Even then it took me several years to understand the implications. It meant there would be a whole new generation of essays. [11]
+
+In the print era, the channel for publishing essays had been vanishingly small. Except for a few officially anointed thinkers who went to the right parties in New York, the only people allowed to publish essays were specialists writing about their specialties. There were so many essays that had never been written, because there had been no way to publish them. Now they could be, and I was going to write them. [12]
+
+I've worked on several different things, but to the extent there was a turning point where I figured out what to work on, it was when I started publishing essays online. From then on I knew that whatever else I did, I'd always write essays too.
+
+I knew that online essays would be a marginal medium at first. Socially they'd seem more like rants posted by nutjobs on their GeoCities sites than the genteel and beautifully typeset compositions published in The New Yorker. But by this point I knew enough to find that encouraging instead of discouraging.
+
+One of the most conspicuous patterns I've noticed in my life is how well it has worked, for me at least, to work on things that weren't prestigious. Still life has always been the least prestigious form of painting. Viaweb and Y Combinator both seemed lame when we started them. I still get the glassy eye from strangers when they ask what I'm writing, and I explain that it's an essay I'm going to publish on my web site. Even Lisp, though prestigious intellectually in something like the way Latin is, also seems about as hip.
+
+It's not that unprestigious types of work are good per se. But when you find yourself drawn to some kind of work despite its current lack of prestige, it's a sign both that there's something real to be discovered there, and that you have the right kind of motives. Impure motives are a big danger for the ambitious. If anything is going to lead you astray, it will be the desire to impress people. So while working on things that aren't prestigious doesn't guarantee you're on the right track, it at least guarantees you're not on the most common type of wrong one.
+
+Over the next several years I wrote lots of essays about all kinds of different topics. O'Reilly reprinted a collection of them as a book, called Hackers & Painters after one of the essays in it. I also worked on spam filters, and did some more painting. I used to have dinners for a group of friends every thursday night, which taught me how to cook for groups. And I bought another building in Cambridge, a former candy factory (and later, twas said, porn studio), to use as an office.
+
+One night in October 2003 there was a big party at my house. It was a clever idea of my friend Maria Daniels, who was one of the thursday diners. Three separate hosts would all invite their friends to one party. So for every guest, two thirds of the other guests would be people they didn't know but would probably like. One of the guests was someone I didn't know but would turn out to like a lot: a woman called Jessica Livingston. A couple days later I asked her out.
+
+Jessica was in charge of marketing at a Boston investment bank. This bank thought it understood startups, but over the next year, as she met friends of mine from the startup world, she was surprised how different reality was. And how colorful their stories were. So she decided to compile a book of interviews with startup founders.
+
+When the bank had financial problems and she had to fire half her staff, she started looking for a new job. In early 2005 she interviewed for a marketing job at a Boston VC firm. It took them weeks to make up their minds, and during this time I started telling her about all the things that needed to be fixed about venture capital. They should make a larger number of smaller investments instead of a handful of giant ones, they should be funding younger, more technical founders instead of MBAs, they should let the founders remain as CEO, and so on.
+
+One of my tricks for writing essays had always been to give talks. The prospect of having to stand up in front of a group of people and tell them something that won't waste their time is a great spur to the imagination. When the Harvard Computer Society, the undergrad computer club, asked me to give a talk, I decided I would tell them how to start a startup. Maybe they'd be able to avoid the worst of the mistakes we'd made.
+
+So I gave this talk, in the course of which I told them that the best sources of seed funding were successful startup founders, because then they'd be sources of advice too. Whereupon it seemed they were all looking expectantly at me. Horrified at the prospect of having my inbox flooded by business plans (if I'd only known), I blurted out "But not me!" and went on with the talk. But afterward it occurred to me that I should really stop procrastinating about angel investing. I'd been meaning to since Yahoo bought us, and now it was 7 years later and I still hadn't done one angel investment.
+
+Meanwhile I had been scheming with Robert and Trevor about projects we could work on together. I missed working with them, and it seemed like there had to be something we could collaborate on.
+
+As Jessica and I were walking home from dinner on March 11, at the corner of Garden and Walker streets, these three threads converged. Screw the VCs who were taking so long to make up their minds. We'd start our own investment firm and actually implement the ideas we'd been talking about. I'd fund it, and Jessica could quit her job and work for it, and we'd get Robert and Trevor as partners too. [13]
+
+Once again, ignorance worked in our favor. We had no idea how to be angel investors, and in Boston in 2005 there were no Ron Conways to learn from. So we just made what seemed like the obvious choices, and some of the things we did turned out to be novel.
+
+There are multiple components to Y Combinator, and we didn't figure them all out at once. The part we got first was to be an angel firm. In those days, those two words didn't go together. There were VC firms, which were organized companies with people whose job it was to make investments, but they only did big, million dollar investments. And there were angels, who did smaller investments, but these were individuals who were usually focused on other things and made investments on the side. And neither of them helped founders enough in the beginning. We knew how helpless founders were in some respects, because we remembered how helpless we'd been. For example, one thing Julian had done for us that seemed to us like magic was to get us set up as a company. We were fine writing fairly difficult software, but actually getting incorporated, with bylaws and stock and all that stuff, how on earth did you do that? Our plan was not only to make seed investments, but to do for startups everything Julian had done for us.
+
+YC was not organized as a fund. It was cheap enough to run that we funded it with our own money. That went right by 99% of readers, but professional investors are thinking "Wow, that means they got all the returns." But once again, this was not due to any particular insight on our part. We didn't know how VC firms were organized. It never occurred to us to try to raise a fund, and if it had, we wouldn't have known where to start. [14]
+
+The most distinctive thing about YC is the batch model: to fund a bunch of startups all at once, twice a year, and then to spend three months focusing intensively on trying to help them. That part we discovered by accident, not merely implicitly but explicitly due to our ignorance about investing. We needed to get experience as investors. What better way, we thought, than to fund a whole bunch of startups at once? We knew undergrads got temporary jobs at tech companies during the summer. Why not organize a summer program where they'd start startups instead? We wouldn't feel guilty for being in a sense fake investors, because they would in a similar sense be fake founders. So while we probably wouldn't make much money out of it, we'd at least get to practice being investors on them, and they for their part would probably have a more interesting summer than they would working at Microsoft.
+
+We'd use the building I owned in Cambridge as our headquarters. We'd all have dinner there once a week — on tuesdays, since I was already cooking for the thursday diners on thursdays — and after dinner we'd bring in experts on startups to give talks.
+
+We knew undergrads were deciding then about summer jobs, so in a matter of days we cooked up something we called the Summer Founders Program, and I posted an announcement on my site, inviting undergrads to apply. I had never imagined that writing essays would be a way to get "deal flow," as investors call it, but it turned out to be the perfect source. [15] We got 225 applications for the Summer Founders Program, and we were surprised to find that a lot of them were from people who'd already graduated, or were about to that spring. Already this SFP thing was starting to feel more serious than we'd intended.
+
+We invited about 20 of the 225 groups to interview in person, and from those we picked 8 to fund. They were an impressive group. That first batch included reddit, Justin Kan and Emmett Shear, who went on to found Twitch, Aaron Swartz, who had already helped write the RSS spec and would a few years later become a martyr for open access, and Sam Altman, who would later become the second president of YC. I don't think it was entirely luck that the first batch was so good. You had to be pretty bold to sign up for a weird thing like the Summer Founders Program instead of a summer job at a legit place like Microsoft or Goldman Sachs.
+
+The deal for startups was based on a combination of the deal we did with Julian ($10k for 10%) and what Robert said MIT grad students got for the summer ($6k). We invested $6k per founder, which in the typical two-founder case was $12k, in return for 6%. That had to be fair, because it was twice as good as the deal we ourselves had taken. Plus that first summer, which was really hot, Jessica brought the founders free air conditioners. [16]
+
+Fairly quickly I realized that we had stumbled upon the way to scale startup funding. Funding startups in batches was more convenient for us, because it meant we could do things for a lot of startups at once, but being part of a batch was better for the startups too. It solved one of the biggest problems faced by founders: the isolation. Now you not only had colleagues, but colleagues who understood the problems you were facing and could tell you how they were solving them.
+
+As YC grew, we started to notice other advantages of scale. The alumni became a tight community, dedicated to helping one another, and especially the current batch, whose shoes they remembered being in. We also noticed that the startups were becoming one another's customers. We used to refer jokingly to the "YC GDP," but as YC grows this becomes less and less of a joke. Now lots of startups get their initial set of customers almost entirely from among their batchmates.
+
+I had not originally intended YC to be a full-time job. I was going to do three things: hack, write essays, and work on YC. As YC grew, and I grew more excited about it, it started to take up a lot more than a third of my attention. But for the first few years I was still able to work on other things.
+
+In the summer of 2006, Robert and I started working on a new version of Arc. This one was reasonably fast, because it was compiled into Scheme. To test this new Arc, I wrote Hacker News in it. It was originally meant to be a news aggregator for startup founders and was called Startup News, but after a few months I got tired of reading about nothing but startups. Plus it wasn't startup founders we wanted to reach. It was future startup founders. So I changed the name to Hacker News and the topic to whatever engaged one's intellectual curiosity.
+
+HN was no doubt good for YC, but it was also by far the biggest source of stress for me. If all I'd had to do was select and help founders, life would have been so easy. And that implies that HN was a mistake. Surely the biggest source of stress in one's work should at least be something close to the core of the work. Whereas I was like someone who was in pain while running a marathon not from the exertion of running, but because I had a blister from an ill-fitting shoe. When I was dealing with some urgent problem during YC, there was about a 60% chance it had to do with HN, and a 40% chance it had do with everything else combined. [17]
+
+As well as HN, I wrote all of YC's internal software in Arc. But while I continued to work a good deal in Arc, I gradually stopped working on Arc, partly because I didn't have time to, and partly because it was a lot less attractive to mess around with the language now that we had all this infrastructure depending on it. So now my three projects were reduced to two: writing essays and working on YC.
+
+YC was different from other kinds of work I've done. Instead of deciding for myself what to work on, the problems came to me. Every 6 months there was a new batch of startups, and their problems, whatever they were, became our problems. It was very engaging work, because their problems were quite varied, and the good founders were very effective. If you were trying to learn the most you could about startups in the shortest possible time, you couldn't have picked a better way to do it.
+
+There were parts of the job I didn't like. Disputes between cofounders, figuring out when people were lying to us, fighting with people who maltreated the startups, and so on. But I worked hard even at the parts I didn't like. I was haunted by something Kevin Hale once said about companies: "No one works harder than the boss." He meant it both descriptively and prescriptively, and it was the second part that scared me. I wanted YC to be good, so if how hard I worked set the upper bound on how hard everyone else worked, I'd better work very hard.
+
+One day in 2010, when he was visiting California for interviews, Robert Morris did something astonishing: he offered me unsolicited advice. I can only remember him doing that once before. One day at Viaweb, when I was bent over double from a kidney stone, he suggested that it would be a good idea for him to take me to the hospital. That was what it took for Rtm to offer unsolicited advice. So I remember his exact words very clearly. "You know," he said, "you should make sure Y Combinator isn't the last cool thing you do."
+
+At the time I didn't understand what he meant, but gradually it dawned on me that he was saying I should quit. This seemed strange advice, because YC was doing great. But if there was one thing rarer than Rtm offering advice, it was Rtm being wrong. So this set me thinking. It was true that on my current trajectory, YC would be the last thing I did, because it was only taking up more of my attention. It had already eaten Arc, and was in the process of eating essays too. Either YC was my life's work or I'd have to leave eventually. And it wasn't, so I would.
+
+In the summer of 2012 my mother had a stroke, and the cause turned out to be a blood clot caused by colon cancer. The stroke destroyed her balance, and she was put in a nursing home, but she really wanted to get out of it and back to her house, and my sister and I were determined to help her do it. I used to fly up to Oregon to visit her regularly, and I had a lot of time to think on those flights. On one of them I realized I was ready to hand YC over to someone else.
+
+I asked Jessica if she wanted to be president, but she didn't, so we decided we'd try to recruit Sam Altman. We talked to Robert and Trevor and we agreed to make it a complete changing of the guard. Up till that point YC had been controlled by the original LLC we four had started. But we wanted YC to last for a long time, and to do that it couldn't be controlled by the founders. So if Sam said yes, we'd let him reorganize YC. Robert and I would retire, and Jessica and Trevor would become ordinary partners.
+
+When we asked Sam if he wanted to be president of YC, initially he said no. He wanted to start a startup to make nuclear reactors. But I kept at it, and in October 2013 he finally agreed. We decided he'd take over starting with the winter 2014 batch. For the rest of 2013 I left running YC more and more to Sam, partly so he could learn the job, and partly because I was focused on my mother, whose cancer had returned.
+
+She died on January 15, 2014. We knew this was coming, but it was still hard when it did.
+
+I kept working on YC till March, to help get that batch of startups through Demo Day, then I checked out pretty completely. (I still talk to alumni and to new startups working on things I'm interested in, but that only takes a few hours a week.)
+
+What should I do next? Rtm's advice hadn't included anything about that. I wanted to do something completely different, so I decided I'd paint. I wanted to see how good I could get if I really focused on it. So the day after I stopped working on YC, I started painting. I was rusty and it took a while to get back into shape, but it was at least completely engaging. [18]
+
+I spent most of the rest of 2014 painting. I'd never been able to work so uninterruptedly before, and I got to be better than I had been. Not good enough, but better. Then in November, right in the middle of a painting, I ran out of steam. Up till that point I'd always been curious to see how the painting I was working on would turn out, but suddenly finishing this one seemed like a chore. So I stopped working on it and cleaned my brushes and haven't painted since. So far anyway.
+
+I realize that sounds rather wimpy. But attention is a zero sum game. If you can choose what to work on, and you choose a project that's not the best one (or at least a good one) for you, then it's getting in the way of another project that is. And at 50 there was some opportunity cost to screwing around.
+
+I started writing essays again, and wrote a bunch of new ones over the next few months. I even wrote a couple that weren't about startups. Then in March 2015 I started working on Lisp again.
+
+The distinctive thing about Lisp is that its core is a language defined by writing an interpreter in itself. It wasn't originally intended as a programming language in the ordinary sense. It was meant to be a formal model of computation, an alternative to the Turing machine. If you want to write an interpreter for a language in itself, what's the minimum set of predefined operators you need? The Lisp that John McCarthy invented, or more accurately discovered, is an answer to that question. [19]
+
+McCarthy didn't realize this Lisp could even be used to program computers till his grad student Steve Russell suggested it. Russell translated McCarthy's interpreter into IBM 704 machine language, and from that point Lisp started also to be a programming language in the ordinary sense. But its origins as a model of computation gave it a power and elegance that other languages couldn't match. It was this that attracted me in college, though I didn't understand why at the time.
+
+McCarthy's 1960 Lisp did nothing more than interpret Lisp expressions. It was missing a lot of things you'd want in a programming language. So these had to be added, and when they were, they weren't defined using McCarthy's original axiomatic approach. That wouldn't have been feasible at the time. McCarthy tested his interpreter by hand-simulating the execution of programs. But it was already getting close to the limit of interpreters you could test that way — indeed, there was a bug in it that McCarthy had overlooked. To test a more complicated interpreter, you'd have had to run it, and computers then weren't powerful enough.
+
+Now they are, though. Now you could continue using McCarthy's axiomatic approach till you'd defined a complete programming language. And as long as every change you made to McCarthy's Lisp was a discoveredness-preserving transformation, you could, in principle, end up with a complete language that had this quality. Harder to do than to talk about, of course, but if it was possible in principle, why not try? So I decided to take a shot at it. It took 4 years, from March 26, 2015 to October 12, 2019. It was fortunate that I had a precisely defined goal, or it would have been hard to keep at it for so long.
+
+I wrote this new Lisp, called Bel, in itself in Arc. That may sound like a contradiction, but it's an indication of the sort of trickery I had to engage in to make this work. By means of an egregious collection of hacks I managed to make something close enough to an interpreter written in itself that could actually run. Not fast, but fast enough to test.
+
+I had to ban myself from writing essays during most of this time, or I'd never have finished. In late 2015 I spent 3 months writing essays, and when I went back to working on Bel I could barely understand the code. Not so much because it was badly written as because the problem is so convoluted. When you're working on an interpreter written in itself, it's hard to keep track of what's happening at what level, and errors can be practically encrypted by the time you get them.
+
+So I said no more essays till Bel was done. But I told few people about Bel while I was working on it. So for years it must have seemed that I was doing nothing, when in fact I was working harder than I'd ever worked on anything. Occasionally after wrestling for hours with some gruesome bug I'd check Twitter or HN and see someone asking "Does Paul Graham still code?"
+
+Working on Bel was hard but satisfying. I worked on it so intensively that at any given time I had a decent chunk of the code in my head and could write more there. I remember taking the boys to the coast on a sunny day in 2015 and figuring out how to deal with some problem involving continuations while I watched them play in the tide pools. It felt like I was doing life right. I remember that because I was slightly dismayed at how novel it felt. The good news is that I had more moments like this over the next few years.
+
+In the summer of 2016 we moved to England. We wanted our kids to see what it was like living in another country, and since I was a British citizen by birth, that seemed the obvious choice. We only meant to stay for a year, but we liked it so much that we still live there. So most of Bel was written in England.
+
+In the fall of 2019, Bel was finally finished. Like McCarthy's original Lisp, it's a spec rather than an implementation, although like McCarthy's Lisp it's a spec expressed as code.
+
+Now that I could write essays again, I wrote a bunch about topics I'd had stacked up. I kept writing essays through 2020, but I also started to think about other things I could work on. How should I choose what to do? Well, how had I chosen what to work on in the past? I wrote an essay for myself to answer that question, and I was surprised how long and messy the answer turned out to be. If this surprised me, who'd lived it, then I thought perhaps it would be interesting to other people, and encouraging to those with similarly messy lives. So I wrote a more detailed version for others to read, and this is the last sentence of it.
+
+
+
+
+
+
+
+
+
+Notes
+
+[1] My experience skipped a step in the evolution of computers: time-sharing machines with interactive OSes. I went straight from batch processing to microcomputers, which made microcomputers seem all the more exciting.
+
+[2] Italian words for abstract concepts can nearly always be predicted from their English cognates (except for occasional traps like polluzione). It's the everyday words that differ. So if you string together a lot of abstract concepts with a few simple verbs, you can make a little Italian go a long way.
+
+[3] I lived at Piazza San Felice 4, so my walk to the Accademia went straight down the spine of old Florence: past the Pitti, across the bridge, past Orsanmichele, between the Duomo and the Baptistery, and then up Via Ricasoli to Piazza San Marco. I saw Florence at street level in every possible condition, from empty dark winter evenings to sweltering summer days when the streets were packed with tourists.
+
+[4] You can of course paint people like still lives if you want to, and they're willing. That sort of portrait is arguably the apex of still life painting, though the long sitting does tend to produce pained expressions in the sitters.
+
+[5] Interleaf was one of many companies that had smart people and built impressive technology, and yet got crushed by Moore's Law. In the 1990s the exponential growth in the power of commodity (i.e. Intel) processors rolled up high-end, special-purpose hardware and software companies like a bulldozer.
+
+[6] The signature style seekers at RISD weren't specifically mercenary. In the art world, money and coolness are tightly coupled. Anything expensive comes to be seen as cool, and anything seen as cool will soon become equally expensive.
+
+[7] Technically the apartment wasn't rent-controlled but rent-stabilized, but this is a refinement only New Yorkers would know or care about. The point is that it was really cheap, less than half market price.
+
+[8] Most software you can launch as soon as it's done. But when the software is an online store builder and you're hosting the stores, if you don't have any users yet, that fact will be painfully obvious. So before we could launch publicly we had to launch privately, in the sense of recruiting an initial set of users and making sure they had decent-looking stores.
+
+[9] We'd had a code editor in Viaweb for users to define their own page styles. They didn't know it, but they were editing Lisp expressions underneath. But this wasn't an app editor, because the code ran when the merchants' sites were generated, not when shoppers visited them.
+
+[10] This was the first instance of what is now a familiar experience, and so was what happened next, when I read the comments and found they were full of angry people. How could I claim that Lisp was better than other languages? Weren't they all Turing complete? People who see the responses to essays I write sometimes tell me how sorry they feel for me, but I'm not exaggerating when I reply that it has always been like this, since the very beginning. It comes with the territory. An essay must tell readers things they don't already know, and some people dislike being told such things.
+
+[11] People put plenty of stuff on the internet in the 90s of course, but putting something online is not the same as publishing it online. Publishing online means you treat the online version as the (or at least a) primary version.
+
+[12] There is a general lesson here that our experience with Y Combinator also teaches: Customs continue to constrain you long after the restrictions that caused them have disappeared. Customary VC practice had once, like the customs about publishing essays, been based on real constraints. Startups had once been much more expensive to start, and proportionally rare. Now they could be cheap and common, but the VCs' customs still reflected the old world, just as customs about writing essays still reflected the constraints of the print era.
+
+Which in turn implies that people who are independent-minded (i.e. less influenced by custom) will have an advantage in fields affected by rapid change (where customs are more likely to be obsolete).
+
+Here's an interesting point, though: you can't always predict which fields will be affected by rapid change. Obviously software and venture capital will be, but who would have predicted that essay writing would be?
+
+[13] Y Combinator was not the original name. At first we were called Cambridge Seed. But we didn't want a regional name, in case someone copied us in Silicon Valley, so we renamed ourselves after one of the coolest tricks in the lambda calculus, the Y combinator.
+
+I picked orange as our color partly because it's the warmest, and partly because no VC used it. In 2005 all the VCs used staid colors like maroon, navy blue, and forest green, because they were trying to appeal to LPs, not founders. The YC logo itself is an inside joke: the Viaweb logo had been a white V on a red circle, so I made the YC logo a white Y on an orange square.
+
+[14] YC did become a fund for a couple years starting in 2009, because it was getting so big I could no longer afford to fund it personally. But after Heroku got bought we had enough money to go back to being self-funded.
+
+[15] I've never liked the term "deal flow," because it implies that the number of new startups at any given time is fixed. This is not only false, but it's the purpose of YC to falsify it, by causing startups to be founded that would not otherwise have existed.
+
+[16] She reports that they were all different shapes and sizes, because there was a run on air conditioners and she had to get whatever she could, but that they were all heavier than she could carry now.
+
+[17] Another problem with HN was a bizarre edge case that occurs when you both write essays and run a forum. When you run a forum, you're assumed to see if not every conversation, at least every conversation involving you. And when you write essays, people post highly imaginative misinterpretations of them on forums. Individually these two phenomena are tedious but bearable, but the combination is disastrous. You actually have to respond to the misinterpretations, because the assumption that you're present in the conversation means that not responding to any sufficiently upvoted misinterpretation reads as a tacit admission that it's correct. But that in turn encourages more; anyone who wants to pick a fight with you senses that now is their chance.
+
+[18] The worst thing about leaving YC was not working with Jessica anymore. We'd been working on YC almost the whole time we'd known each other, and we'd neither tried nor wanted to separate it from our personal lives, so leaving was like pulling up a deeply rooted tree.
+
+[19] One way to get more precise about the concept of invented vs discovered is to talk about space aliens. Any sufficiently advanced alien civilization would certainly know about the Pythagorean theorem, for example. I believe, though with less certainty, that they would also know about the Lisp in McCarthy's 1960 paper.
+
+But if so there's no reason to suppose that this is the limit of the language that might be known to them. Presumably aliens need numbers and errors and I/O too. So it seems likely there exists at least one path out of McCarthy's Lisp along which discoveredness is preserved.
+
+
+
+Thanks to Trevor Blackwell, John Collison, Patrick Collison, Daniel Gackle, Ralph Hazell, Jessica Livingston, Robert Morris, and Harj Taggar for reading drafts of this.
diff --git a/docs/examples/retrievers/deep_memory.ipynb b/docs/docs/examples/retrievers/deep_memory.ipynb
similarity index 100%
rename from docs/examples/retrievers/deep_memory.ipynb
rename to docs/docs/examples/retrievers/deep_memory.ipynb
diff --git a/docs/examples/retrievers/ensemble_retrieval.ipynb b/docs/docs/examples/retrievers/ensemble_retrieval.ipynb
similarity index 100%
rename from docs/examples/retrievers/ensemble_retrieval.ipynb
rename to docs/docs/examples/retrievers/ensemble_retrieval.ipynb
diff --git a/docs/examples/retrievers/multi_doc_together_hybrid.ipynb b/docs/docs/examples/retrievers/multi_doc_together_hybrid.ipynb
similarity index 100%
rename from docs/examples/retrievers/multi_doc_together_hybrid.ipynb
rename to docs/docs/examples/retrievers/multi_doc_together_hybrid.ipynb
diff --git a/docs/examples/retrievers/pathway_retriever.ipynb b/docs/docs/examples/retrievers/pathway_retriever.ipynb
similarity index 100%
rename from docs/examples/retrievers/pathway_retriever.ipynb
rename to docs/docs/examples/retrievers/pathway_retriever.ipynb
diff --git a/docs/examples/retrievers/reciprocal_rerank_fusion.ipynb b/docs/docs/examples/retrievers/reciprocal_rerank_fusion.ipynb
similarity index 100%
rename from docs/examples/retrievers/reciprocal_rerank_fusion.ipynb
rename to docs/docs/examples/retrievers/reciprocal_rerank_fusion.ipynb
diff --git a/docs/examples/retrievers/recurisve_retriever_nodes_braintrust.ipynb b/docs/docs/examples/retrievers/recurisve_retriever_nodes_braintrust.ipynb
similarity index 100%
rename from docs/examples/retrievers/recurisve_retriever_nodes_braintrust.ipynb
rename to docs/docs/examples/retrievers/recurisve_retriever_nodes_braintrust.ipynb
diff --git a/docs/examples/retrievers/recursive_retriever_nodes.ipynb b/docs/docs/examples/retrievers/recursive_retriever_nodes.ipynb
similarity index 100%
rename from docs/examples/retrievers/recursive_retriever_nodes.ipynb
rename to docs/docs/examples/retrievers/recursive_retriever_nodes.ipynb
diff --git a/docs/examples/retrievers/relative_score_dist_fusion.ipynb b/docs/docs/examples/retrievers/relative_score_dist_fusion.ipynb
similarity index 100%
rename from docs/examples/retrievers/relative_score_dist_fusion.ipynb
rename to docs/docs/examples/retrievers/relative_score_dist_fusion.ipynb
diff --git a/docs/examples/retrievers/router_retriever.ipynb b/docs/docs/examples/retrievers/router_retriever.ipynb
similarity index 100%
rename from docs/examples/retrievers/router_retriever.ipynb
rename to docs/docs/examples/retrievers/router_retriever.ipynb
diff --git a/docs/examples/retrievers/simple_fusion.ipynb b/docs/docs/examples/retrievers/simple_fusion.ipynb
similarity index 100%
rename from docs/examples/retrievers/simple_fusion.ipynb
rename to docs/docs/examples/retrievers/simple_fusion.ipynb
diff --git a/docs/examples/retrievers/vectara_auto_retriever.ipynb b/docs/docs/examples/retrievers/vectara_auto_retriever.ipynb
similarity index 100%
rename from docs/examples/retrievers/vectara_auto_retriever.ipynb
rename to docs/docs/examples/retrievers/vectara_auto_retriever.ipynb
diff --git a/docs/examples/retrievers/videodb_retriever.ipynb b/docs/docs/examples/retrievers/videodb_retriever.ipynb
similarity index 100%
rename from docs/examples/retrievers/videodb_retriever.ipynb
rename to docs/docs/examples/retrievers/videodb_retriever.ipynb
diff --git a/docs/examples/retrievers/you_retriever.ipynb b/docs/docs/examples/retrievers/you_retriever.ipynb
similarity index 100%
rename from docs/examples/retrievers/you_retriever.ipynb
rename to docs/docs/examples/retrievers/you_retriever.ipynb
diff --git a/docs/examples/tools/OnDemandLoaderTool.ipynb b/docs/docs/examples/tools/OnDemandLoaderTool.ipynb
similarity index 100%
rename from docs/examples/tools/OnDemandLoaderTool.ipynb
rename to docs/docs/examples/tools/OnDemandLoaderTool.ipynb
diff --git a/docs/examples/transforms/TransformsEval.ipynb b/docs/docs/examples/transforms/TransformsEval.ipynb
similarity index 100%
rename from docs/examples/transforms/TransformsEval.ipynb
rename to docs/docs/examples/transforms/TransformsEval.ipynb
diff --git a/docs/examples/usecases/10k_sub_question.ipynb b/docs/docs/examples/usecases/10k_sub_question.ipynb
similarity index 100%
rename from docs/examples/usecases/10k_sub_question.ipynb
rename to docs/docs/examples/usecases/10k_sub_question.ipynb
diff --git a/docs/examples/usecases/10q_sub_question.ipynb b/docs/docs/examples/usecases/10q_sub_question.ipynb
similarity index 100%
rename from docs/examples/usecases/10q_sub_question.ipynb
rename to docs/docs/examples/usecases/10q_sub_question.ipynb
diff --git a/docs/examples/usecases/email_data_extraction.ipynb b/docs/docs/examples/usecases/email_data_extraction.ipynb
similarity index 100%
rename from docs/examples/usecases/email_data_extraction.ipynb
rename to docs/docs/examples/usecases/email_data_extraction.ipynb
diff --git a/docs/examples/usecases/github_issue_analysis.ipynb b/docs/docs/examples/usecases/github_issue_analysis.ipynb
similarity index 100%
rename from docs/examples/usecases/github_issue_analysis.ipynb
rename to docs/docs/examples/usecases/github_issue_analysis.ipynb
diff --git a/docs/examples/usecases/github_issue_analysis_data.pkl b/docs/docs/examples/usecases/github_issue_analysis_data.pkl
similarity index 100%
rename from docs/examples/usecases/github_issue_analysis_data.pkl
rename to docs/docs/examples/usecases/github_issue_analysis_data.pkl
diff --git a/docs/examples/vector_stores/AstraDBIndexDemo.ipynb b/docs/docs/examples/vector_stores/AstraDBIndexDemo.ipynb
similarity index 100%
rename from docs/examples/vector_stores/AstraDBIndexDemo.ipynb
rename to docs/docs/examples/vector_stores/AstraDBIndexDemo.ipynb
diff --git a/docs/examples/vector_stores/AsyncIndexCreationDemo.ipynb b/docs/docs/examples/vector_stores/AsyncIndexCreationDemo.ipynb
similarity index 100%
rename from docs/examples/vector_stores/AsyncIndexCreationDemo.ipynb
rename to docs/docs/examples/vector_stores/AsyncIndexCreationDemo.ipynb
diff --git a/docs/examples/vector_stores/AwadbDemo.ipynb b/docs/docs/examples/vector_stores/AwadbDemo.ipynb
similarity index 100%
rename from docs/examples/vector_stores/AwadbDemo.ipynb
rename to docs/docs/examples/vector_stores/AwadbDemo.ipynb
diff --git a/docs/examples/vector_stores/AzureAISearchIndexDemo.ipynb b/docs/docs/examples/vector_stores/AzureAISearchIndexDemo.ipynb
similarity index 100%
rename from docs/examples/vector_stores/AzureAISearchIndexDemo.ipynb
rename to docs/docs/examples/vector_stores/AzureAISearchIndexDemo.ipynb
diff --git a/docs/examples/vector_stores/AzureCosmosDBMongoDBvCoreDemo.ipynb b/docs/docs/examples/vector_stores/AzureCosmosDBMongoDBvCoreDemo.ipynb
similarity index 100%
rename from docs/examples/vector_stores/AzureCosmosDBMongoDBvCoreDemo.ipynb
rename to docs/docs/examples/vector_stores/AzureCosmosDBMongoDBvCoreDemo.ipynb
diff --git a/docs/examples/vector_stores/BagelAutoRetriever.ipynb b/docs/docs/examples/vector_stores/BagelAutoRetriever.ipynb
similarity index 100%
rename from docs/examples/vector_stores/BagelAutoRetriever.ipynb
rename to docs/docs/examples/vector_stores/BagelAutoRetriever.ipynb
diff --git a/docs/examples/vector_stores/BagelIndexDemo.ipynb b/docs/docs/examples/vector_stores/BagelIndexDemo.ipynb
similarity index 100%
rename from docs/examples/vector_stores/BagelIndexDemo.ipynb
rename to docs/docs/examples/vector_stores/BagelIndexDemo.ipynb
diff --git a/docs/examples/vector_stores/BaiduVectorDBIndexDemo.ipynb b/docs/docs/examples/vector_stores/BaiduVectorDBIndexDemo.ipynb
similarity index 100%
rename from docs/examples/vector_stores/BaiduVectorDBIndexDemo.ipynb
rename to docs/docs/examples/vector_stores/BaiduVectorDBIndexDemo.ipynb
diff --git a/docs/examples/vector_stores/CassandraIndexDemo.ipynb b/docs/docs/examples/vector_stores/CassandraIndexDemo.ipynb
similarity index 100%
rename from docs/examples/vector_stores/CassandraIndexDemo.ipynb
rename to docs/docs/examples/vector_stores/CassandraIndexDemo.ipynb
diff --git a/docs/examples/vector_stores/ChromaFireworksNomic.ipynb b/docs/docs/examples/vector_stores/ChromaFireworksNomic.ipynb
similarity index 100%
rename from docs/examples/vector_stores/ChromaFireworksNomic.ipynb
rename to docs/docs/examples/vector_stores/ChromaFireworksNomic.ipynb
diff --git a/docs/examples/vector_stores/ChromaIndexDemo.ipynb b/docs/docs/examples/vector_stores/ChromaIndexDemo.ipynb
similarity index 100%
rename from docs/examples/vector_stores/ChromaIndexDemo.ipynb
rename to docs/docs/examples/vector_stores/ChromaIndexDemo.ipynb
diff --git a/docs/examples/vector_stores/ClickHouseIndexDemo.ipynb b/docs/docs/examples/vector_stores/ClickHouseIndexDemo.ipynb
similarity index 98%
rename from docs/examples/vector_stores/ClickHouseIndexDemo.ipynb
rename to docs/docs/examples/vector_stores/ClickHouseIndexDemo.ipynb
index f52e059d5b2777916bb0699ebe7c732511486f41..3436646ec63585aaad6db8f61ba2fef1325b168c 100644
--- a/docs/examples/vector_stores/ClickHouseIndexDemo.ipynb
+++ b/docs/docs/examples/vector_stores/ClickHouseIndexDemo.ipynb
@@ -220,7 +220,7 @@
     "\n",
     "Now ClickHouse vector store supports filter search and hybrid search\n",
     "\n",
-    "You can learn more about [query_engine](/module_guides/deploying/query_engine/root.md) and [retriever](/module_guides/querying/retriever/root.md)."
+    "You can learn more about [query_engine](/module_guides/deploying/query_engine/index.md) and [retriever](/module_guides/querying/retriever/index.md)."
    ]
   },
   {
diff --git a/docs/examples/vector_stores/DashvectorIndexDemo.ipynb b/docs/docs/examples/vector_stores/DashvectorIndexDemo.ipynb
similarity index 100%
rename from docs/examples/vector_stores/DashvectorIndexDemo.ipynb
rename to docs/docs/examples/vector_stores/DashvectorIndexDemo.ipynb
diff --git a/docs/examples/vector_stores/DatabricksVectorSearchDemo.ipynb b/docs/docs/examples/vector_stores/DatabricksVectorSearchDemo.ipynb
similarity index 100%
rename from docs/examples/vector_stores/DatabricksVectorSearchDemo.ipynb
rename to docs/docs/examples/vector_stores/DatabricksVectorSearchDemo.ipynb
diff --git a/docs/examples/vector_stores/DeepLakeIndexDemo.ipynb b/docs/docs/examples/vector_stores/DeepLakeIndexDemo.ipynb
similarity index 100%
rename from docs/examples/vector_stores/DeepLakeIndexDemo.ipynb
rename to docs/docs/examples/vector_stores/DeepLakeIndexDemo.ipynb
diff --git a/docs/examples/vector_stores/DocArrayHnswIndexDemo.ipynb b/docs/docs/examples/vector_stores/DocArrayHnswIndexDemo.ipynb
similarity index 100%
rename from docs/examples/vector_stores/DocArrayHnswIndexDemo.ipynb
rename to docs/docs/examples/vector_stores/DocArrayHnswIndexDemo.ipynb
diff --git a/docs/examples/vector_stores/DocArrayInMemoryIndexDemo.ipynb b/docs/docs/examples/vector_stores/DocArrayInMemoryIndexDemo.ipynb
similarity index 100%
rename from docs/examples/vector_stores/DocArrayInMemoryIndexDemo.ipynb
rename to docs/docs/examples/vector_stores/DocArrayInMemoryIndexDemo.ipynb
diff --git a/docs/examples/vector_stores/DuckDBDemo.ipynb b/docs/docs/examples/vector_stores/DuckDBDemo.ipynb
similarity index 100%
rename from docs/examples/vector_stores/DuckDBDemo.ipynb
rename to docs/docs/examples/vector_stores/DuckDBDemo.ipynb
diff --git a/docs/examples/vector_stores/ElasticsearchIndexDemo.ipynb b/docs/docs/examples/vector_stores/ElasticsearchIndexDemo.ipynb
similarity index 100%
rename from docs/examples/vector_stores/ElasticsearchIndexDemo.ipynb
rename to docs/docs/examples/vector_stores/ElasticsearchIndexDemo.ipynb
diff --git a/docs/examples/vector_stores/Elasticsearch_demo.ipynb b/docs/docs/examples/vector_stores/Elasticsearch_demo.ipynb
similarity index 100%
rename from docs/examples/vector_stores/Elasticsearch_demo.ipynb
rename to docs/docs/examples/vector_stores/Elasticsearch_demo.ipynb
diff --git a/docs/examples/vector_stores/EpsillaIndexDemo.ipynb b/docs/docs/examples/vector_stores/EpsillaIndexDemo.ipynb
similarity index 100%
rename from docs/examples/vector_stores/EpsillaIndexDemo.ipynb
rename to docs/docs/examples/vector_stores/EpsillaIndexDemo.ipynb
diff --git a/docs/examples/vector_stores/FaissIndexDemo.ipynb b/docs/docs/examples/vector_stores/FaissIndexDemo.ipynb
similarity index 100%
rename from docs/examples/vector_stores/FaissIndexDemo.ipynb
rename to docs/docs/examples/vector_stores/FaissIndexDemo.ipynb
diff --git a/docs/examples/vector_stores/JaguarIndexDemo.ipynb b/docs/docs/examples/vector_stores/JaguarIndexDemo.ipynb
similarity index 100%
rename from docs/examples/vector_stores/JaguarIndexDemo.ipynb
rename to docs/docs/examples/vector_stores/JaguarIndexDemo.ipynb
diff --git a/docs/examples/vector_stores/LanceDBIndexDemo.ipynb b/docs/docs/examples/vector_stores/LanceDBIndexDemo.ipynb
similarity index 100%
rename from docs/examples/vector_stores/LanceDBIndexDemo.ipynb
rename to docs/docs/examples/vector_stores/LanceDBIndexDemo.ipynb
diff --git a/docs/examples/vector_stores/LanternAutoRetriever.ipynb b/docs/docs/examples/vector_stores/LanternAutoRetriever.ipynb
similarity index 100%
rename from docs/examples/vector_stores/LanternAutoRetriever.ipynb
rename to docs/docs/examples/vector_stores/LanternAutoRetriever.ipynb
diff --git a/docs/examples/vector_stores/LanternIndexDemo.ipynb b/docs/docs/examples/vector_stores/LanternIndexDemo.ipynb
similarity index 100%
rename from docs/examples/vector_stores/LanternIndexDemo.ipynb
rename to docs/docs/examples/vector_stores/LanternIndexDemo.ipynb
diff --git a/docs/examples/vector_stores/MetalIndexDemo.ipynb b/docs/docs/examples/vector_stores/MetalIndexDemo.ipynb
similarity index 100%
rename from docs/examples/vector_stores/MetalIndexDemo.ipynb
rename to docs/docs/examples/vector_stores/MetalIndexDemo.ipynb
diff --git a/docs/examples/vector_stores/MilvusIndexDemo.ipynb b/docs/docs/examples/vector_stores/MilvusIndexDemo.ipynb
similarity index 100%
rename from docs/examples/vector_stores/MilvusIndexDemo.ipynb
rename to docs/docs/examples/vector_stores/MilvusIndexDemo.ipynb
diff --git a/docs/examples/vector_stores/MongoDBAtlasVectorSearch.ipynb b/docs/docs/examples/vector_stores/MongoDBAtlasVectorSearch.ipynb
similarity index 100%
rename from docs/examples/vector_stores/MongoDBAtlasVectorSearch.ipynb
rename to docs/docs/examples/vector_stores/MongoDBAtlasVectorSearch.ipynb
diff --git a/docs/examples/vector_stores/MongoDBAtlasVectorSearchRAGFireworks.ipynb b/docs/docs/examples/vector_stores/MongoDBAtlasVectorSearchRAGFireworks.ipynb
similarity index 100%
rename from docs/examples/vector_stores/MongoDBAtlasVectorSearchRAGFireworks.ipynb
rename to docs/docs/examples/vector_stores/MongoDBAtlasVectorSearchRAGFireworks.ipynb
diff --git a/docs/examples/vector_stores/MongoDBAtlasVectorSearchRAGOpenAI.ipynb b/docs/docs/examples/vector_stores/MongoDBAtlasVectorSearchRAGOpenAI.ipynb
similarity index 100%
rename from docs/examples/vector_stores/MongoDBAtlasVectorSearchRAGOpenAI.ipynb
rename to docs/docs/examples/vector_stores/MongoDBAtlasVectorSearchRAGOpenAI.ipynb
diff --git a/docs/examples/vector_stores/MyScaleIndexDemo.ipynb b/docs/docs/examples/vector_stores/MyScaleIndexDemo.ipynb
similarity index 98%
rename from docs/examples/vector_stores/MyScaleIndexDemo.ipynb
rename to docs/docs/examples/vector_stores/MyScaleIndexDemo.ipynb
index b2208bcf2f3ae65822a7a48809caf549b80b1b22..39a4019710c7546192510412b77209cbfedb24ea 100644
--- a/docs/examples/vector_stores/MyScaleIndexDemo.ipynb
+++ b/docs/docs/examples/vector_stores/MyScaleIndexDemo.ipynb
@@ -212,7 +212,7 @@
     "\n",
     "Now MyScale vector store supports filter search and hybrid search\n",
     "\n",
-    "You can learn more about [query_engine](/module_guides/deploying/query_engine/root.md) and [retriever](/module_guides/querying/retriever/root.md)."
+    "You can learn more about [query_engine](/module_guides/deploying/query_engine/index.md) and [retriever](/module_guides/querying/retriever/index.md)."
    ]
   },
   {
diff --git a/docs/examples/vector_stores/Neo4jVectorDemo.ipynb b/docs/docs/examples/vector_stores/Neo4jVectorDemo.ipynb
similarity index 100%
rename from docs/examples/vector_stores/Neo4jVectorDemo.ipynb
rename to docs/docs/examples/vector_stores/Neo4jVectorDemo.ipynb
diff --git a/docs/examples/vector_stores/OpensearchDemo.ipynb b/docs/docs/examples/vector_stores/OpensearchDemo.ipynb
similarity index 100%
rename from docs/examples/vector_stores/OpensearchDemo.ipynb
rename to docs/docs/examples/vector_stores/OpensearchDemo.ipynb
diff --git a/docs/examples/vector_stores/PGVectoRsDemo.ipynb b/docs/docs/examples/vector_stores/PGVectoRsDemo.ipynb
similarity index 100%
rename from docs/examples/vector_stores/PGVectoRsDemo.ipynb
rename to docs/docs/examples/vector_stores/PGVectoRsDemo.ipynb
diff --git a/docs/examples/vector_stores/PineconeIndexDemo-Hybrid.ipynb b/docs/docs/examples/vector_stores/PineconeIndexDemo-Hybrid.ipynb
similarity index 100%
rename from docs/examples/vector_stores/PineconeIndexDemo-Hybrid.ipynb
rename to docs/docs/examples/vector_stores/PineconeIndexDemo-Hybrid.ipynb
diff --git a/docs/examples/vector_stores/PineconeIndexDemo.ipynb b/docs/docs/examples/vector_stores/PineconeIndexDemo.ipynb
similarity index 100%
rename from docs/examples/vector_stores/PineconeIndexDemo.ipynb
rename to docs/docs/examples/vector_stores/PineconeIndexDemo.ipynb
diff --git a/docs/examples/vector_stores/QdrantIndexDemo.ipynb b/docs/docs/examples/vector_stores/QdrantIndexDemo.ipynb
similarity index 100%
rename from docs/examples/vector_stores/QdrantIndexDemo.ipynb
rename to docs/docs/examples/vector_stores/QdrantIndexDemo.ipynb
diff --git a/docs/examples/vector_stores/Qdrant_metadata_filter.ipynb b/docs/docs/examples/vector_stores/Qdrant_metadata_filter.ipynb
similarity index 100%
rename from docs/examples/vector_stores/Qdrant_metadata_filter.ipynb
rename to docs/docs/examples/vector_stores/Qdrant_metadata_filter.ipynb
diff --git a/docs/examples/vector_stores/Qdrant_using_qdrant_filters.ipynb b/docs/docs/examples/vector_stores/Qdrant_using_qdrant_filters.ipynb
similarity index 100%
rename from docs/examples/vector_stores/Qdrant_using_qdrant_filters.ipynb
rename to docs/docs/examples/vector_stores/Qdrant_using_qdrant_filters.ipynb
diff --git a/docs/examples/vector_stores/RedisIndexDemo.ipynb b/docs/docs/examples/vector_stores/RedisIndexDemo.ipynb
similarity index 99%
rename from docs/examples/vector_stores/RedisIndexDemo.ipynb
rename to docs/docs/examples/vector_stores/RedisIndexDemo.ipynb
index 535f9cbf5d7c7f42d3a338de011a1c4e1004c2fc..6658d973895c4743d664b61c8f99554f99c04c66 100644
--- a/docs/examples/vector_stores/RedisIndexDemo.ipynb
+++ b/docs/docs/examples/vector_stores/RedisIndexDemo.ipynb
@@ -543,7 +543,7 @@
    "id": "e43b185f",
    "metadata": {},
    "source": [
-    "Learn more about [query_engine](/module_guides/deploying/query_engine/root.md)  and [retrievers](/module_guides/querying/retriever/root.md)."
+    "Learn more about [query_engine](/module_guides/deploying/query_engine/index.md)  and [retrievers](/module_guides/querying/retriever/index.md)."
    ]
   },
   {
diff --git a/docs/examples/vector_stores/RocksetIndexDemo.ipynb b/docs/docs/examples/vector_stores/RocksetIndexDemo.ipynb
similarity index 100%
rename from docs/examples/vector_stores/RocksetIndexDemo.ipynb
rename to docs/docs/examples/vector_stores/RocksetIndexDemo.ipynb
diff --git a/docs/examples/vector_stores/SimpleIndexDemo.ipynb b/docs/docs/examples/vector_stores/SimpleIndexDemo.ipynb
similarity index 100%
rename from docs/examples/vector_stores/SimpleIndexDemo.ipynb
rename to docs/docs/examples/vector_stores/SimpleIndexDemo.ipynb
diff --git a/docs/examples/vector_stores/SimpleIndexDemoLlama-Local.ipynb b/docs/docs/examples/vector_stores/SimpleIndexDemoLlama-Local.ipynb
similarity index 100%
rename from docs/examples/vector_stores/SimpleIndexDemoLlama-Local.ipynb
rename to docs/docs/examples/vector_stores/SimpleIndexDemoLlama-Local.ipynb
diff --git a/docs/examples/vector_stores/SimpleIndexDemoLlama2.ipynb b/docs/docs/examples/vector_stores/SimpleIndexDemoLlama2.ipynb
similarity index 100%
rename from docs/examples/vector_stores/SimpleIndexDemoLlama2.ipynb
rename to docs/docs/examples/vector_stores/SimpleIndexDemoLlama2.ipynb
diff --git a/docs/examples/vector_stores/SimpleIndexDemoMMR.ipynb b/docs/docs/examples/vector_stores/SimpleIndexDemoMMR.ipynb
similarity index 100%
rename from docs/examples/vector_stores/SimpleIndexDemoMMR.ipynb
rename to docs/docs/examples/vector_stores/SimpleIndexDemoMMR.ipynb
diff --git a/docs/examples/vector_stores/SimpleIndexOnS3.ipynb b/docs/docs/examples/vector_stores/SimpleIndexOnS3.ipynb
similarity index 100%
rename from docs/examples/vector_stores/SimpleIndexOnS3.ipynb
rename to docs/docs/examples/vector_stores/SimpleIndexOnS3.ipynb
diff --git a/docs/examples/vector_stores/SupabaseVectorIndexDemo.ipynb b/docs/docs/examples/vector_stores/SupabaseVectorIndexDemo.ipynb
similarity index 100%
rename from docs/examples/vector_stores/SupabaseVectorIndexDemo.ipynb
rename to docs/docs/examples/vector_stores/SupabaseVectorIndexDemo.ipynb
diff --git a/docs/examples/vector_stores/TairIndexDemo.ipynb b/docs/docs/examples/vector_stores/TairIndexDemo.ipynb
similarity index 100%
rename from docs/examples/vector_stores/TairIndexDemo.ipynb
rename to docs/docs/examples/vector_stores/TairIndexDemo.ipynb
diff --git a/docs/examples/vector_stores/TencentVectorDBIndexDemo.ipynb b/docs/docs/examples/vector_stores/TencentVectorDBIndexDemo.ipynb
similarity index 100%
rename from docs/examples/vector_stores/TencentVectorDBIndexDemo.ipynb
rename to docs/docs/examples/vector_stores/TencentVectorDBIndexDemo.ipynb
diff --git a/docs/examples/vector_stores/Timescalevector.ipynb b/docs/docs/examples/vector_stores/Timescalevector.ipynb
similarity index 100%
rename from docs/examples/vector_stores/Timescalevector.ipynb
rename to docs/docs/examples/vector_stores/Timescalevector.ipynb
diff --git a/docs/examples/vector_stores/TxtaiIndexDemo.ipynb b/docs/docs/examples/vector_stores/TxtaiIndexDemo.ipynb
similarity index 100%
rename from docs/examples/vector_stores/TxtaiIndexDemo.ipynb
rename to docs/docs/examples/vector_stores/TxtaiIndexDemo.ipynb
diff --git a/docs/examples/vector_stores/TypesenseDemo.ipynb b/docs/docs/examples/vector_stores/TypesenseDemo.ipynb
similarity index 100%
rename from docs/examples/vector_stores/TypesenseDemo.ipynb
rename to docs/docs/examples/vector_stores/TypesenseDemo.ipynb
diff --git a/docs/examples/vector_stores/UpstashVectorDemo.ipynb b/docs/docs/examples/vector_stores/UpstashVectorDemo.ipynb
similarity index 100%
rename from docs/examples/vector_stores/UpstashVectorDemo.ipynb
rename to docs/docs/examples/vector_stores/UpstashVectorDemo.ipynb
diff --git a/docs/examples/vector_stores/WeaviateIndexDemo-Hybrid.ipynb b/docs/docs/examples/vector_stores/WeaviateIndexDemo-Hybrid.ipynb
similarity index 100%
rename from docs/examples/vector_stores/WeaviateIndexDemo-Hybrid.ipynb
rename to docs/docs/examples/vector_stores/WeaviateIndexDemo-Hybrid.ipynb
diff --git a/docs/examples/vector_stores/WeaviateIndexDemo.ipynb b/docs/docs/examples/vector_stores/WeaviateIndexDemo.ipynb
similarity index 100%
rename from docs/examples/vector_stores/WeaviateIndexDemo.ipynb
rename to docs/docs/examples/vector_stores/WeaviateIndexDemo.ipynb
diff --git a/docs/examples/vector_stores/WeaviateIndex_auto_retriever.ipynb b/docs/docs/examples/vector_stores/WeaviateIndex_auto_retriever.ipynb
similarity index 100%
rename from docs/examples/vector_stores/WeaviateIndex_auto_retriever.ipynb
rename to docs/docs/examples/vector_stores/WeaviateIndex_auto_retriever.ipynb
diff --git a/docs/examples/vector_stores/WeaviateIndex_metadata_filter.ipynb b/docs/docs/examples/vector_stores/WeaviateIndex_metadata_filter.ipynb
similarity index 100%
rename from docs/examples/vector_stores/WeaviateIndex_metadata_filter.ipynb
rename to docs/docs/examples/vector_stores/WeaviateIndex_metadata_filter.ipynb
diff --git a/docs/examples/vector_stores/ZepIndexDemo.ipynb b/docs/docs/examples/vector_stores/ZepIndexDemo.ipynb
similarity index 100%
rename from docs/examples/vector_stores/ZepIndexDemo.ipynb
rename to docs/docs/examples/vector_stores/ZepIndexDemo.ipynb
diff --git a/docs/examples/vector_stores/chroma_auto_retriever.ipynb b/docs/docs/examples/vector_stores/chroma_auto_retriever.ipynb
similarity index 100%
rename from docs/examples/vector_stores/chroma_auto_retriever.ipynb
rename to docs/docs/examples/vector_stores/chroma_auto_retriever.ipynb
diff --git a/docs/examples/vector_stores/chroma_metadata_filter.ipynb b/docs/docs/examples/vector_stores/chroma_metadata_filter.ipynb
similarity index 100%
rename from docs/examples/vector_stores/chroma_metadata_filter.ipynb
rename to docs/docs/examples/vector_stores/chroma_metadata_filter.ipynb
diff --git a/docs/examples/vector_stores/elasticsearch_auto_retriever.ipynb b/docs/docs/examples/vector_stores/elasticsearch_auto_retriever.ipynb
similarity index 100%
rename from docs/examples/vector_stores/elasticsearch_auto_retriever.ipynb
rename to docs/docs/examples/vector_stores/elasticsearch_auto_retriever.ipynb
diff --git a/docs/examples/vector_stores/existing_data/pinecone_existing_data.ipynb b/docs/docs/examples/vector_stores/existing_data/pinecone_existing_data.ipynb
similarity index 100%
rename from docs/examples/vector_stores/existing_data/pinecone_existing_data.ipynb
rename to docs/docs/examples/vector_stores/existing_data/pinecone_existing_data.ipynb
diff --git a/docs/examples/vector_stores/existing_data/weaviate_existing_data.ipynb b/docs/docs/examples/vector_stores/existing_data/weaviate_existing_data.ipynb
similarity index 100%
rename from docs/examples/vector_stores/existing_data/weaviate_existing_data.ipynb
rename to docs/docs/examples/vector_stores/existing_data/weaviate_existing_data.ipynb
diff --git a/docs/examples/vector_stores/index_faiss.json b/docs/docs/examples/vector_stores/index_faiss.json
similarity index 100%
rename from docs/examples/vector_stores/index_faiss.json
rename to docs/docs/examples/vector_stores/index_faiss.json
diff --git a/docs/examples/vector_stores/index_faiss_core.index b/docs/docs/examples/vector_stores/index_faiss_core.index
similarity index 100%
rename from docs/examples/vector_stores/index_faiss_core.index
rename to docs/docs/examples/vector_stores/index_faiss_core.index
diff --git a/docs/examples/vector_stores/index_simple.json b/docs/docs/examples/vector_stores/index_simple.json
similarity index 100%
rename from docs/examples/vector_stores/index_simple.json
rename to docs/docs/examples/vector_stores/index_simple.json
diff --git a/docs/examples/vector_stores/pinecone_auto_retriever.ipynb b/docs/docs/examples/vector_stores/pinecone_auto_retriever.ipynb
similarity index 100%
rename from docs/examples/vector_stores/pinecone_auto_retriever.ipynb
rename to docs/docs/examples/vector_stores/pinecone_auto_retriever.ipynb
diff --git a/docs/examples/vector_stores/pinecone_metadata_filter.ipynb b/docs/docs/examples/vector_stores/pinecone_metadata_filter.ipynb
similarity index 100%
rename from docs/examples/vector_stores/pinecone_metadata_filter.ipynb
rename to docs/docs/examples/vector_stores/pinecone_metadata_filter.ipynb
diff --git a/docs/examples/vector_stores/postgres.ipynb b/docs/docs/examples/vector_stores/postgres.ipynb
similarity index 100%
rename from docs/examples/vector_stores/postgres.ipynb
rename to docs/docs/examples/vector_stores/postgres.ipynb
diff --git a/docs/examples/vector_stores/qdrant_hybrid.ipynb b/docs/docs/examples/vector_stores/qdrant_hybrid.ipynb
similarity index 100%
rename from docs/examples/vector_stores/qdrant_hybrid.ipynb
rename to docs/docs/examples/vector_stores/qdrant_hybrid.ipynb
diff --git a/docs/docs/getting_started/basic_rag.png b/docs/docs/getting_started/basic_rag.png
new file mode 100644
index 0000000000000000000000000000000000000000..1c6f04b7e75c2b81d334a850bd59e0f512173f54
Binary files /dev/null and b/docs/docs/getting_started/basic_rag.png differ
diff --git a/docs/getting_started/concepts.md b/docs/docs/getting_started/concepts.md
similarity index 65%
rename from docs/getting_started/concepts.md
rename to docs/docs/getting_started/concepts.md
index 1ccfcfa71ad8ebcbd65ad2c8e066c58114c3f509..6f2d7d62aefd3b1d9f09c74a96563f62643093c3 100644
--- a/docs/getting_started/concepts.md
+++ b/docs/docs/getting_started/concepts.md
@@ -2,9 +2,8 @@
 
 This is a quick guide to the high-level concepts you'll encounter frequently when building LLM applications.
 
-```{tip}
-If you haven't, [install LlamaIndex](/getting_started/installation.md) and complete the [starter tutorial](/getting_started/starter_example.md) before you read this. It will help ground these steps in your experience.
-```
+!!! tip
+If you haven't, [install LlamaIndex](./installation.md) and complete the [starter tutorial](./starter_example.md) before you read this. It will help ground these steps in your experience.
 
 ## Retrieval Augmented Generation (RAG)
 
@@ -14,7 +13,7 @@ In RAG, your data is loaded and prepared for queries or "indexed". User queries
 
 Even if what you're building is a chatbot or an agent, you'll want to know RAG techniques for getting data into your application.
 
-![](/_static/getting_started/basic_rag.png)
+![](../_static/getting_started/basic_rag.png)
 
 ## Stages within RAG
 
@@ -30,7 +29,7 @@ There are five key stages within RAG, which in turn will be a part of any larger
 
 - **Evaluation**: a critical step in any pipeline is checking how effective it is relative to other strategies, or when you make changes. Evaluation provides objective measures of how accurate, faithful and fast your responses to queries are.
 
-![](/_static/getting_started/stages.png)
+![](../_static/getting_started/stages.png)
 
 ## Important concepts within each step
 
@@ -38,47 +37,45 @@ There are also some terms you'll encounter that refer to steps within each of th
 
 ### Loading stage
 
-[**Nodes and Documents**](/module_guides/loading/documents_and_nodes/root.md): A `Document` is a container around any data source - for instance, a PDF, an API output, or retrieve data from a database. A `Node` is the atomic unit of data in LlamaIndex and represents a "chunk" of a source `Document`. Nodes have metadata that relate them to the document they are in and to other nodes.
+[**Nodes and Documents**](../module_guides/loading/documents_and_nodes/index.md): A `Document` is a container around any data source - for instance, a PDF, an API output, or retrieve data from a database. A `Node` is the atomic unit of data in LlamaIndex and represents a "chunk" of a source `Document`. Nodes have metadata that relate them to the document they are in and to other nodes.
 
-[**Connectors**](/module_guides/loading/connector/root.md):
+[**Connectors**](../module_guides/loading/connector/index.md):
 A data connector (often called a `Reader`) ingests data from different data sources and data formats into `Documents` and `Nodes`.
 
 ### Indexing Stage
 
-[**Indexes**](/module_guides/indexing/indexing.md):
+[**Indexes**](../module_guides/indexing/index.md):
 Once you've ingested your data, LlamaIndex will help you index the data into a structure that's easy to retrieve. This usually involves generating `vector embeddings` which are stored in a specialized database called a `vector store`. Indexes can also store a variety of metadata about your data.
 
-[**Embeddings**](/module_guides/models/embeddings.md) LLMs generate numerical representations of data called `embeddings`. When filtering your data for relevance, LlamaIndex will convert queries into embeddings, and your vector store will find data that is numerically similar to the embedding of your query.
+[**Embeddings**](../module_guides/models/embeddings.md) LLMs generate numerical representations of data called `embeddings`. When filtering your data for relevance, LlamaIndex will convert queries into embeddings, and your vector store will find data that is numerically similar to the embedding of your query.
 
 ### Querying Stage
 
-[**Retrievers**](/module_guides/querying/retriever/root.md):
+[**Retrievers**](../module_guides/querying/retriever/index.md):
 A retriever defines how to efficiently retrieve relevant context from an index when given a query. Your retrieval strategy is key to the relevancy of the data retrieved and the efficiency with which it's done.
 
-[**Routers**](/module_guides/querying/router/root.md):
+[**Routers**](../module_guides/querying/router/index.md):
 A router determines which retriever will be used to retrieve relevant context from the knowledge base. More specifically, the `RouterRetriever` class, is responsible for selecting one or multiple candidate retrievers to execute a query. They use a selector to choose the best option based on each candidate's metadata and the query.
 
-[**Node Postprocessors**](/module_guides/querying/node_postprocessors/root.md):
+[**Node Postprocessors**](../module_guides/querying/node_postprocessors/index.md):
 A node postprocessor takes in a set of retrieved nodes and applies transformations, filtering, or re-ranking logic to them.
 
-[**Response Synthesizers**](/module_guides/querying/response_synthesizers/root.md):
+[**Response Synthesizers**](../module_guides/querying/response_synthesizers/index.md):
 A response synthesizer generates a response from an LLM, using a user query and a given set of retrieved text chunks.
 
 ### Putting it all together
 
 There are endless use cases for data-backed LLM applications but they can be roughly grouped into three categories:
 
-[**Query Engines**](/module_guides/deploying/query_engine/root.md):
+[**Query Engines**](../module_guides/deploying/query_engine/index.md):
 A query engine is an end-to-end pipeline that allows you to ask questions over your data. It takes in a natural language query, and returns a response, along with reference context retrieved and passed to the LLM.
 
-[**Chat Engines**](/module_guides/deploying/chat_engines/root.md):
+[**Chat Engines**](../module_guides/deploying/chat_engines/index.md):
 A chat engine is an end-to-end pipeline for having a conversation with your data (multiple back-and-forth instead of a single question-and-answer).
 
-[**Agents**](/module_guides/deploying/agents/root.md):
-An agent is an automated decision-maker powered by an LLM that interacts with the world via a set of [tools](/module_guides/deploying/agents/tools/llamahub_tools_guide.md). Agents can take an arbitrary number of steps to complete a given task, dynamically deciding on the best course of action rather than following pre-determined steps. This gives it additional flexibility to tackle more complex tasks.
+[**Agents**](../module_guides/deploying/agents/index.md):
+An agent is an automated decision-maker powered by an LLM that interacts with the world via a set of [tools](../module_guides/deploying/agents/tools/llamahub_tools_guide.md). Agents can take an arbitrary number of steps to complete a given task, dynamically deciding on the best course of action rather than following pre-determined steps. This gives it additional flexibility to tackle more complex tasks.
 
-```{admonition} Next Steps
-* Tell me how to [customize things](/getting_started/customization.rst)
-* Continue learning with our [understanding LlamaIndex](/understanding/understanding.md) guide
-* Ready to dig deep? Check out the module guides on the left
-```
+!!! tip
+_ Tell me how to [customize things](./customization.md)
+_ Continue learning with our [understanding LlamaIndex](../understanding/index.md) guide \* Ready to dig deep? Check out the module guides on the left
diff --git a/docs/docs/getting_started/create_llama.md b/docs/docs/getting_started/create_llama.md
new file mode 100644
index 0000000000000000000000000000000000000000..96e9abaceb5401652823a676eeea7ddd55e2f8dd
--- /dev/null
+++ b/docs/docs/getting_started/create_llama.md
@@ -0,0 +1,3 @@
+# `create-llama`
+
+TODO
diff --git a/docs/docs/getting_started/customization.md b/docs/docs/getting_started/customization.md
new file mode 100644
index 0000000000000000000000000000000000000000..d1eb32bf84e8d355bf6974023565bb8c176e2f36
--- /dev/null
+++ b/docs/docs/getting_started/customization.md
@@ -0,0 +1,164 @@
+# Frequently Asked Questions (FAQ)
+
+!!! tip
+If you haven't already, [install LlamaIndex](installation.md) and complete the [starter tutorial](starter_example.md). If you run into terms you don't recognize, check out the [high-level concepts](concepts.md).
+
+In this section, we start with the code you wrote for the [starter example](starter_example.md) and show you the most common ways you might want to customize it for your use case:
+
+```python
+from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
+
+documents = SimpleDirectoryReader("data").load_data()
+index = VectorStoreIndex.from_documents(documents)
+query_engine = index.as_query_engine()
+response = query_engine.query("What did the author do growing up?")
+print(response)
+```
+
+---
+
+## **"I want to parse my documents into smaller chunks"**
+
+```python
+# Global settings
+from llama_index.core import Settings
+
+Settings.chunk_size = 512
+
+# Local settings
+from llama_index.core.node_parser import SentenceSplitter
+
+index = VectorStoreIndex.from_documents(
+    documents, transformations=[SentenceSplitter(chunk_size=512)]
+)
+```
+
+---
+
+## **"I want to use a different vector store"**
+
+First, you can install the vector store you want to use. For example, to use Chroma as the vector store, you can install it using pip:
+
+```bash
+pip install llama-index-vector-stores-chroma
+```
+
+To learn more about all integrations available, check out [LlamaHub](https://llamahub.ai).
+
+Then, you can use it in your code:
+
+```python
+import chromadb
+from llama_index.vector_stores.chroma import ChromaVectorStore
+from llama_index.core import StorageContext
+
+chroma_client = chromadb.PersistentClient()
+chroma_collection = chroma_client.create_collection("quickstart")
+vector_store = ChromaVectorStore(chroma_collection=chroma_collection)
+storage_context = StorageContext.from_defaults(vector_store=vector_store)
+```
+
+`StorageContext` defines the storage backend for where the documents, embeddings, and indexes are stored. You can learn more about [storage](../module_guides/storing/index.md) and [how to customize it](../module_guides/storing/customization.md).
+
+```python
+from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
+
+documents = SimpleDirectoryReader("data").load_data()
+index = VectorStoreIndex.from_documents(
+    documents, storage_context=storage_context
+)
+query_engine = index.as_query_engine()
+response = query_engine.query("What did the author do growing up?")
+print(response)
+```
+
+---
+
+## **"I want to retrieve more context when I query"**
+
+```python
+from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
+
+documents = SimpleDirectoryReader("data").load_data()
+index = VectorStoreIndex.from_documents(documents)
+query_engine = index.as_query_engine(similarity_top_k=5)
+response = query_engine.query("What did the author do growing up?")
+print(response)
+```
+
+`as_query_engine` builds a default `retriever` and `query engine` on top of the index. You can configure the retriever and query engine by passing in keyword arguments. Here, we configure the retriever to return the top 5 most similar documents (instead of the default of 2). You can learn more about [retrievers](../module_guides/querying/retriever/retrievers.md) and [query engines](../module_guides/querying/retriever/index.md).
+
+---
+
+## **"I want to use a different LLM"**
+
+```python
+# Global settings
+from llama_index.core import Settings
+from llama_index.llms.ollama import Ollama
+
+Settings.llm = Ollama(model="mistral", request_timeout=60.0)
+
+# Local settings
+index.as_query_engine(llm=Ollama(model="mistral", request_timeout=60.0))
+```
+
+You can learn more about [customizing LLMs](../module_guides/models/llms.md).
+
+---
+
+## **"I want to use a different response mode"**
+
+```python
+from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
+
+documents = SimpleDirectoryReader("data").load_data()
+index = VectorStoreIndex.from_documents(documents)
+query_engine = index.as_query_engine(response_mode="tree_summarize")
+response = query_engine.query("What did the author do growing up?")
+print(response)
+```
+
+You can learn more about [query engines](../module_guides/querying/index.md) and [response modes](../module_guides/deploying/query_engine/response_modes.md).
+
+---
+
+## **"I want to stream the response back"**
+
+```python
+from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
+
+documents = SimpleDirectoryReader("data").load_data()
+index = VectorStoreIndex.from_documents(documents)
+query_engine = index.as_query_engine(streaming=True)
+response = query_engine.query("What did the author do growing up?")
+response.print_response_stream()
+```
+
+You can learn more about [streaming responses](../module_guides/deploying/query_engine/streaming.md).
+
+---
+
+## **"I want a chatbot instead of Q&A"**
+
+```python
+from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
+
+documents = SimpleDirectoryReader("data").load_data()
+index = VectorStoreIndex.from_documents(documents)
+query_engine = index.as_chat_engine()
+response = query_engine.chat("What did the author do growing up?")
+print(response)
+
+response = query_engine.chat("Oh interesting, tell me more.")
+print(response)
+```
+
+Learn more about the [chat engine](../module_guides/deploying/chat_engines/usage_pattern.md).
+
+---
+
+## Next Steps
+
+- Want a thorough walkthrough of (almost) everything you can configure? Get started with [Understanding LlamaIndex](../understanding/index.md).
+- Want more in-depth understanding of specific modules? Check out the module guides in the left nav 👈
diff --git a/docs/getting_started/discover_llamaindex.md b/docs/docs/getting_started/discover_llamaindex.md
similarity index 87%
rename from docs/getting_started/discover_llamaindex.md
rename to docs/docs/getting_started/discover_llamaindex.md
index 4a1857ed7a69bb35b987866e0c2110170c52432e..69cb3cecf2e572977093a9f557bd774c7cc96a73 100644
--- a/docs/getting_started/discover_llamaindex.md
+++ b/docs/docs/getting_started/discover_llamaindex.md
@@ -1,6 +1,6 @@
 # Discover LlamaIndex Video Series
 
-If you like learning from videos, now's a good time to check out our "Discover LlamaIndex" series. If not, we recommend heading on to our [Understanding LlamaIndex](/understanding/understanding.md) tutorial.
+If you like learning from videos, now's a good time to check out our "Discover LlamaIndex" series. If not, we recommend heading on to our [Understanding LlamaIndex](../understanding/index.md) tutorial.
 
 ## Bottoms-Up Development (Llama Docs Bot)
 
@@ -21,7 +21,7 @@ This video covers the `SubQuestionQueryEngine` and how it can be applied to fina
 
 [Youtube](https://www.youtube.com/watch?v=GT_Lsj3xj1o)
 
-[Notebook](../../examples/usecases/10k_sub_question.ipynb)
+[Notebook](../examples/usecases/10k_sub_question.ipynb)
 
 ## Discord Document Management
 
@@ -31,7 +31,7 @@ This video covers managing documents from a source that is constantly updating (
 
 [Notebook and Supplementary Material](https://github.com/jerryjliu/llama_index/tree/main/docs/examples/discover_llamaindex/document_management/)
 
-[Reference Docs](/module_guides/indexing/document_management.md)
+[Reference Docs](../module_guides/indexing/document_management.md)
 
 ## Joint Text to SQL and Semantic Search
 
@@ -39,4 +39,4 @@ This video covers the tools built into LlamaIndex for combining SQL and semantic
 
 [Youtube](https://www.youtube.com/watch?v=ZIvcVJGtCrY)
 
-[Notebook](../../examples/query_engine/SQLAutoVectorQueryEngine.ipynb)
+[Notebook](../examples/query_engine/SQLAutoVectorQueryEngine.ipynb)
diff --git a/docs/docs/getting_started/indexing.jpg b/docs/docs/getting_started/indexing.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..8672967213caf28fb27682b6b9e2e5111beb9aaa
Binary files /dev/null and b/docs/docs/getting_started/indexing.jpg differ
diff --git a/docs/getting_started/installation.md b/docs/docs/getting_started/installation.md
similarity index 89%
rename from docs/getting_started/installation.md
rename to docs/docs/getting_started/installation.md
index fcef93dcb40716b93623f50a4c00ffb626fbe3cf..99c56dc5f819f44bbbba584403495e012651accf 100644
--- a/docs/getting_started/installation.md
+++ b/docs/docs/getting_started/installation.md
@@ -33,10 +33,8 @@ This is a starter bundle of packages, containing
 By default, we use the OpenAI `gpt-3.5-turbo` model for text generation and `text-embedding-ada-002` for retrieval and embeddings. In order to use this, you must have an OPENAI_API_KEY set up as an environment variable.
 You can obtain an API key by logging into your OpenAI account and [and creating a new API key](https://platform.openai.com/account/api-keys).
 
-```{tip}
-You can also [use one of many other available LLMs](/module_guides/models/llms/usage_custom.md). You may
-need additional environment keys + tokens setup depending on the LLM provider.
-```
+!!! tip
+You can also [use one of many other available LLMs](../module_guides/models/llms/usage_custom.md). You may need additional environment keys + tokens setup depending on the LLM provider.
 
 [Check out our OpenAI Starter Example](starter_example.md)
 
@@ -52,9 +50,9 @@ pip install llama-index-core llama-index-readers-file llama-index-llms-ollama ll
 
 [Check out our Starter Example with Local Models](starter_example_local.md)
 
-A full guide to using and configuring LLMs is available [here](/module_guides/models/llms.md).
+A full guide to using and configuring LLMs is available [here](../module_guides/models/llms.md).
 
-A full guide to using and configuring embedding models is available [here](/module_guides/models/embeddings.md).
+A full guide to using and configuring embedding models is available [here](../module_guides/models/embeddings.md).
 
 ## Installation from Source
 
diff --git a/docs/docs/getting_started/querying.jpg b/docs/docs/getting_started/querying.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..3c241bdda5ba98d3f3ee2e163b9f19280c5c7503
Binary files /dev/null and b/docs/docs/getting_started/querying.jpg differ
diff --git a/docs/docs/getting_started/rag.jpg b/docs/docs/getting_started/rag.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..b68eca2564f8535b33d9ed6d4ce4d4410d2a0698
Binary files /dev/null and b/docs/docs/getting_started/rag.jpg differ
diff --git a/docs/docs/getting_started/reading.md b/docs/docs/getting_started/reading.md
new file mode 100644
index 0000000000000000000000000000000000000000..63516d4f813d21120c057f95b51edfbe23bd59be
--- /dev/null
+++ b/docs/docs/getting_started/reading.md
@@ -0,0 +1,25 @@
+# How to read these docs
+
+Welcome to the LlamaIndex documentation! We've tried hard to make these docs approachable regardless of your experience level with LlamaIndex and with LLMs and generative AI in general.
+
+## Before you start
+
+LlamaIndex is a Python library, so you should have Python [installed](https://www.python.org/downloads/) and a basic working understanding of how to write it. If you prefer JavaScript, we recommend trying out our [TypeScript package](https://ts.llamaindex.ai/).
+
+Many of our examples are formatted as Notebooks, by which we mean Jupyter-style notebooks. You don't have to have Jupyter installed; you can try out most of our examples on a hosted service like [Google Colab](https://colab.research.google.com/).
+
+## Structure of these docs
+
+Our docs are structured so you should be able to roughly progress simply by moving down the sidebar on the left, or just hitting the "next" link at the bottom of each page.
+
+1. **Getting started:** The section you're in right now. We can get you going from knowing nothing about LlamaIndex and LLMs. [Install the library](installation.md), write your first demo in [five lines of code](starter_example.md), learn more about the [high level concepts](concepts.md) of LLM applications, and then see how you can [customize the five-line example](customization.md) to meet your needs.
+
+2. **Learn:** Once you've completed the Getting Started section, this is the next place to go. In a series of bite-sized tutorials, we'll walk you through every stage of building a production LlamaIndex application and help you level up on the concepts of the library and LLMs in general as you go.
+
+3. **Use cases:** If you're a dev trying to figure out whether LlamaIndex will work for your use case, we have an overview of the types of things you can build.
+
+4. **Examples:** We have rich notebook examples for nearly every feature under the soon. Explore these to find and learn something new about LlamaIndex.
+
+5. **Advanced:** Already got a working LlamaIndex application and looking to further refine it? Our advanced section will walk you through the [first things you should try optimizing](../optimizing/basic_strategies/basic_strategies.md) like your embedding model and chunk size through progressively more complex and subtle customizations all the way to [fine tuning](../optimizing/fine-tuning/fine-tuning.md) your model.
+
+6. **Component guides:** Arranged in the same order of building an LLM application as our Understanding section, these are comprehensive, lower-level guides to the individual components of LlamaIndex and how to use them.
diff --git a/docs/docs/getting_started/stages.png b/docs/docs/getting_started/stages.png
new file mode 100644
index 0000000000000000000000000000000000000000..17baf199b32cf182e161d37dc3bf15940c8a9735
Binary files /dev/null and b/docs/docs/getting_started/stages.png differ
diff --git a/docs/getting_started/starter_example.md b/docs/docs/getting_started/starter_example.md
similarity index 92%
rename from docs/getting_started/starter_example.md
rename to docs/docs/getting_started/starter_example.md
index 8b8e1b460d8c85bf9ca4cdc1fec28cd1cdb5745b..50db6167a985c5f1757d385b9c52890e069f1a00 100644
--- a/docs/getting_started/starter_example.md
+++ b/docs/docs/getting_started/starter_example.md
@@ -1,14 +1,13 @@
-# Starter Tutorial
-
-```{tip}
-Make sure you've followed the [installation](installation.md) steps first.
-```
+# Starter Tutorial (OpenAI)
 
 This is our famous "5 lines of code" starter example using OpenAI.
 
-```{admonition} Want to use local models?
+!!! tip
+Make sure you've followed the [installation](installation.md) steps first.
+
+!!! tip
+Want to use local models?
 If you want to do our starter tutorial using only local models, [check out this tutorial instead](starter_example_local.md).
-```
 
 ## Download data
 
@@ -119,8 +118,4 @@ print(response)
 
 Now you can efficiently query to your heart's content! But this is just the beginning of what you can do with LlamaIndex.
 
-```{admonition} Next Steps
-* learn more about the [high-level concepts](/getting_started/concepts.md).
-* tell me how to [customize things](/getting_started/customization.rst).
-* curious about a specific module? check out the guides on the left 👈
-```
+!!! tip - learn more about the [high-level concepts](./concepts.md). - tell me how to [customize things](./customization.md). - curious about a specific module? check out the guides on the left 👈
diff --git a/docs/getting_started/starter_example_local.md b/docs/docs/getting_started/starter_example_local.md
similarity index 89%
rename from docs/getting_started/starter_example_local.md
rename to docs/docs/getting_started/starter_example_local.md
index 85dd5723bea7cbfe24144c0d80b2321fd81eefea..df0797fe7abb30d76473a5013dd4c56d237a178f 100644
--- a/docs/getting_started/starter_example_local.md
+++ b/docs/docs/getting_started/starter_example_local.md
@@ -1,8 +1,7 @@
 # Starter Tutorial (Local Models)
 
-```{tip}
+!!! tip
 Make sure you've followed the [custom installation](installation.md) steps first.
-```
 
 This is our famous "5 lines of code" starter example with local LLM and embedding models. We will use `BAAI/bge-small-en-v1.5` as our embedding model and `Mistral-7B` served through `Ollama` as our LLM.
 
@@ -68,10 +67,8 @@ print(response)
 
 This creates an engine for Q&A over your index and asks a simple question. You should get back a response similar to the following: `The author wrote short stories and tried to program on an IBM 1401.`
 
-You can view logs, persist/load the index similar to our [starter example](/getting_started/starter_example.md).
+You can view logs, persist/load the index similar to our [starter example](starter_example.md).
 
-```{admonition} Next Steps
-* learn more about the [high-level concepts](/getting_started/concepts.md).
-* tell me how to [customize things](/getting_started/customization.rst).
-* curious about a specific module? check out the guides on the left 👈
-```
+!!! tip
+_ learn more about the [high-level concepts](./concepts.md).
+_ tell me how to [customize things](./customization.md). \* curious about a specific module? check out the guides on the left 👈
diff --git a/docs/docs/getting_started/starter_projects.md b/docs/docs/getting_started/starter_projects.md
new file mode 100644
index 0000000000000000000000000000000000000000..096a588190ce7458a2ee39bba893a36a105cddef
--- /dev/null
+++ b/docs/docs/getting_started/starter_projects.md
@@ -0,0 +1,3 @@
+# Starter Projects
+
+TODO
diff --git a/docs/getting_started/v0_10_0_migration.md b/docs/docs/getting_started/v0_10_0_migration.md
similarity index 96%
rename from docs/getting_started/v0_10_0_migration.md
rename to docs/docs/getting_started/v0_10_0_migration.md
index 27d5bc639013443e7f1c7984ea43cdc67d372d03..5eb3d81e2135cbcfd59b7f51649d46ed832b95a2 100644
--- a/docs/getting_started/v0_10_0_migration.md
+++ b/docs/docs/getting_started/v0_10_0_migration.md
@@ -75,4 +75,4 @@ Settings.embed_model = embed_model
 Settings.chunk_size = 512
 ```
 
-You can see the `ServiceContext` -> `Settings` migration guide for [more details](/module_guides/supporting_modules/service_context_migration.md).
+You can see the `ServiceContext` -> `Settings` migration guide for [more details](../module_guides/supporting_modules/service_context_migration.md).
diff --git a/docs/docs/index.md b/docs/docs/index.md
new file mode 100644
index 0000000000000000000000000000000000000000..f42d45874f138e84ace137a14453cf3abb00eae3
--- /dev/null
+++ b/docs/docs/index.md
@@ -0,0 +1,89 @@
+<script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
+
+# Welcome to LlamaIndex 🦙 !
+
+LlamaIndex is a data framework for [LLM](https://en.wikipedia.org/wiki/Large_language_model)-based applications which benefit from context augmentation. Such LLM systems have been termed as RAG systems, standing for "Retrieval-Augemented Generation". LlamaIndex provides the essential abstractions to more easily ingest, structure, and access private or domain-specific data in order to inject these safely and reliably into LLMs for more accurate text generation. It's available in Python (these docs) and [Typescript](https://ts.llamaindex.ai/).
+
+!!! tip
+
+    Updating to LlamaIndex v0.10.0? Check out the [migration guide](./getting_started/v0_10_0_migration.md).
+
+## 🚀 Why Context Augmentation?
+
+LLMs offer a natural language interface between humans and data. Widely available models come pre-trained on huge amounts of publicly available data like Wikipedia, mailing lists, textbooks, source code and more.
+
+However, while LLMs are trained on a great deal of data, they are not trained on **your** data, which may be private or specific to the problem you're trying to solve. It's behind APIs, in SQL databases, or trapped in PDFs and slide decks.
+
+You may choose to **fine-tune** a LLM with your data, but:
+
+- Training a LLM is **expensive**.
+- Due to the cost to train, it's **hard to update** a LLM with latest information.
+- **Observability** is lacking. When you ask a LLM a question, it's not obvious how the LLM arrived at its answer.
+
+Instead of fine-tuning, one can a context augmentation pattern called [Retrieval-Augmented Generation (RAG)](./getting_started/concepts.md) to obtain more accurate text generation relevant to your specific data. RAG involves the following high level steps:
+
+1. Retrieve information from your data sources first,
+2. Add it to your question as context, and
+3. Ask the LLM to answer based on the enriched prompt.
+
+In doing so, RAG overcomes all three weaknesses of the fine-tuning approach:
+
+- There's no training involved, so it's **cheap**.
+- Data is fetched only when you ask for them, so it's **always up to date**.
+- LlamaIndex can show you the retrieved documents, so it's **more trustworthy**.
+
+### 🦙 Why LlamaIndex for Context Augmentation?
+
+Firstly, LlamaIndex imposes no restriction on how you use LLMs. You can still use LLMs as auto-complete, chatbots, semi-autonomous agents, and more (see Use Cases on the left). It only makes LLMs more relevant to you.
+
+LlamaIndex provides the following tools to help you quickly standup production-ready RAG systems:
+
+- **Data connectors** ingest your existing data from their native source and format. These could be APIs, PDFs, SQL, and (much) more.
+- **Data indexes** structure your data in intermediate representations that are easy and performant for LLMs to consume.
+- **Engines** provide natural language access to your data. For example:
+
+  - Query engines are powerful retrieval interfaces for knowledge-augmented output.
+  - Chat engines are conversational interfaces for multi-message, "back and forth" interactions with your data.
+
+- **Data agents** are LLM-powered knowledge workers augmented by tools, from simple helper functions to API integrations and more.
+- **Application integrations** tie LlamaIndex back into the rest of your ecosystem. This could be LangChain, Flask, Docker, ChatGPT, or… anything else!
+
+### 👨‍👩‍👧‍👦 Who is LlamaIndex for?
+
+LlamaIndex provides tools for beginners, advanced users, and everyone in between.
+
+Our high-level API allows beginner users to use LlamaIndex to ingest and query their data in 5 lines of code.
+
+For more complex applications, our lower-level APIs allow advanced users to customize and extend any module—data connectors, indices, retrievers, query engines, reranking modules—to fit their needs.
+
+## Getting Started
+
+To install the library:
+
+`pip install llama-index`
+
+We recommend starting at [how to read these docs](./getting_started/reading.md) which will point you to the right place based on your experience level.
+
+## 🗺️ Ecosystem
+
+To download or contribute, find LlamaIndex on:
+
+- [Github](https://github.com/run-llama/llama_index)
+- [PyPi](https://pypi.org/project/llama-index/)
+- npm (Typescript/Javascript):
+  - [LlamaIndex.TS Github](https://github.com/run-llama/LlamaIndexTS)
+  - [TypeScript Docs](https://ts.llamaindex.ai/)
+  - [LlamaIndex.TS](https://www.npmjs.com/package/llamaindex)
+
+## Community
+
+Need help? Have a feature suggestion? Join the LlamaIndex community:
+
+- [Twitter](https://twitter.com/llama_index)
+- [Discord](https://discord.gg/dGcwcsnxhU)
+
+## Associated projects
+
+- [🏡 LlamaHub](https://llamahub.ai) | A large (and growing!) collection of custom data connectors
+- [SEC Insights](https://sec-insights.com) | A LlamaIndex-powered application for financial research
+- [create-llama](https://www.npmjs.com/package/create-llama) | A CLI tool to quickly scaffold LlamaIndex projects
diff --git a/docs/docs/indices/create_and_refine.png b/docs/docs/indices/create_and_refine.png
new file mode 100644
index 0000000000000000000000000000000000000000..a7d2507617a015eb9d9425d85ee7e274fd1dd173
Binary files /dev/null and b/docs/docs/indices/create_and_refine.png differ
diff --git a/docs/docs/indices/keyword.png b/docs/docs/indices/keyword.png
new file mode 100644
index 0000000000000000000000000000000000000000..ab6641867a076b262303e8e0f4da5c1dd9eff9aa
Binary files /dev/null and b/docs/docs/indices/keyword.png differ
diff --git a/docs/docs/indices/keyword_query.png b/docs/docs/indices/keyword_query.png
new file mode 100644
index 0000000000000000000000000000000000000000..5595ce4b98a4dfa7c742534aebdb9b0bc79da673
Binary files /dev/null and b/docs/docs/indices/keyword_query.png differ
diff --git a/docs/docs/indices/list.png b/docs/docs/indices/list.png
new file mode 100644
index 0000000000000000000000000000000000000000..595a93936fff3a71d42d84337e325dc5af7ca3c2
Binary files /dev/null and b/docs/docs/indices/list.png differ
diff --git a/docs/docs/indices/list_filter_query.png b/docs/docs/indices/list_filter_query.png
new file mode 100644
index 0000000000000000000000000000000000000000..53bc6067a78b623980e31c29dafe99fc6341e875
Binary files /dev/null and b/docs/docs/indices/list_filter_query.png differ
diff --git a/docs/docs/indices/list_query.png b/docs/docs/indices/list_query.png
new file mode 100644
index 0000000000000000000000000000000000000000..e94ac5a354cd683ba67ca9775580f5a6702dc32f
Binary files /dev/null and b/docs/docs/indices/list_query.png differ
diff --git a/docs/docs/indices/tree.png b/docs/docs/indices/tree.png
new file mode 100644
index 0000000000000000000000000000000000000000..3385fa7af5e10501027ac0ff66eb9bc09b6d464b
Binary files /dev/null and b/docs/docs/indices/tree.png differ
diff --git a/docs/docs/indices/tree_query.png b/docs/docs/indices/tree_query.png
new file mode 100644
index 0000000000000000000000000000000000000000..4f3488e13d2e5e64bb7cd5f20bec795b87fc12d1
Binary files /dev/null and b/docs/docs/indices/tree_query.png differ
diff --git a/docs/docs/indices/tree_summarize.png b/docs/docs/indices/tree_summarize.png
new file mode 100644
index 0000000000000000000000000000000000000000..b93290571aa39273d46c939e51e46330e325b28b
Binary files /dev/null and b/docs/docs/indices/tree_summarize.png differ
diff --git a/docs/docs/indices/vector_store.png b/docs/docs/indices/vector_store.png
new file mode 100644
index 0000000000000000000000000000000000000000..37aa5de2a14b65c4372ad3a0805e0fd65690ccc9
Binary files /dev/null and b/docs/docs/indices/vector_store.png differ
diff --git a/docs/docs/indices/vector_store_query.png b/docs/docs/indices/vector_store_query.png
new file mode 100644
index 0000000000000000000000000000000000000000..de2c1948cdcafc3e4d826b8f3bb09965c76446dc
Binary files /dev/null and b/docs/docs/indices/vector_store_query.png differ
diff --git a/docs/docs/integrations/TonicValidate-Graph.png b/docs/docs/integrations/TonicValidate-Graph.png
new file mode 100644
index 0000000000000000000000000000000000000000..c2328da776d78ec4f522284e21cd34f66a30ef7b
Binary files /dev/null and b/docs/docs/integrations/TonicValidate-Graph.png differ
diff --git a/docs/docs/integrations/arize_phoenix.png b/docs/docs/integrations/arize_phoenix.png
new file mode 100644
index 0000000000000000000000000000000000000000..77d61a15a456aa24dd0c434919e0b340d45f3e61
Binary files /dev/null and b/docs/docs/integrations/arize_phoenix.png differ
diff --git a/docs/docs/integrations/honeyhive.png b/docs/docs/integrations/honeyhive.png
new file mode 100644
index 0000000000000000000000000000000000000000..259564acdfad300ba096e700d0f81608fdd98e6a
Binary files /dev/null and b/docs/docs/integrations/honeyhive.png differ
diff --git a/docs/docs/integrations/openllmetry.png b/docs/docs/integrations/openllmetry.png
new file mode 100644
index 0000000000000000000000000000000000000000..a1308ef9b07605f27e240c6b9da52efebb78b1b8
Binary files /dev/null and b/docs/docs/integrations/openllmetry.png differ
diff --git a/docs/docs/integrations/perfetto.png b/docs/docs/integrations/perfetto.png
new file mode 100644
index 0000000000000000000000000000000000000000..a3d77afd1425d87da097601fda0d4a765209fcf8
Binary files /dev/null and b/docs/docs/integrations/perfetto.png differ
diff --git a/docs/docs/integrations/trulens.png b/docs/docs/integrations/trulens.png
new file mode 100644
index 0000000000000000000000000000000000000000..a0630e7bcdbf90de1a22317bf6177af3f8bd0341
Binary files /dev/null and b/docs/docs/integrations/trulens.png differ
diff --git a/docs/docs/integrations/wandb.png b/docs/docs/integrations/wandb.png
new file mode 100644
index 0000000000000000000000000000000000000000..86174b887a7eebeaf19c92576a6ae3d548f3ffd9
Binary files /dev/null and b/docs/docs/integrations/wandb.png differ
diff --git a/docs/docs/javascript/llms_example.js b/docs/docs/javascript/llms_example.js
new file mode 100644
index 0000000000000000000000000000000000000000..4cb47cce3f5f4e79c4eec69a10f9362e7a935d57
--- /dev/null
+++ b/docs/docs/javascript/llms_example.js
@@ -0,0 +1,52 @@
+var exampleTemplate = `<h3 class="example-heading toggle-example">Framework Usage</h3>
+  <div class="usage-examples hidden">
+      <div class="example">
+      </div>
+  </div>`;
+
+var exampleMarkdown = `\`\`\`python
+from llama_index.core import Settings
+
+# global default
+Settings.llm = llm
+
+# per-component
+# objects that use an LLM accept it as a kwarg
+index.as_query_engine(llm=llm)
+
+index.as_chat_engine(llm=llm)
+\`\`\``;
+
+function addToggleToExample() {
+  const toggleExample = document.querySelector(".toggle-example");
+  const usageExamples = document.querySelector(".usage-examples");
+
+  toggleExample.addEventListener("click", function () {
+    console.log("clicked!");
+    console.log(usageExamples);
+    usageExamples.classList.toggle("hidden");
+  });
+}
+
+// Add marked package as <script> tag
+var script = document.createElement("script");
+script.type = "text/javascript";
+script.async = true;
+script.onload = function () {
+  document$.subscribe(function () {
+    console.log("document loaded");
+    console.log(window.location.pathname);
+
+    if (window.location.pathname.includes("/LLMS/")) {
+      var exampleElement = document.createElement("div");
+      exampleElement.className = "container";
+      exampleElement.innerHTML = exampleTemplate;
+      exampleElement.children[1].children[0].innerHTML =
+        marked.parse(exampleMarkdown);
+      document.querySelector(".md-content__inner").prepend(exampleElement);
+      addToggleToExample();
+    }
+  });
+};
+script.src = "https://cdn.jsdelivr.net/npm/marked/marked.min.js";
+document.head.appendChild(script);
diff --git a/docs/docs/javascript/mendablesearch.js b/docs/docs/javascript/mendablesearch.js
new file mode 100644
index 0000000000000000000000000000000000000000..994e8f89c0e36a6d001f54e752e313b972d80aa7
--- /dev/null
+++ b/docs/docs/javascript/mendablesearch.js
@@ -0,0 +1,65 @@
+document.addEventListener("DOMContentLoaded", () => {
+  // Load the external dependencies
+  function loadScript(src, onLoadCallback) {
+    const script = document.createElement("script");
+    script.src = src;
+    script.onload = onLoadCallback;
+    document.head.appendChild(script);
+  }
+
+  function createRootElement() {
+    const rootElement = document.createElement("div");
+    rootElement.id = "my-component-root";
+    document.body.appendChild(rootElement);
+    return rootElement;
+  }
+
+  function initializeMendable() {
+    const rootElement = createRootElement();
+    const { MendableFloatingButton } = Mendable;
+
+    const icon = React.createElement(
+      "p",
+      {
+        style: {
+          color: "#ffffff",
+          fontSize: "40px",
+          width: "48px",
+          height: "48px",
+          margin: "0px",
+          padding: "0px",
+          display: "flex",
+          alignItems: "center",
+          justifyContent: "center",
+        },
+      },
+      "🦙",
+    );
+
+    const mendableFloatingButton = React.createElement(MendableFloatingButton, {
+      style: { darkMode: false, accentColor: "#010810" },
+      floatingButtonStyle: { color: "#ffffff", backgroundColor: "#010810" },
+      anon_key: "d0fb5ab6-ae6c-49dc-8d38-5115fe8e4755", // Public ANON key, ok to be public
+      messageSettings: {
+        openSourcesInNewTab: false,
+        prettySources: true,
+      },
+      showSimpleSearch: true,
+      icon: icon,
+    });
+
+    ReactDOM.render(mendableFloatingButton, rootElement);
+  }
+
+  loadScript("https://unpkg.com/react@17/umd/react.production.min.js", () => {
+    loadScript(
+      "https://unpkg.com/react-dom@17/umd/react-dom.production.min.js",
+      () => {
+        loadScript(
+          "https://unpkg.com/@mendable/search@0.0.150/dist/umd/mendable.min.js",
+          initializeMendable,
+        );
+      },
+    );
+  });
+});
diff --git a/docs/module_guides/deploying/agents/agent_runner.md b/docs/docs/module_guides/deploying/agents/agent_runner.md
similarity index 96%
rename from docs/module_guides/deploying/agents/agent_runner.md
rename to docs/docs/module_guides/deploying/agents/agent_runner.md
index d0f44ceb05c603d8c8c4ffd75d62a31062531064..8a5bcc880bf595840eb43742d69c694c7caa9ea6 100644
--- a/docs/module_guides/deploying/agents/agent_runner.md
+++ b/docs/docs/module_guides/deploying/agents/agent_runner.md
@@ -21,7 +21,7 @@ Some auxiliary classes:
 - `TaskStep`: represents a single step. Feed this in as input to `AgentWorker`, get back a `TaskStepOutput`. Completing a `Task` can involve multiple `TaskStep`.
 - `TaskStepOutput`: Output from a given step execution. Outputs whether or not a task is done.
 
-![](/_static/agents/agent_step_execute.png)
+![](../../../_static/agents/agent_step_execute.png)
 
 ## Benefits
 
@@ -74,4 +74,4 @@ from llama_index.core.agent import OldOpenAIAgent, OldReActAgent
 
 ## Additional Module Guides
 
-Check out our lower-level [agent module guides](lower-level-agent-api) for more details!
+Check out our lower-level [agent module guides](./modules.md#custom-agents) for more details!
diff --git a/docs/module_guides/deploying/agents/root.md b/docs/docs/module_guides/deploying/agents/index.md
similarity index 75%
rename from docs/module_guides/deploying/agents/root.md
rename to docs/docs/module_guides/deploying/agents/index.md
index b7bd90716498b5eedbb2c9371bce428ac4b807ab..17a81db41d7cde5665e0e37652dc1a6c6e547765 100644
--- a/docs/module_guides/deploying/agents/root.md
+++ b/docs/docs/module_guides/deploying/agents/index.md
@@ -7,7 +7,7 @@ Data Agents are LLM-powered knowledge workers in LlamaIndex that can intelligent
 - Perform automated search and retrieval over different types of data - unstructured, semi-structured, and structured.
 - Calling any external service API in a structured fashion, and processing the response + storing it for later.
 
-In that sense, agents are a step beyond our [query engines](/module_guides/deploying/query_engine/root.md) in that they can not only "read" from a static source of data, but can dynamically ingest and modify data from a variety of different tools.
+In that sense, agents are a step beyond our [query engines](../query_engine/index.md) in that they can not only "read" from a static source of data, but can dynamically ingest and modify data from a variety of different tools.
 
 Building a data agent requires the following core components:
 
@@ -26,7 +26,7 @@ The reasoning loop depends on the type of agent. We have support for the followi
 
 ### Tool Abstractions
 
-You can learn more about our Tool abstractions in our [Tools section](/module_guides/deploying/agents/tools/root.md).
+You can learn more about our Tool abstractions in our [Tools section](tools/index.md).
 
 ### Blog Post
 
@@ -38,7 +38,7 @@ By default, our agents expose `query` and `chat` functions that will execute a u
 
 We also offer a **lower-level API** allowing you to perform step-wise execution of an agent. This gives you much more control in being able to create tasks, and analyze + act upon the input/output of each step within a task.
 
-Check out [our guide](/module_guides/deploying/agents/agent_runner.md).
+Check out [our guide](agent_runner.md).
 
 ## Usage Pattern
 
@@ -58,33 +58,12 @@ llm = OpenAI(model="gpt-3.5-turbo-0613")
 agent = OpenAIAgent.from_tools(tools, llm=llm, verbose=True)
 ```
 
-See our usage pattern guide for more details.
-
-```{toctree}
----
-maxdepth: 1
----
-usage_pattern.md
-```
+See our [usage pattern guide](usage_pattern.md) for more details.
 
 ## Modules
 
-Learn more about our different agent types and use cases in our module guides below.
+Learn more about our different agent types and use cases in our [module guides](./modules.md).
 
-Also take a look at our [tools section](/module_guides/deploying/agents/tools/root.md)!
+We also have a [lower-level api guide](./agent_runner.md) for agent runenrs and workers.
 
-```{toctree}
----
-maxdepth: 2
----
-modules.md
-```
-
-```{toctree}
----
-maxdepth: 2
-hidden: true
----
-/module_guides/deploying/agents/tools/root.md
-/module_guides/deploying/agents/agent_runner.md
-```
+Also take a look at our [tools section](tools/index.md)!
diff --git a/docs/docs/module_guides/deploying/agents/modules.md b/docs/docs/module_guides/deploying/agents/modules.md
new file mode 100644
index 0000000000000000000000000000000000000000..5e94c02cd8ec02e1877392accdfc012d3f7f5e99
--- /dev/null
+++ b/docs/docs/module_guides/deploying/agents/modules.md
@@ -0,0 +1,44 @@
+# Module Guides
+
+These guide provide an overview of how to use our agent classes.
+
+For more detailed guides on how to use specific tools, check out our [tools module guides](tools/index.md).
+
+## OpenAI Agent
+
+- [OpneAI Agent](../../../examples/agent/openai_agent.ipynb)
+- [OpenAI Agent with Query Engine Tools](../../../examples/agent/openai_agent_with_query_engine.ipynb)
+- [Retrieval Augmented Agent](../../../examples/agent/openai_agent_retrieval.ipynb)
+- [OpenAI Agent Cookbook](../../../examples/agent/openai_agent_query_cookbook.ipynb)
+- [Query Planning](../../../examples/agent/openai_agent_query_plan.ipynb)
+- [Context Retrieval Agent](../../../examples/agent/openai_agent_context_retrieval.ipynb)
+- [Recursive Retriever Agents](../../../examples/query_engine/recursive_retriever_agents.ipynb)
+- [Multi-Document Agents](../../../examples/agent/multi_document_agents.ipynb)
+- [Agent Builder](../../../examples/agent/agent_builder.ipynb)
+- [Parallel Function Calling](../../../examples/agent/openai_agent_parallel_function_calling.ipynb)
+
+## [Beta] OpenAI Assistant Agent
+
+- [OpenAI Assistant](../../../examples/agent/openai_assistant_agent.ipynb)
+- [OpenAI Assistant Retrieval Benchmark](../../../examples/agent/openai_retrieval_benchmark.ipynb)
+- [Assistant Query Cookbook](../../../examples/agent/openai_assistant_query_cookbook.ipynb)
+
+## ReAct Agent
+
+- [ReAct Agent](../../../examples/agent/react_agent.ipynb)
+- [ReAct Agent with Query Engine Tools](../../../examples/agent/react_agent_with_query_engine.ipynb)
+
+## Additional Agents (available on LlamaHub)
+
+- [LLMCompiler Agent Cookbook](https://github.com/run-llama/llama-hub/blob/main/llama_hub/llama_packs/agents/llm_compiler/llm_compiler.ipynb)
+
+## Custom Agents
+
+- [Custom Agent](../../../examples/agent/custom_agent.ipynb)
+- [Query Pipeline Agent](../../../examples/agent/agent_runner/query_pipeline_agent.ipynb)
+
+## Lower-Level Agent API
+
+- [Agent Runner](../../../examples/agent/agent_runner/agent_runner.ipynb)
+- [Agent Runner RAG](../../../examples/agent/agent_runner/agent_runner_rag.ipynb)
+- [Controllable Agent Runner](../../../examples/agent/agent_runner/agent_runner_rag_controllable.ipynb)
diff --git a/docs/module_guides/deploying/agents/tools/root.md b/docs/docs/module_guides/deploying/agents/tools/index.md
similarity index 51%
rename from docs/module_guides/deploying/agents/tools/root.md
rename to docs/docs/module_guides/deploying/agents/tools/index.md
index 948b42654cd64dee14e8ce809e985b70cba595de..d3a84d661bd6698720a6c74977b4e10566656c91 100644
--- a/docs/module_guides/deploying/agents/tools/root.md
+++ b/docs/docs/module_guides/deploying/agents/tools/index.md
@@ -2,7 +2,7 @@
 
 ## Concept
 
-Having proper tool abstractions is at the core of building [data agents](/module_guides/deploying/agents/root.md). Defining a set of Tools is similar to defining any API interface, with the exception that these Tools are meant for agent rather than human use. We allow users to define both a **Tool** as well as a **ToolSpec** containing a series of functions under the hood.
+Having proper tool abstractions is at the core of building [data agents](../index.md). Defining a set of Tools is similar to defining any API interface, with the exception that these Tools are meant for agent rather than human use. We allow users to define both a **Tool** as well as a **ToolSpec** containing a series of functions under the hood.
 
 A Tool implements a very generic interface - simply define `__call__` and also return some basic metadata (name, description, function schema).
 
@@ -11,7 +11,7 @@ A Tool Spec defines a full API specification of any service that can be converte
 We offer a few different types of Tools:
 
 - `FunctionTool`: A function tool allows users to easily convert any user-defined function into a Tool. It can also auto-infer the function schema.
-- `QueryEngineTool`: A tool that wraps an existing [query engine](/module_guides/deploying/query_engine/root.md). Note: since our agent abstractions inherit from `BaseQueryEngine`, these tools can also wrap other agents.
+- `QueryEngineTool`: A tool that wraps an existing [query engine](../../query_engine/index.md). Note: since our agent abstractions inherit from `BaseQueryEngine`, these tools can also wrap other agents.
 
 We offer a rich set of Tools and Tool Specs through [LlamaHub](https://llamahub.ai/) 🦙.
 
@@ -33,39 +33,8 @@ tool_spec = GmailToolSpec()
 agent = OpenAIAgent.from_tools(tool_spec.to_tool_list(), verbose=True)
 ```
 
-See our Usage Pattern Guide for more details.
-
-```{toctree}
----
-maxdepth: 1
----
-usage_pattern.md
-```
+See our [Usage Pattern Guide](./usage_pattern.md) for more details.
 
 ## LlamaHub Tools Guide 🛠️
 
-Check out our guide for a full overview of the Tools/Tool Specs in LlamaHub!
-
-```{toctree}
----
-maxdepth: 1
----
-llamahub_tools_guide.md
-```
-
-<!-- We offer a rich set of Tool Specs that are offered through [LlamaHub](https://llamahub.ai/) 🦙.
-These tool specs represent an initial curated list of services that an agent can interact with and enrich its capability to perform different actions.
-
-![](/_static/data_connectors/llamahub.png) -->
-
-<!-- ## Module Guides
-```{toctree}
----
-maxdepth: 1
----
-modules.md
-```
-
-## Tool Example Notebooks
-
-Coming soon!  -->
+Check out [our guide](./llamahub_tools_guide.md) for a full overview of the Tools/Tool Specs in LlamaHub!
diff --git a/docs/module_guides/deploying/agents/tools/llamahub_tools_guide.md b/docs/docs/module_guides/deploying/agents/tools/llamahub_tools_guide.md
similarity index 98%
rename from docs/module_guides/deploying/agents/tools/llamahub_tools_guide.md
rename to docs/docs/module_guides/deploying/agents/tools/llamahub_tools_guide.md
index 66f18bd3cc1bb4273c5ea52e8b3b3351b73c9f51..6be00d2dd6d8b2f3856a52215c922c501c37a45c 100644
--- a/docs/module_guides/deploying/agents/tools/llamahub_tools_guide.md
+++ b/docs/docs/module_guides/deploying/agents/tools/llamahub_tools_guide.md
@@ -1,7 +1,7 @@
 # LlamaHub Tools Guide
 
 We offer a rich set of Tool Specs that are offered through [LlamaHub](https://llamahub.ai/) 🦙.
-![](/_static/data_connectors/llamahub.png)
+![](../../../../_static/data_connectors/llamahub.png)
 
 These tool specs represent an initial curated list of services that an agent can interact with and enrich its capability to perform different actions.
 
diff --git a/docs/module_guides/deploying/agents/tools/usage_pattern.md b/docs/docs/module_guides/deploying/agents/tools/usage_pattern.md
similarity index 100%
rename from docs/module_guides/deploying/agents/tools/usage_pattern.md
rename to docs/docs/module_guides/deploying/agents/tools/usage_pattern.md
diff --git a/docs/module_guides/deploying/agents/usage_pattern.md b/docs/docs/module_guides/deploying/agents/usage_pattern.md
similarity index 97%
rename from docs/module_guides/deploying/agents/usage_pattern.md
rename to docs/docs/module_guides/deploying/agents/usage_pattern.md
index b9b8b96661d78e905b799ac586320e4257cdbc9b..f95c431e10c9f1b9d54d94430a193469114aa086 100644
--- a/docs/module_guides/deploying/agents/usage_pattern.md
+++ b/docs/docs/module_guides/deploying/agents/usage_pattern.md
@@ -123,7 +123,7 @@ agent = AgentRunner(openai_step_engine)
 
 This is also the preferred format for custom agents.
 
-Check out the [lower-level agent guide](/module_guides/deploying/agents/agent_runner.md) for more details.
+Check out the [lower-level agent guide](agent_runner.md) for more details.
 
 ## Customizing your Agent
 
@@ -140,7 +140,7 @@ class MyAgentWorker(CustomSimpleAgentWorker):
     pass
 ```
 
-Check out our [Custom Agent Notebook Guide](/examples/agent/custom_agent.ipynb) for more details.
+Check out our [Custom Agent Notebook Guide](../../../examples/agent/custom_agent.ipynb) for more details.
 
 ## Advanced Concepts (for `OpenAIAgent`, in beta)
 
diff --git a/docs/module_guides/deploying/chat_engines/root.md b/docs/docs/module_guides/deploying/chat_engines/index.md
similarity index 76%
rename from docs/module_guides/deploying/chat_engines/root.md
rename to docs/docs/module_guides/deploying/chat_engines/index.md
index 73a7c68c9e1b8f56c1af7aba178d68e3a55b7793..85cc4ca705117f6e397f34407ef8b308080b51d9 100644
--- a/docs/module_guides/deploying/chat_engines/root.md
+++ b/docs/docs/module_guides/deploying/chat_engines/index.md
@@ -6,12 +6,11 @@ Chat engine is a high-level interface for having a conversation with your data
 (multiple back-and-forth instead of a single question & answer).
 Think ChatGPT, but augmented with your knowledge base.
 
-Conceptually, it is a **stateful** analogy of a [Query Engine](../query_engine/root.md).
+Conceptually, it is a **stateful** analogy of a [Query Engine](../query_engine/index.md).
 By keeping track of the conversation history, it can answer questions with past context in mind.
 
-```{tip}
-If you want to ask standalone question over your data (i.e. without keeping track of conversation history), use [Query Engine](../query_engine/root.md) instead.
-```
+!!! tip
+If you want to ask standalone question over your data (i.e. without keeping track of conversation history), use [Query Engine](../query_engine/index.md) instead.
 
 ## Usage Pattern
 
@@ -31,20 +30,8 @@ for token in streaming_response.response_gen:
     print(token, end="")
 ```
 
-```{toctree}
----
-maxdepth: 2
----
-usage_pattern.md
-```
+More details in the complete [usage pattern guide](./usage_pattern.md).
 
 ## Modules
 
-Below you can find corresponding tutorials to see the available chat engines in action.
-
-```{toctree}
----
-maxdepth: 2
----
-modules.md
-```
+In our [modules section](./modules.md), you can find corresponding tutorials to see the available chat engines in action.
diff --git a/docs/docs/module_guides/deploying/chat_engines/modules.md b/docs/docs/module_guides/deploying/chat_engines/modules.md
new file mode 100644
index 0000000000000000000000000000000000000000..5d514bf223b78bb6aec5f04d07eb8539aa351a2b
--- /dev/null
+++ b/docs/docs/module_guides/deploying/chat_engines/modules.md
@@ -0,0 +1,13 @@
+# Module Guides
+
+We provide a few simple implementations to start, with more sophisticated modes coming soon!
+
+More specifically, the `SimpleChatEngine` does not make use of a knowledge base,
+whereas all others make use of a query engine over knowledge base.
+
+- [ReAct Chat Engine](../../../examples/chat_engine/chat_engine_react.ipynb)
+- [OpenAI Chat Engine](../../../examples/chat_engine/chat_engine_openai.ipynb)
+- [Condense Question Chat Engine](../../../examples/chat_engine/chat_engine_condense_question.ipynb)
+- [Context Chat Engine](../../../examples/chat_engine/chat_engine_context.ipynb)
+- [Context Plus Condense Chat Engine](../../../examples/chat_engine/chat_engine_condense_plus_context.ipynb)
+- [Simple Chat Engine](../../../examples/chat_engine/chat_engine_repl.ipynb)
diff --git a/docs/module_guides/deploying/chat_engines/usage_pattern.md b/docs/docs/module_guides/deploying/chat_engines/usage_pattern.md
similarity index 94%
rename from docs/module_guides/deploying/chat_engines/usage_pattern.md
rename to docs/docs/module_guides/deploying/chat_engines/usage_pattern.md
index 5fcfc5b28c8c36f835b02fba4005dacab007fea9..7699c337d64787bf45690fbe6f3b7366fba11c7a 100644
--- a/docs/module_guides/deploying/chat_engines/usage_pattern.md
+++ b/docs/docs/module_guides/deploying/chat_engines/usage_pattern.md
@@ -8,9 +8,8 @@ Build a chat engine from index:
 chat_engine = index.as_chat_engine()
 ```
 
-```{tip}
-To learn how to build an index, see [Indexing](/module_guides/indexing/indexing.md)
-```
+!!! tip
+To learn how to build an index, see [Indexing](../../indexing/index_guide.md)
 
 Have a conversation with your data:
 
@@ -112,9 +111,8 @@ chat_engine = CondenseQuestionChatEngine.from_defaults(
 
 To enable streaming, you simply need to call the `stream_chat` endpoint instead of the `chat` endpoint.
 
-```{warning}
+!!! warning
 This somewhat inconsistent with query engine (where you pass in a `streaming=True` flag). We are working on making the behavior more consistent!
-```
 
 ```python
 chat_engine = index.as_chat_engine()
@@ -123,4 +121,4 @@ for token in streaming_response.response_gen:
     print(token, end="")
 ```
 
-See an [end-to-end tutorial](/examples/customization/streaming/chat_engine_condense_question_stream_response.ipynb)
+See an [end-to-end tutorial](../../../examples/customization/streaming/chat_engine_condense_question_stream_response.ipynb)
diff --git a/docs/module_guides/deploying/query_engine/root.md b/docs/docs/module_guides/deploying/query_engine/index.md
similarity index 71%
rename from docs/module_guides/deploying/query_engine/root.md
rename to docs/docs/module_guides/deploying/query_engine/index.md
index 268c9f4f3c67b0ab8d074df3548b118d1f3ff499..4ce3693abbb114c8a26eea80aa92580a95658f18 100644
--- a/docs/module_guides/deploying/query_engine/root.md
+++ b/docs/docs/module_guides/deploying/query_engine/index.md
@@ -5,12 +5,11 @@
 Query engine is a generic interface that allows you to ask question over your data.
 
 A query engine takes in a natural language query, and returns a rich response.
-It is most often (but not always) built on one or many [indexes](/module_guides/indexing/indexing.md) via [retrievers](/module_guides/querying/retriever/root.md).
+It is most often (but not always) built on one or many [indexes](../../indexing/index.md) via [retrievers](../../querying/retriever/index.md).
 You can compose multiple query engines to achieve more advanced capability.
 
-```{tip}
-If you want to have a conversation with your data (multiple back-and-forth instead of a single question & answer), take a look at [chat Engine](/module_guides/deploying/chat_engines/root.md)
-```
+!!! tip
+If you want to have a conversation with your data (multiple back-and-forth instead of a single question & answer), take a look at [Chat Engine](../chat_engines/index.md)
 
 ## Usage Pattern
 
@@ -29,27 +28,12 @@ streaming_response = query_engine.query("Who is Paul Graham.")
 streaming_response.print_response_stream()
 ```
 
-```{toctree}
----
-maxdepth: 2
----
-usage_pattern.md
-```
+See the full [usage pattern](./usage_pattern.md) for more details.
 
 ## Modules
 
-```{toctree}
----
-maxdepth: 3
----
-modules.md
-```
+Find all the modules in the [modules guide](./modules.md).
 
 ## Supporting Modules
 
-```{toctree}
----
-maxdepth: 2
----
-supporting_modules.md
-```
+There are also [supporting modules](./supporting_modules.md).
diff --git a/docs/docs/module_guides/deploying/query_engine/modules.md b/docs/docs/module_guides/deploying/query_engine/modules.md
new file mode 100644
index 0000000000000000000000000000000000000000..3a0115eb08ea3244f978a66efebabb8db2f734fb
--- /dev/null
+++ b/docs/docs/module_guides/deploying/query_engine/modules.md
@@ -0,0 +1,52 @@
+# Module Guides
+
+## Basic
+
+First, check out our [module guide on Indexes](../../indexing/modules.md) for in-depth guides for each index (vector index, summary index, knowledge graph index). Each index corresponds to a default query engine for that index.
+
+Then check out the rest of the sections below.
+
+- [Custom Query Engine](../../../examples/query_engine/custom_query_engine.ipynb)
+- [Retriever Query Engine](../../../examples/query_engine/CustomRetrievers.ipynb)
+
+## Structured & Semi-Structured Data
+
+- [Text-to-SQL](../../../examples/index_structs/struct_indices/SQLIndexDemo.ipynb)
+- [JSON Query Engine](../../../examples/query_engine/json_query_engine.ipynb)
+- [Pandas Query Engine](../../../examples/query_engine/pandas_query_engine.ipynb)
+- [JSONalyze Query Engine](../../../examples/query_engine/JSONalyze_query_engine.ipynb)
+- [Knowledge Graph Query Engine](../../../examples/query_engine/knowledge_graph_query_engine.ipynb)
+- [KG RAG Retriever](../../../examples/query_engine/knowledge_graph_rag_query_engine.ipynb)
+- [Multi-Docment Auto Retrieval](../../../examples/query_engine/multi_doc_auto_retrieval/multi_doc_auto_retrieval.ipynb)
+
+## Advanced
+
+- [Router Query Engine](../../../examples/query_engine/RouterQueryEngine.ipynb)
+- [Retriever Router Query Engine](../../../examples/query_engine/RetrieverRouterQueryEngine.ipynb)
+- [Joint QA Summary Engine](../../../examples/query_engine/JointQASummary.ipynb)
+- [Sub-Question Query Engine](../../../examples/query_engine/sub_question_query_engine.ipynb)
+- [MultiStep Query Engine](../../../examples/query_transformations/SimpleIndexDemo-multistep.ipynb)
+- [SQL Router](../../../examples/query_engine/SQLRouterQueryEngine.ipynb)
+- [SQL Auto-Vector](../../../examples/query_engine/SQLAutoVectorQueryEngine.ipynb)
+- [SQL Join Query Engien](../../../examples/query_engine/SQLJoinQueryEngine.ipynb)
+- [PGVector SQL Query Engien](../../../examples/query_engine/pgvector_sql_query_engine.ipynb)
+- [DuckDB Query Engine](../../../examples/index_structs/struct_indices/duckdb_sql_query.ipynb)
+- [Retry Query Engine](../../../examples/evaluation/RetryQuery.ipynb)
+- [Citation Query Engine](../../../examples/query_engine/citation_query_engine.ipynb)
+- [Recursive Table Retriever](../../../examples/query_engine/pdf_tables/recursive_retriever.ipynb)
+- [Tesla 10q Example](../../../examples/query_engine/sec_tables/tesla_10q_table.ipynb)
+- [Recursive Agents](../../../examples/query_engine/recursive_retriever_agents.ipynb)
+- [Ensemble Query Engine](../../../examples/query_engine/ensemble_query_engine.ipynb)
+
+### Advanced: Towards Multi-Document Querying/Analysis
+
+This specific subsection showcases modules that help with querying multiple documents.
+
+- [Sub-Question Query Engine](../../../examples/query_engine/sub_question_query_engine.ipynb)
+- [Recursive Agents](../../../examples/query_engine/recursive_retriever_agents.ipynb)
+- [Multi-Document Agents](../../../examples/agent/multi_document_agents.ipynb)
+- [Improved Multi-Document Agents](../../../examples/agent/multi_document_agents-v1.ipynb)
+
+## Experimental
+
+- [FLARE Query Engine](../../../examples/query_engine/flare_query_engine.ipynb)
diff --git a/docs/module_guides/deploying/query_engine/response_modes.md b/docs/docs/module_guides/deploying/query_engine/response_modes.md
similarity index 97%
rename from docs/module_guides/deploying/query_engine/response_modes.md
rename to docs/docs/module_guides/deploying/query_engine/response_modes.md
index 8d1c5f0ee3d81c2fb8b9c3787e8e073a92529649..b37a463d35c14412c1cc3c083db5849fe3546f17 100644
--- a/docs/module_guides/deploying/query_engine/response_modes.md
+++ b/docs/docs/module_guides/deploying/query_engine/response_modes.md
@@ -52,4 +52,4 @@ Right now, we support the following options:
 - `compact_accumulate`: The same as accumulate, but will "compact" each LLM prompt similar to
   `compact`, and run the same query against each text chunk.
 
-See [Response Synthesizer](/module_guides/querying/response_synthesizers/root.md) to learn more.
+See [Response Synthesizer](../../querying/response_synthesizers/index.md) to learn more.
diff --git a/docs/module_guides/deploying/query_engine/streaming.md b/docs/docs/module_guides/deploying/query_engine/streaming.md
similarity index 94%
rename from docs/module_guides/deploying/query_engine/streaming.md
rename to docs/docs/module_guides/deploying/query_engine/streaming.md
index bc6afd11a449b45101d824f14efaa24ee1fca2db..f1ea31222f5293c15f9309b5e8fdc7b60fceb400 100644
--- a/docs/module_guides/deploying/query_engine/streaming.md
+++ b/docs/docs/module_guides/deploying/query_engine/streaming.md
@@ -56,4 +56,4 @@ Alternatively, if you just want to print the text as they arrive:
 streaming_response.print_response_stream()
 ```
 
-See an [end-to-end example](/examples/customization/streaming/SimpleIndexDemo-streaming.ipynb)
+See an [end-to-end example](../../../examples/customization/streaming/SimpleIndexDemo-streaming.ipynb)
diff --git a/docs/docs/module_guides/deploying/query_engine/supporting_modules.md b/docs/docs/module_guides/deploying/query_engine/supporting_modules.md
new file mode 100644
index 0000000000000000000000000000000000000000..e33362e052dbd20d533a14930fd8fb6fd8f0a1d6
--- /dev/null
+++ b/docs/docs/module_guides/deploying/query_engine/supporting_modules.md
@@ -0,0 +1,3 @@
+# Supporting Modules
+
+- [Query Transformations](../../../optimizing/advanced_retrieval/query_transformations.md)
diff --git a/docs/module_guides/deploying/query_engine/usage_pattern.md b/docs/docs/module_guides/deploying/query_engine/usage_pattern.md
similarity index 86%
rename from docs/module_guides/deploying/query_engine/usage_pattern.md
rename to docs/docs/module_guides/deploying/query_engine/usage_pattern.md
index 78a6c2fbbbb6730806eb8a8240e681688d7f9d89..c4567aa2916d3908475e97028312ad7ccfa9b96f 100644
--- a/docs/module_guides/deploying/query_engine/usage_pattern.md
+++ b/docs/docs/module_guides/deploying/query_engine/usage_pattern.md
@@ -8,9 +8,8 @@ Build a query engine from index:
 query_engine = index.as_query_engine()
 ```
 
-```{tip}
-To learn how to build an index, see [Indexing](/module_guides/indexing/indexing.md)
-```
+!!! tip
+To learn how to build an index, see [Indexing](../../indexing/index.md)
 
 Ask a question over your data
 
@@ -35,15 +34,6 @@ query_engine = index.as_query_engine(
 
 See [**Response Modes**](./response_modes.md) for a full list of response modes and what they do.
 
-```{toctree}
----
-maxdepth: 1
-hidden:
----
-response_modes.md
-streaming.md
-```
-
 ### Low-Level Composition API
 
 You can use the low-level composition API if you need more granular control.
@@ -95,8 +85,8 @@ streaming_response = query_engine.query(
 streaming_response.print_response_stream()
 ```
 
-- Read the full [streaming guide](/module_guides/deploying/query_engine/streaming.md)
-- See an [end-to-end example](/examples/customization/streaming/SimpleIndexDemo-streaming.ipynb)
+- Read the full [streaming guide](streaming.md)
+- See an [end-to-end example](../../../examples/customization/streaming/SimpleIndexDemo-streaming.ipynb)
 
 ## Defining a Custom Query Engine
 
@@ -121,4 +111,4 @@ class RAGQueryEngine(CustomQueryEngine):
         return response_obj
 ```
 
-See the [Custom Query Engine guide](/examples/query_engine/custom_query_engine.ipynb) for more details.
+See the [Custom Query Engine guide](../../../examples/query_engine/custom_query_engine.ipynb) for more details.
diff --git a/docs/module_guides/evaluating/contributing_llamadatasets.md b/docs/docs/module_guides/evaluating/contributing_llamadatasets.md
similarity index 91%
rename from docs/module_guides/evaluating/contributing_llamadatasets.md
rename to docs/docs/module_guides/evaluating/contributing_llamadatasets.md
index 485149c4a07c6d23b3374522184dd36d7b73dabc..69070b34fa86205567406e2c0eaadbb58f27ff4f 100644
--- a/docs/module_guides/evaluating/contributing_llamadatasets.md
+++ b/docs/docs/module_guides/evaluating/contributing_llamadatasets.md
@@ -21,10 +21,6 @@ The general process for contributing any of our other llama-datasets such as the
 `LabelledEvaluatorDataset` is the same as for the `LabelledRagDataset` previously
 described. Submission templates for these other datasets are coming soon!
 
-```{toctree}
----
-maxdepth: 1
----
+## Submission Example
 
-/examples/llama_dataset/ragdataset_submission_template.ipynb
-```
+Read the full [submission example Notebook](../../examples/llama_dataset/ragdataset_submission_template.ipynb).
diff --git a/docs/module_guides/evaluating/evaluating_evaluators_with_llamadatasets.md b/docs/docs/module_guides/evaluating/evaluating_evaluators_with_llamadatasets.md
similarity index 94%
rename from docs/module_guides/evaluating/evaluating_evaluators_with_llamadatasets.md
rename to docs/docs/module_guides/evaluating/evaluating_evaluators_with_llamadatasets.md
index 6135efb827242a26ac849a811fd26ceab2e05697..48d75b05a3a9951a67b52b423e6527fb07921ebb 100644
--- a/docs/module_guides/evaluating/evaluating_evaluators_with_llamadatasets.md
+++ b/docs/docs/module_guides/evaluating/evaluating_evaluators_with_llamadatasets.md
@@ -59,11 +59,5 @@ equipped to perform the pairwise evaluation task — i.e., should be a `Pairwise
 To see these datasets in action, be sure to checkout the notebooks listed below
 that benchmark LLM evaluators on slightly adapted versions of the MT-Bench dataset.
 
-```{toctree}
----
-maxdepth: 1
----
-
-/examples/evaluation/mt_bench_single_grading.ipynb
-/examples/evaluation/mt_bench_human_judgement.ipynb
-```
+- [MTBench Single Grading](../../examples/evaluation/mt_bench_single_grading.ipynb)
+- [MTBench Human Judge](../../examples/evaluation/mt_bench_human_judgement.ipynb)
diff --git a/docs/module_guides/evaluating/evaluating_with_llamadatasets.md b/docs/docs/module_guides/evaluating/evaluating_with_llamadatasets.md
similarity index 96%
rename from docs/module_guides/evaluating/evaluating_with_llamadatasets.md
rename to docs/docs/module_guides/evaluating/evaluating_with_llamadatasets.md
index 1ef55c34705b1f3c54485d60eddd640ed1c5ee7d..8f21902742d890707e79b9d19fe42fbb7f5adc09 100644
--- a/docs/module_guides/evaluating/evaluating_with_llamadatasets.md
+++ b/docs/docs/module_guides/evaluating/evaluating_with_llamadatasets.md
@@ -141,11 +141,7 @@ This page hopefully has served as a good starting point for you to create, downl
 and use `LlamaDataset`'s for building robust and performant LLM Applications. To
 learn more, we recommend reading the notebook guides provided below.
 
-```{toctree}
----
-maxdepth: 1
----
+## Resources
 
-/examples/llama_dataset/labelled-rag-datasets.ipynb
-/examples/llama_dataset/downloading_llama_datasets.ipynb
-```
+- [Labelled RAG datasets](../../examples/llama_dataset/labelled-rag-datasets.ipynb)
+- [Downloading Llama datasets](../../examples/llama_dataset/downloading_llama_datasets.ipynb)
diff --git a/docs/module_guides/evaluating/root.md b/docs/docs/module_guides/evaluating/index.md
similarity index 89%
rename from docs/module_guides/evaluating/root.md
rename to docs/docs/module_guides/evaluating/index.md
index bcf7bed3b857adc4e93e4df0b74f0c38b6a9e96b..a8c01f84a60b353739a2cc8c129c455f9db8f8a6 100644
--- a/docs/module_guides/evaluating/root.md
+++ b/docs/docs/module_guides/evaluating/index.md
@@ -50,7 +50,7 @@ The core retrieval evaluation steps revolve around the following:
 We also integrate with community evaluation tools.
 
 - [UpTrain](https://github.com/uptrain-ai/uptrain)
-- [Tonic Validate](/community/integrations/tonicvalidate.md)(Includes Web UI for visualizing results)
+- [Tonic Validate](../../community/integrations/tonicvalidate.md)(Includes Web UI for visualizing results)
 - [DeepEval](https://github.com/confident-ai/deepeval)
 - [Ragas](https://github.com/explodinggradients/ragas/blob/main/docs/howtos/integrations/llamaindex.ipynb)
 
@@ -58,35 +58,17 @@ We also integrate with community evaluation tools.
 
 For full usage details, see the usage pattern below.
 
-```{toctree}
----
-maxdepth: 1
----
-usage_pattern.md
-usage_pattern_retrieval.md
-```
+- [Query Eval Usage Pattern](usage_pattern.md)
+- [Retrieval Eval Usage Pattern](usage_pattern_retrieval.md)
 
 ## Modules
 
-Notebooks with usage of these components can be found below.
-
-```{toctree}
----
-maxdepth: 1
----
-modules.md
-```
+Notebooks with usage of these components can be found in the [module guides](./modules.md).
 
 ## Evaluating with `LabelledRagDataset`'s
 
 For details on how to perform evaluation of a RAG system with various evaluation
 datasets, called `LabelledRagDataset`'s see below:
 
-```{toctree}
----
-maxdepth: 1
----
-
-evaluating_with_llamadatasets.md
-contributing_llamadatasets.md
-```
+- [Evaluating](evaluating_with_llamadatasets.md)
+- [Contributing](contributing_llamadatasets.md)
diff --git a/docs/docs/module_guides/evaluating/modules.md b/docs/docs/module_guides/evaluating/modules.md
new file mode 100644
index 0000000000000000000000000000000000000000..0b0afab3797bdabd48b6782f8c30c40c39cb17d1
--- /dev/null
+++ b/docs/docs/module_guides/evaluating/modules.md
@@ -0,0 +1,21 @@
+# Modules
+
+Notebooks with usage of these components can be found below.
+
+## Response Evaluation
+
+- [Faithfulness](../../examples/evaluation/faithfulness_eval.ipynb)
+- [Relevancy](../../examples/evaluation/relevancy_eval.ipynb)
+- [Answer and Context Relevancy](../../examples/evaluation/answer_and_context_relevancy.ipynb)
+- [Deepeval Integration](../../examples/evaluation/Deepeval.ipynb)
+- [Guideline Eval](../../examples/evaluation/guideline_eval.ipynb)
+- [Correctness Eval](../../examples/evaluation/correctness_eval.ipynb)
+- [Semantic Eval](../../examples/evaluation/semantic_similarity_eval.ipynb)
+- [Question Generation](../../examples/evaluation/QuestionGeneration.ipynb)
+- [Batch Eval](../../examples/evaluation/batch_eval.ipynb)
+- [Multi-Modal RAG eval](../../examples/evaluation/multi_modal/multi_modal_rag_evaluation.ipynb)
+- [Uptrain Integration](../../examples/evaluation/UpTrain.ipynb)
+
+## Retrieval Evaluation
+
+- [Retriever Eval](../../examples/evaluation/retrieval/retriever_eval.ipynb)
diff --git a/docs/module_guides/evaluating/usage_pattern.md b/docs/docs/module_guides/evaluating/usage_pattern.md
similarity index 97%
rename from docs/module_guides/evaluating/usage_pattern.md
rename to docs/docs/module_guides/evaluating/usage_pattern.md
index a45e4742aa3a1f3c61761fb89e79f3f6d40c5a36..f8586922541acf4113bdcfe51f28d0ebad05f715 100644
--- a/docs/module_guides/evaluating/usage_pattern.md
+++ b/docs/docs/module_guides/evaluating/usage_pattern.md
@@ -69,7 +69,7 @@ eval_result = evaluator.evaluate_response(response=response)
 print(str(eval_result.passing))
 ```
 
-![](/_static/evaluation/eval_response_context.png)
+![](../../_static/evaluation/eval_response_context.png)
 
 You can also choose to evaluate each source context individually:
 
@@ -130,7 +130,7 @@ eval_result = evaluator.evaluate_response(query=query, response=response)
 print(str(eval_result))
 ```
 
-![](/_static/evaluation/eval_query_response_context.png)
+![](../../_static/evaluation/eval_query_response_context.png)
 
 Similarly, you can also evaluate on a specific source node.
 
@@ -162,7 +162,7 @@ for source_node in response.source_nodes:
     print(str(eval_result.passing))
 ```
 
-![](/_static/evaluation/eval_query_sources.png)
+![](../../_static/evaluation/eval_query_sources.png)
 
 ## Question Generation
 
diff --git a/docs/module_guides/evaluating/usage_pattern_retrieval.md b/docs/docs/module_guides/evaluating/usage_pattern_retrieval.md
similarity index 100%
rename from docs/module_guides/evaluating/usage_pattern_retrieval.md
rename to docs/docs/module_guides/evaluating/usage_pattern_retrieval.md
diff --git a/docs/docs/module_guides/index.md b/docs/docs/module_guides/index.md
new file mode 100644
index 0000000000000000000000000000000000000000..be87b382526ef0e021562a7d760349640eb423ab
--- /dev/null
+++ b/docs/docs/module_guides/index.md
@@ -0,0 +1,3 @@
+# Component Guides
+
+Use the navigation on the left to explore specific module guides!
diff --git a/docs/module_guides/indexing/document_management.md b/docs/docs/module_guides/indexing/document_management.md
similarity index 96%
rename from docs/module_guides/indexing/document_management.md
rename to docs/docs/module_guides/indexing/document_management.md
index c8ee5018e83cbe61e8109dafb5d8d2a97a5e11a0..79bda05388e9507d5238125e122c0ce1bf87f75a 100644
--- a/docs/module_guides/indexing/document_management.md
+++ b/docs/docs/module_guides/indexing/document_management.md
@@ -94,7 +94,7 @@ print(refreshed_docs)
 
 This is most useful when you are reading from a directory that is constantly updating with new information.
 
-To automatically set the doc `id_` when using the `SimpleDirectoryReader`, you can set the `filename_as_id` flag. You can learn more about [customzing Documents](/module_guides/loading/documents_and_nodes/usage_documents.md).
+To automatically set the doc `id_` when using the `SimpleDirectoryReader`, you can set the `filename_as_id` flag. You can learn more about [customzing Documents](../loading/documents_and_nodes/usage_documents.md).
 
 ## Document Tracking
 
@@ -112,4 +112,4 @@ print(index.ref_doc_info)
 
 Each entry in the output shows the ingested doc `id_`s as keys, and their associated `node_ids` of the nodes they were split into.
 
-Lastly, the original `metadata` dictionary of each input document is also tracked. You can read more about the `metadata` attribute in [Customizing Documents](/module_guides/loading/documents_and_nodes/usage_documents.md).
+Lastly, the original `metadata` dictionary of each input document is also tracked. You can read more about the `metadata` attribute in [Customizing Documents](../loading/documents_and_nodes/usage_documents.md).
diff --git a/docs/docs/module_guides/indexing/index.md b/docs/docs/module_guides/indexing/index.md
new file mode 100644
index 0000000000000000000000000000000000000000..1e48eb7420437477cadae15b0255a6661888fd83
--- /dev/null
+++ b/docs/docs/module_guides/indexing/index.md
@@ -0,0 +1,20 @@
+# Indexing
+
+## Concept
+
+An `Index` is a data structure that allows us to quickly retrieve relevant context for a user query.
+For LlamaIndex, it's the core foundation for retrieval-augmented generation (RAG) use-cases.
+
+At a high-level, `Indexes` are built from [Documents](../loading/documents_and_nodes/index.md).
+They are used to build [Query Engines](../deploying/query_engine/index.md) and [Chat Engines](../deploying/chat_engines/index.md)
+which enables question & answer and chat over your data.
+
+Under the hood, `Indexes` store data in `Node` objects (which represent chunks of the original documents), and expose a [Retriever](../querying/retriever/index.md) interface that supports additional configuration and automation.
+
+The most common index by far is the `VectorStoreIndex`; the best place to start is the [VectorStoreIndex usage guide](vector_store_index.md).
+
+For other indexes, check out our guide to [how each index works](index_guide.md) to help you decide which one matches your use-case.
+
+## Other Index resources
+
+See the [modules guide](./modules.md).
diff --git a/docs/module_guides/indexing/index_guide.md b/docs/docs/module_guides/indexing/index_guide.md
similarity index 76%
rename from docs/module_guides/indexing/index_guide.md
rename to docs/docs/module_guides/indexing/index_guide.md
index f4a1433b13777a10f44f7416c772279b44a7871a..e29ea494abeade0fa6d6455e4901b58c5b16dca6 100644
--- a/docs/module_guides/indexing/index_guide.md
+++ b/docs/docs/module_guides/indexing/index_guide.md
@@ -6,44 +6,44 @@ Some terminology:
 
 - **Node**: Corresponds to a chunk of text from a Document. LlamaIndex takes in Document objects and internally parses/chunks them into Node objects.
 - **Response Synthesis**: Our module which synthesizes a response given the retrieved Node. You can see how to
-  [specify different response modes](/module_guides/deploying/query_engine/response_modes.md).
+  [specify different response modes](../deploying/query_engine/response_modes.md).
 
 ## Summary Index (formerly List Index)
 
 The summary index simply stores Nodes as a sequential chain.
 
-![](/_static/indices/list.png)
+![](../../_static/indices/list.png)
 
 ### Querying
 
 During query time, if no other query parameters are specified, LlamaIndex simply loads all Nodes in the list into
 our Response Synthesis module.
 
-![](/_static/indices/list_query.png)
+![](../../_static/indices/list_query.png)
 
 The summary index does offer numerous ways of querying a summary index, from an embedding-based query which
 will fetch the top-k neighbors, or with the addition of a keyword filter, as seen below:
 
-![](/_static/indices/list_filter_query.png)
+![](../../_static/indices/list_filter_query.png)
 
 ## Vector Store Index
 
-The vector store index stores each Node and a corresponding embedding in a [Vector Store](vector-store-index).
+The vector store index stores each Node and a corresponding embedding in a [Vector Store](../../community/integrations/vector_stores.md#using-a-vector-store-as-an-index).
 
-![](/_static/indices/vector_store.png)
+![](../../_static/indices/vector_store.png)
 
 ### Querying
 
 Querying a vector store index involves fetching the top-k most similar Nodes, and passing
 those into our Response Synthesis module.
 
-![](/_static/indices/vector_store_query.png)
+![](../../_static/indices/vector_store_query.png)
 
 ## Tree Index
 
 The tree index builds a hierarchical tree from a set of Nodes (which become leaf nodes in this tree).
 
-![](/_static/indices/tree.png)
+![](../../_static/indices/tree.png)
 
 ### Querying
 
@@ -52,14 +52,14 @@ to leaf nodes. By default, (`child_branch_factor=1`), a query
 chooses one child node given a parent node. If `child_branch_factor=2`, a query
 chooses two child nodes per level.
 
-![](/_static/indices/tree_query.png)
+![](../../_static/indices/tree_query.png)
 
 ## Keyword Table Index
 
 The keyword table index extracts keywords from each Node and builds a mapping from
 each keyword to the corresponding Nodes of that keyword.
 
-![](/_static/indices/keyword.png)
+![](../../_static/indices/keyword.png)
 
 ### Querying
 
@@ -67,4 +67,4 @@ During query time, we extract relevant keywords from the query, and match those
 Node keywords to fetch the corresponding Nodes. The extracted Nodes are passed to our
 Response Synthesis module.
 
-![](/_static/indices/keyword_query.png)
+![](../../_static/indices/keyword_query.png)
diff --git a/docs/module_guides/indexing/llama_cloud_index.md b/docs/docs/module_guides/indexing/llama_cloud_index.md
similarity index 100%
rename from docs/module_guides/indexing/llama_cloud_index.md
rename to docs/docs/module_guides/indexing/llama_cloud_index.md
diff --git a/docs/module_guides/indexing/metadata_extraction.md b/docs/docs/module_guides/indexing/metadata_extraction.md
similarity index 89%
rename from docs/module_guides/indexing/metadata_extraction.md
rename to docs/docs/module_guides/indexing/metadata_extraction.md
index 3e6034e7daf2f0a094266fd38575d4a1a50a9675..06fc5a9a7ecf0c37434332db4671d82ac387f0f9 100644
--- a/docs/module_guides/indexing/metadata_extraction.md
+++ b/docs/docs/module_guides/indexing/metadata_extraction.md
@@ -85,13 +85,8 @@ In a more advanced example, it can also make use of an `llm` to extract features
 
 Below you will find guides and tutorials for various metadata extractors.
 
-```{toctree}
----
-maxdepth: 1
----
-/examples/metadata_extraction/MetadataExtractionSEC.ipynb
-/examples/metadata_extraction/MetadataExtraction_LLMSurvey.ipynb
-/examples/metadata_extraction/EntityExtractionClimate.ipynb
-/examples/metadata_extraction/MarvinMetadataExtractorDemo.ipynb
-/examples/metadata_extraction/PydanticExtractor.ipynb
-```
+- [SEC Documents Metadata Extraction](../../examples/metadata_extraction/MetadataExtractionSEC.ipynb)
+- [LLM Survey Extraction](../../examples/metadata_extraction/MetadataExtraction_LLMSurvey.ipynb)
+- [Entity Extraction](../../examples/metadata_extraction/EntityExtractionClimate.ipynb)
+- [Marvin Metadata Extraction](../../examples/metadata_extraction/MarvinMetadataExtractorDemo.ipynb)
+- [Pydantic Metadata Extraction](../../examples/metadata_extraction/PydanticExtractor.ipynb)
diff --git a/docs/docs/module_guides/indexing/modules.md b/docs/docs/module_guides/indexing/modules.md
new file mode 100644
index 0000000000000000000000000000000000000000..f9f07e858ff7f7ed3f676c006fc3295319ecd6d2
--- /dev/null
+++ b/docs/docs/module_guides/indexing/modules.md
@@ -0,0 +1,15 @@
+# Module Guides
+
+- [Vector Store Index](./vector_store_index.md)
+- [Summary Index](./index_guide.md)
+- [Tree Index](./index_guide.md)
+- [Keyword Table Index](./index_guide.md)
+- [Knowledge Graph Index](../../examples/index_structs/knowledge_graph/KnowledgeGraphDemo.ipynb)
+- [Knowledge Graph Query Engine](../../examples/query_engine/knowledge_graph_query_engine.ipynb)
+- [Knoweldge Graph RAG Query Engine](../../examples/query_engine/knowledge_graph_rag_query_engine.ipynb)
+- [REBEL + Knowledge Graph Index](https://colab.research.google.com/drive/1G6pcR0pXvSkdMQlAK_P-IrYgo-_staxd?usp=sharing)
+- [REBEL + Wikipedia Filtering](../../examples/index_structs/knowledge_graph/knowledge_graph2.ipynb)
+- [SQL Query Engine](../../examples/index_structs/struct_indices/SQLIndexDemo.ipynb)
+- [DuckDB Query Engine](../../examples/index_structs/struct_indices/duckdb_sql_query.ipynb)
+- [Document Summary Index](../../examples/index_structs/doc_summary/DocSummary.ipynb)
+- [Object Index](../../examples/objects/object_index.ipynb)
diff --git a/docs/module_guides/indexing/vector_store_guide.ipynb b/docs/docs/module_guides/indexing/vector_store_guide.ipynb
similarity index 100%
rename from docs/module_guides/indexing/vector_store_guide.ipynb
rename to docs/docs/module_guides/indexing/vector_store_guide.ipynb
diff --git a/docs/module_guides/indexing/vector_store_index.md b/docs/docs/module_guides/indexing/vector_store_index.md
similarity index 75%
rename from docs/module_guides/indexing/vector_store_index.md
rename to docs/docs/module_guides/indexing/vector_store_index.md
index 15b86f43c6531655a599ddd2acb350e6b0c341f8..02aeb6e7bde483758d2944e1d3788f1b24c8f616 100644
--- a/docs/module_guides/indexing/vector_store_index.md
+++ b/docs/docs/module_guides/indexing/vector_store_index.md
@@ -2,7 +2,7 @@
 
 Vector Stores are a key component of retrieval-augmented generation (RAG) and so you will end up using them in nearly every application you make using LlamaIndex, either directly or indirectly.
 
-Vector stores accept a list of [`Node` objects](/module_guides/loading/documents_and_nodes/root.md) and build an index from them
+Vector stores accept a list of [`Node` objects](../loading/documents_and_nodes/index.md) and build an index from them
 
 ## Loading data into the index
 
@@ -20,21 +20,19 @@ documents = SimpleDirectoryReader(
 index = VectorStoreIndex.from_documents(documents)
 ```
 
-```{tip}
+!!! tip
 If you are using `from_documents` on the command line, it can be convenient to pass `show_progress=True` to display a progress bar during index construction.
-```
 
-When you use `from_documents`, your Documents are split into chunks and parsed into [`Node` objects](/module_guides/loading/documents_and_nodes/root.md), lightweight abstractions over text strings that keep track of metadata and relationships.
+When you use `from_documents`, your Documents are split into chunks and parsed into [`Node` objects](../loading/documents_and_nodes/index.md), lightweight abstractions over text strings that keep track of metadata and relationships.
 
-For more on how to load documents, see [Understanding Loading](/module_guides/loading/loading.md).
+For more on how to load documents, see [Understanding Loading](../loading/index.md).
 
 By default, VectorStoreIndex stores everything in memory. See [Using Vector Stores](#using-vector-stores) below for more on how to use persistent vector stores.
 
-```{tip}
+!!! tip
 By default, the `VectorStoreIndex` will generate and insert vectors in batches of 2048 nodes. If you are memory constrained (or have a surplus of memory), you can modify this by passing `insert_batch_size=2048` with your desired batch size.
 
-This is especially helpful when you are inserting into a remotely hosted vector database.
-```
+    This is especially helpful when you are inserting into a remotely hosted vector database.
 
 ### Using the ingestion pipeline to create nodes
 
@@ -60,13 +58,12 @@ pipeline = IngestionPipeline(
 nodes = pipeline.run(documents=[Document.example()])
 ```
 
-```{tip}
-You can learn more about [how to use the ingestion pipeline](/module_guides/loading/ingestion_pipeline/root.md).
-```
+!!! tip
+You can learn more about [how to use the ingestion pipeline](../loading/ingestion_pipeline/index.md).
 
 ### Creating and managing nodes directly
 
-If you want total control over your index you can [create and define nodes manually](/module_guides/loading/documents_and_nodes/usage_nodes.md) and pass them directly to the index constructor:
+If you want total control over your index you can [create and define nodes manually](../loading/documents_and_nodes/usage_nodes.md) and pass them directly to the index constructor:
 
 ```python
 from llama_index.core.schema import TextNode
@@ -81,17 +78,12 @@ index = VectorStoreIndex(nodes)
 
 When managing your index directly, you will want to deal with data sources that change over time. `Index` classes have **insertion**, **deletion**, **update**, and **refresh** operations and you can learn more about them below:
 
-```{toctree}
----
-maxdepth: 1
----
-metadata_extraction.md
-document_management.md
-```
+- [Metadata Extraction](metadata_extraction.md)
+- [Document Management](document_management.md)
 
 ## Storing the vector index
 
-LlamaIndex supports [dozens of vector stores](/module_guides/storing/vector_stores.md). You can specify which one to use by passing in a `StorageContext`, on which in turn you specify the `vector_store` argument, as in this example using Pinecone:
+LlamaIndex supports [dozens of vector stores](../storing/vector_stores.md). You can specify which one to use by passing in a `StorageContext`, on which in turn you specify the `vector_store` argument, as in this example using Pinecone:
 
 ```python
 import pinecone
@@ -124,15 +116,7 @@ index = VectorStoreIndex.from_documents(
 
 For more examples of how to use VectorStoreIndex, see our [vector store index usage examples notebook](./vector_store_guide.ipynb).
 
-For examples of how to use VectorStoreIndex with specific vector stores, check out our [vector stores](/module_guides/storing/vector_stores.md) section under Loading.
-
-```{toctree}
----
-maxdepth: 1
-hidden: True
----
-vector_store_guide.ipynb
-```
+For examples of how to use VectorStoreIndex with specific vector stores, check out our [vector stores](../storing/vector_stores.md) section under Loading.
 
 ## Composable Retrieval
 
@@ -163,12 +147,4 @@ retriever = index.as_retreiver(verbose=True)
 
 If the index node containing the query engine is retrieved, the query engine will be ran and the resulting response returned as a node.
 
-For more details, checkout the guide below.
-
-```{toctree}
----
-maxdepth: 1
-hidden: True
----
-/examples/retrievers/composable_retrievers.ipynb
-```
+For more details, checkout [the guide](../../examples/retrievers/composable_retrievers.ipynb)
diff --git a/docs/module_guides/loading/connector/root.md b/docs/docs/module_guides/loading/connector/index.md
similarity index 73%
rename from docs/module_guides/loading/connector/root.md
rename to docs/docs/module_guides/loading/connector/index.md
index 80ac49ad6c5d9b5b5bfcfdd494d6237e4775bb97..0c9aa02575f25c4706c67d114cd51ecc33665b38 100644
--- a/docs/module_guides/loading/connector/root.md
+++ b/docs/docs/module_guides/loading/connector/index.md
@@ -4,16 +4,15 @@
 
 A data connector (aka `Reader`) ingest data from different data sources and data formats into a simple `Document` representation (text and simple metadata).
 
-```{tip}
-Once you've ingested your data, you can build an [Index](/modules/indexing/indexing.md) on top, ask questions using a [Query Engine](/module_guides/deploying/query_engine/root.md), and have a conversation using a [Chat Engine](/module_guides/deploying/chat_engines/root.md).
-```
+!!! tip
+Once you've ingested your data, you can build an [Index](../../indexing/index.md) on top, ask questions using a [Query Engine](../../deploying/query_engine/index.md), and have a conversation using a [Chat Engine](../../deploying/chat_engines/index.md).
 
 ## LlamaHub
 
 Our data connectors are offered through [LlamaHub](https://llamahub.ai/) 🦙.
 LlamaHub is an open-source repository containing data loaders that you can easily plug and play into any LlamaIndex application.
 
-![](/_static/data_connectors/llamahub.png)
+![](../../../_static/data_connectors/llamahub.png)
 
 ## Usage Pattern
 
@@ -28,12 +27,7 @@ loader = GoogleDocsReader()
 documents = loader.load_data(document_ids=[...])
 ```
 
-```{toctree}
----
-maxdepth: 2
----
-usage_pattern.md
-```
+See the full [usage pattern guide](./usage_pattern.md) for more details.
 
 ## Modules
 
@@ -46,11 +40,4 @@ Some sample data connectors:
 - [Discord](https://discord.com/developers/docs/intro) (`DiscordReader`)
 - [Apify Actors](https://llamahub.ai/l/apify-actor) (`ApifyActor`). Can crawl the web, scrape webpages, extract text content, download files including `.pdf`, `.jpg`, `.png`, `.docx`, etc.
 
-See below for detailed guides.
-
-```{toctree}
----
-maxdepth: 2
----
-modules.rst
-```
+See the [modules guide](./modules.md) for more details.
diff --git a/docs/module_guides/loading/connector/llama_parse.md b/docs/docs/module_guides/loading/connector/llama_parse.md
similarity index 100%
rename from docs/module_guides/loading/connector/llama_parse.md
rename to docs/docs/module_guides/loading/connector/llama_parse.md
diff --git a/docs/docs/module_guides/loading/connector/modules.md b/docs/docs/module_guides/loading/connector/modules.md
new file mode 100644
index 0000000000000000000000000000000000000000..a4e2b156a173ab2c193789762a34d7c4f2c1045b
--- /dev/null
+++ b/docs/docs/module_guides/loading/connector/modules.md
@@ -0,0 +1,30 @@
+# Module Guides
+
+- [Simple Directory Reader](../../../examples/data_connectors/simple_directory_reader.ipynb)
+- [Psychic Reader](../../../examples/data_connectors/PsychicDemo.ipynb)
+- [Deeplake Reader](../../../examples/data_connectors/DeepLakeReader.ipynb)
+- [Qdrant Reader](../../../examples/data_connectors/QdrantDemo.ipynb)
+- [Discord Reader](../../../examples/data_connectors/DiscordDemo.ipynb)
+- [MongoDB Reader](../../../examples/data_connectors/MongoDemo.ipynb)
+- [Chroma Reader](../../../examples/data_connectors/ChromaDemo.ipynb)
+- [MyScale Reader](../../../examples/data_connectors/MyScaleReaderDemo.ipynb)
+- [FAISS Reader](../../../examples/data_connectors/FaissDemo.ipynb)
+- [Obsidian Reader](../../../examples/data_connectors/ObsidianReaderDemo.ipynb)
+- [Slack Reader](../../../examples/data_connectors/SlackDemo.ipynb)
+- [Webpage Reader](../../../examples/data_connectors/WebPageDemo.ipynb)
+- [Pinecone Reader](../../../examples/data_connectors/PineconeDemo.ipynb)
+- [Pathway Reader](../../../examples/data_connectors/PathwayReaderDemo.ipynb)
+- [MBox Reader](../../../examples/data_connectors/MboxReaderDemo.ipynb)
+- [Milvus Reader](../../../examples/data_connectors/MilvusReaderDemo.ipynb)
+- [Notion Reader](../../../examples/data_connectors/NotionDemo.ipynb)
+- [Github Reader](../../../examples/data_connectors/GithubRepositoryReaderDemo.ipynb)
+- [Google Docs Reader](../../../examples/data_connectors/GoogleDocsDemo.ipynb)
+- [Database Reader](../../../examples/data_connectors/DatabaseReaderDemo.ipynb)
+- [Twitter Reader](../../../examples/data_connectors/TwitterDemo.ipynb)
+- [Weaviate Reader](../../../examples/data_connectors/WeaviateDemo.ipynb)
+- [Make Reader](../../../examples/data_connectors/MakeDemo.ipynb)
+- [Deplot Reader](../../../examples/data_connectors/deplot/DeplotReader.ipynb)
+
+```
+
+```
diff --git a/docs/module_guides/loading/connector/usage_pattern.md b/docs/docs/module_guides/loading/connector/usage_pattern.md
similarity index 100%
rename from docs/module_guides/loading/connector/usage_pattern.md
rename to docs/docs/module_guides/loading/connector/usage_pattern.md
diff --git a/docs/module_guides/loading/documents_and_nodes/root.md b/docs/docs/module_guides/loading/documents_and_nodes/index.md
similarity index 93%
rename from docs/module_guides/loading/documents_and_nodes/root.md
rename to docs/docs/module_guides/loading/documents_and_nodes/index.md
index 08c087fdd167d89ee6e28e0acd7f4dda071311a2..b9a2cde29bc150fa880d1870c64523de9e3959eb 100644
--- a/docs/module_guides/loading/documents_and_nodes/root.md
+++ b/docs/docs/module_guides/loading/documents_and_nodes/index.md
@@ -51,11 +51,6 @@ index = VectorStoreIndex(nodes)
 
 Take a look at our in-depth guides for more details on how to use Documents/Nodes.
 
-```{toctree}
----
-maxdepth: 1
----
-usage_documents.md
-usage_nodes.md
-../ingestion_pipeline/transformations.md
-```
+- [Using Documents](usage_documents.md)
+- [Using Nodes](usage_nodes.md)
+- [Ingestion Pipeline](../ingestion_pipeline/transformations.md)
diff --git a/docs/module_guides/loading/documents_and_nodes/usage_documents.md b/docs/docs/module_guides/loading/documents_and_nodes/usage_documents.md
similarity index 90%
rename from docs/module_guides/loading/documents_and_nodes/usage_documents.md
rename to docs/docs/module_guides/loading/documents_and_nodes/usage_documents.md
index 188767b13f2790414634aa03801be01ec1e4dfd1..5aea5486d84d09f270c793a59536240261f8810a 100644
--- a/docs/module_guides/loading/documents_and_nodes/usage_documents.md
+++ b/docs/docs/module_guides/loading/documents_and_nodes/usage_documents.md
@@ -4,7 +4,7 @@
 
 Documents can either be created automatically via data loaders, or constructed manually.
 
-By default, all of our [data loaders](/module_guides/loading/connector/root.md) (including those offered on LlamaHub) return `Document` objects through the `load_data` function.
+By default, all of our [data loaders](../connector/index.md) (including those offered on LlamaHub) return `Document` objects through the `load_data` function.
 
 ```python
 from llama_index.core import SimpleDirectoryReader
@@ -69,7 +69,7 @@ documents = SimpleDirectoryReader(
 
 ### Customizing the id
 
-As detailed in the section [Document Management](/module_guides/indexing/document_management.md), the `doc_id` is used to enable efficient refreshing of documents in the index. When using the `SimpleDirectoryReader`, you can automatically set the doc `doc_id` to be the full path to each document:
+As detailed in the section [Document Management](../../indexing/document_management.md), the `doc_id` is used to enable efficient refreshing of documents in the index. When using the `SimpleDirectoryReader`, you can automatically set the doc `doc_id` to be the full path to each document:
 
 ```python
 from llama_index.core import SimpleDirectoryReader
@@ -173,13 +173,4 @@ print(
 
 ### Advanced - Automatic Metadata Extraction
 
-We have initial examples of using LLMs themselves to perform metadata extraction.
-
-Take a look here!
-
-```{toctree}
----
-maxdepth: 1
----
-/module_guides/loading/documents_and_nodes/usage_metadata_extractor.md
-```
+We have [initial examples](./usage_metadata_extractor.md) of using LLMs themselves to perform metadata extraction.
diff --git a/docs/module_guides/loading/documents_and_nodes/usage_metadata_extractor.md b/docs/docs/module_guides/loading/documents_and_nodes/usage_metadata_extractor.md
similarity index 74%
rename from docs/module_guides/loading/documents_and_nodes/usage_metadata_extractor.md
rename to docs/docs/module_guides/loading/documents_and_nodes/usage_metadata_extractor.md
index dc79ae3acba6f48bac01a9d836eca9a07f2af373..a6651b33b6853f1c4f0987cb8490f884551e448c 100644
--- a/docs/module_guides/loading/documents_and_nodes/usage_metadata_extractor.md
+++ b/docs/docs/module_guides/loading/documents_and_nodes/usage_metadata_extractor.md
@@ -48,14 +48,10 @@ index = VectorStoreIndex.from_documents(
 )
 ```
 
-```{toctree}
----
-caption: Metadata Extraction Guides
-maxdepth: 1
----
-/examples/metadata_extraction/MetadataExtractionSEC.ipynb
-/examples/metadata_extraction/MetadataExtraction_LLMSurvey.ipynb
-/examples/metadata_extraction/EntityExtractionClimate.ipynb
-/examples/metadata_extraction/MarvinMetadataExtractorDemo.ipynb
-/examples/metadata_extraction/PydanticExtractor.ipynb
-```
+## Resources
+
+- [SEC Documents Metadata Extraction](../../../examples/metadata_extraction/MetadataExtractionSEC.ipynb)
+- [LLM Survey Extraction](../../../examples/metadata_extraction/MetadataExtraction_LLMSurvey.ipynb)
+- [Entity Extraction](../../../examples/metadata_extraction/EntityExtractionClimate.ipynb)
+- [Marvin Metadata Extraction](../../../examples/metadata_extraction/MarvinMetadataExtractorDemo.ipynb)
+- [Pydantic Metadata Extraction](../../../examples/metadata_extraction/PydanticExtractor.ipynb)
diff --git a/docs/module_guides/loading/documents_and_nodes/usage_nodes.md b/docs/docs/module_guides/loading/documents_and_nodes/usage_nodes.md
similarity index 100%
rename from docs/module_guides/loading/documents_and_nodes/usage_nodes.md
rename to docs/docs/module_guides/loading/documents_and_nodes/usage_nodes.md
diff --git a/docs/docs/module_guides/loading/index.md b/docs/docs/module_guides/loading/index.md
new file mode 100644
index 0000000000000000000000000000000000000000..3c59e954477b96d4c8ef57891fc813cf4a770611
--- /dev/null
+++ b/docs/docs/module_guides/loading/index.md
@@ -0,0 +1,26 @@
+# Loading Data
+
+The key to data ingestion in LlamaIndex is loading and transformations. Once you have loaded Documents, you can process them via transformations and output Nodes.
+
+Once you have [learned about the basics of loading data](../../understanding/loading/loading.md) in our Understanding section, you can read on to learn more about:
+
+### Loading
+
+- [SimpleDirectoryReader](simpledirectoryreader.md), our built-in loader for loading all sorts of file types from a local directory
+- [LlamaParse](connector/llama_parse.md), LlamaIndex's official tool for PDF parsing, available as a managed API.
+- [LlamaHub](connector/index.md), our registry of hundreds of data loading libraries to ingest data from any source
+
+### Transformations
+
+This includes common operations like splitting text.
+
+- [Node Parser Usage Pattern](node_parsers/index.md), showing you how to use our node parsers
+- [Node Parser Modules](node_parsers/modules.md), showing our text splitters (sentence, token, HTML, JSON) and other parser modules.
+
+### Putting it all Together
+
+- [The ingestion pipeline](ingestion_pipeline/index.md) which allows you to set up a repeatable, cache-optimized process for loading data.
+
+### Abstractions
+
+- [Document and Node objects](documents_and_nodes/index.md) and how to customize them for more advanced use cases
diff --git a/docs/module_guides/loading/ingestion_pipeline/root.md b/docs/docs/module_guides/loading/ingestion_pipeline/index.md
similarity index 88%
rename from docs/module_guides/loading/ingestion_pipeline/root.md
rename to docs/docs/module_guides/loading/ingestion_pipeline/index.md
index 330e67f050a3ac22f0638b29d55cd210fadb07fe..9858f0101a50a009d275b145d53f541464e85a3d 100644
--- a/docs/module_guides/loading/ingestion_pipeline/root.md
+++ b/docs/docs/module_guides/loading/ingestion_pipeline/index.md
@@ -2,7 +2,7 @@
 
 An `IngestionPipeline` uses a concept of `Transformations` that are applied to input data. These `Transformations` are applied to your input data, and the resulting nodes are either returned or inserted into a vector database (if given). Each node+transformation pair is cached, so that subsequent runs (if the cache is persisted) with the same node+transformation combination can use the cached result and save you time.
 
-To see an interactive example of `IngestionPipeline` being put in use, check out the [RAG CLI](/use_cases/q_and_a/rag_cli.md).
+To see an interactive example of `IngestionPipeline` being put in use, check out the [RAG CLI](../../../use_cases/q_and_a/rag_cli.md).
 
 ## Usage Pattern
 
@@ -181,9 +181,9 @@ pipeline = IngestionPipeline(
 )
 ```
 
-A full walkthrough is found in our [demo notebook](/examples/ingestion/document_management_pipeline.ipynb).
+A full walkthrough is found in our [demo notebook](../../../examples/ingestion/document_management_pipeline.ipynb).
 
-Also check out another guide using [Redis as our entire ingestion stack](/examples/ingestion/redis_ingestion_pipeline.ipynb).
+Also check out another guide using [Redis as our entire ingestion stack](../../../examples/ingestion/redis_ingestion_pipeline.ipynb).
 
 ## Parallel Processing
 
@@ -205,15 +205,10 @@ pipeline.run(documents=[...], num_workers=4)
 
 ## Modules
 
-```{toctree}
----
-maxdepth: 2
----
-transformations.md
-/examples/ingestion/advanced_ingestion_pipeline.ipynb
-/examples/ingestion/async_ingestion_pipeline.ipynb
-/examples/ingestion/document_management_pipeline.ipynb
-/examples/ingestion/redis_ingestion_pipeline.ipynb
-/examples/ingestion/ingestion_gdrive.ipynb
-/examples/ingestion/parallel_execution_ingestion_pipeline.ipynb
-```
+- [Transformations Guide](transformations.md)
+- [Advanced Ingestion Pipeline](../../../examples/ingestion/advanced_ingestion_pipeline.ipynb)
+- [Async Ingestion Pipeline](../../../examples/ingestion/async_ingestion_pipeline.ipynb)
+- [Document Management Pipeline](../../../examples/ingestion/document_management_pipeline.ipynb)
+- [Redis Ingestion Pipeline](../../../examples/ingestion/redis_ingestion_pipeline.ipynb)
+- [Google Drive Ingestion Pipeline](../../../examples/ingestion/ingestion_gdrive.ipynb)
+- [Parallel Execution Pipeline](../../../examples/ingestion/parallel_execution_ingestion_pipeline.ipynb)s
diff --git a/docs/module_guides/loading/ingestion_pipeline/transformations.md b/docs/docs/module_guides/loading/ingestion_pipeline/transformations.md
similarity index 87%
rename from docs/module_guides/loading/ingestion_pipeline/transformations.md
rename to docs/docs/module_guides/loading/ingestion_pipeline/transformations.md
index 8390cbb9a6609b00ad679e93215a8467beffa08b..945556c52ede7e60e504797cf3f6fd8ca72ea488 100644
--- a/docs/module_guides/loading/ingestion_pipeline/transformations.md
+++ b/docs/docs/module_guides/loading/ingestion_pipeline/transformations.md
@@ -4,14 +4,14 @@ A transformation is something that takes a list of nodes as an input, and return
 
 Currently, the following components are `Transformation` objects:
 
-- [`TextSplitter`](text_splitters)
-- [`NodeParser`](/module_guides/loading/node_parsers/modules.md)
-- [`MetadataExtractor`](/module_guides/loading/documents_and_nodes/usage_metadata_extractor.md)
-- `Embeddings`model (check our [list of supported embeddings](list_of_embeddings))
+- [`TextSplitter`](../../../module_guides/loading/node_parsers/modules.md#text-splitters)
+- [`NodeParser`](../node_parsers/modules.md)
+- [`MetadataExtractor`](../documents_and_nodes/usage_metadata_extractor.md)
+- `Embeddings`model (check our [list of supported embeddings](../../models/embeddings.md#list-of-supported-embeddings))
 
 ## Usage Pattern
 
-While transformations are best used with with an [`IngestionPipeline`](./root.md), they can also be used directly.
+While transformations are best used with with an [`IngestionPipeline`](./index.md), they can also be used directly.
 
 ```python
 from llama_index.core.node_parser import SentenceSplitter
@@ -57,8 +57,6 @@ index = VectorStoreIndex.from_documents(
 )
 ```
 
-(custom-transformations)=
-
 ## Custom Transformations
 
 You can implement any transformation yourself by implementing the base class.
diff --git a/docs/module_guides/loading/node_parsers/root.md b/docs/docs/module_guides/loading/node_parsers/index.md
similarity index 94%
rename from docs/module_guides/loading/node_parsers/root.md
rename to docs/docs/module_guides/loading/node_parsers/index.md
index 707d2baebc26ca36f9dd4c3a9d0d9ced86cccf9b..fdacaa57234ac784192ea6e96219f5a450e733e6 100644
--- a/docs/module_guides/loading/node_parsers/root.md
+++ b/docs/docs/module_guides/loading/node_parsers/index.md
@@ -1,6 +1,6 @@
 # Node Parser Usage Pattern
 
-Node parsers are a simple abstraction that take a list of documents, and chunk them into `Node` objects, such that each node is a specific chunk of the parent document. When a document is broken into nodes, all of it's attributes are inherited to the children nodes (i.e. `metadata`, text and metadata templates, etc.). You can read more about `Node` and `Document` properties [here](/module_guides/loading/documents_and_nodes/root.md).
+Node parsers are a simple abstraction that take a list of documents, and chunk them into `Node` objects, such that each node is a specific chunk of the parent document. When a document is broken into nodes, all of it's attributes are inherited to the children nodes (i.e. `metadata`, text and metadata templates, etc.). You can read more about `Node` and `Document` properties [here](../documents_and_nodes/index.md).
 
 ## Getting Started
 
@@ -59,9 +59,4 @@ index = VectorStoreIndex.from_documents(
 
 ## Modules
 
-```{toctree}
----
-maxdepth: 2
----
-modules.md
-```
+See the full [modules guide](./modules.md).
diff --git a/docs/module_guides/loading/node_parsers/modules.md b/docs/docs/module_guides/loading/node_parsers/modules.md
similarity index 95%
rename from docs/module_guides/loading/node_parsers/modules.md
rename to docs/docs/module_guides/loading/node_parsers/modules.md
index 2fc319edd6edf6e9b8631afef0fc3d3341a2c3d8..a5d54e93e4d9f2317d0a341e36ef89bb5adb802e 100644
--- a/docs/module_guides/loading/node_parsers/modules.md
+++ b/docs/docs/module_guides/loading/node_parsers/modules.md
@@ -58,8 +58,6 @@ parser = MarkdownNodeParser()
 nodes = parser.get_nodes_from_documents(markdown_docs)
 ```
 
-(text_splitters)=
-
 ## Text-Splitters
 
 ### CodeSplitter
@@ -128,7 +126,7 @@ node_parser = SentenceWindowNodeParser.from_defaults(
 )
 ```
 
-A full example can be found [here in combination with the `MetadataReplacementNodePostProcessor`](/examples/node_postprocessor/MetadataReplacementDemo.ipynb).
+A full example can be found [here in combination with the `MetadataReplacementNodePostProcessor`](../../../examples/node_postprocessor/MetadataReplacementDemo.ipynb).
 
 ### SemanticSplitterNodeParser
 
@@ -155,7 +153,7 @@ splitter = SemanticSplitterNodeParser(
 )
 ```
 
-A full example can be found in our [guide on using the `SemanticSplitterNodeParser`](/examples/node_parsers/semantic_chunking.ipynb).
+A full example can be found in our [guide on using the `SemanticSplitterNodeParser`](../../../examples/node_parsers/semantic_chunking.ipynb).
 
 ### TokenTextSplitter
 
@@ -188,4 +186,4 @@ node_parser = HierarchicalNodeParser.from_defaults(
 )
 ```
 
-A full example can be found [here in combination with the `AutoMergingRetriever`](/examples/retrievers/auto_merging_retriever.ipynb).
+A full example can be found [here in combination with the `AutoMergingRetriever`](../../../examples/retrievers/auto_merging_retriever.ipynb).
diff --git a/docs/module_guides/loading/simpledirectoryreader.md b/docs/docs/module_guides/loading/simpledirectoryreader.md
similarity index 100%
rename from docs/module_guides/loading/simpledirectoryreader.md
rename to docs/docs/module_guides/loading/simpledirectoryreader.md
diff --git a/docs/module_guides/models/embeddings.md b/docs/docs/module_guides/models/embeddings.md
similarity index 84%
rename from docs/module_guides/models/embeddings.md
rename to docs/docs/module_guides/models/embeddings.md
index a0cde838baea0394642a47fc354fa880ae68fcbf..82d47ecafc2bcea946d30ddfc644e91b233b1bb9 100644
--- a/docs/module_guides/models/embeddings.md
+++ b/docs/docs/module_guides/models/embeddings.md
@@ -147,8 +147,6 @@ from llama_index.core import Settings
 Settings.embed_model = HuggingFaceBgeEmbeddings(model_name="BAAI/bge-base-en")
 ```
 
-(custom_embeddings)=
-
 ### Custom Embedding Model
 
 If you wanted to use embeddings not offered by LlamaIndex or Langchain, you can also extend our base embeddings class and implement your own!
@@ -203,36 +201,29 @@ embeddings = embed_model.get_text_embedding(
 )
 ```
 
-(list_of_embeddings)=
-
 ## List of supported embeddings
 
 We support integrations with OpenAI, Azure, and anything LangChain offers.
 
-```{toctree}
----
-maxdepth: 1
----
-/examples/customization/llms/AzureOpenAI.ipynb
-/examples/embeddings/clarifai.ipynb
-/examples/embeddings/cohereai.ipynb
-/examples/embeddings/custom_embeddings.ipynb
-/examples/embeddings/dashscope_embeddings.ipynb
-/examples/embeddings/elasticsearch.ipynb
-/examples/embeddings/fastembed.ipynb
-/examples/embeddings/google_palm.ipynb
-/examples/embeddings/gradient.ipynb
-/examples/embeddings/Anyscale.ipynb
-/examples/embeddings/huggingface.ipynb
-/examples/embeddings/jinaai_embeddings.ipynb
-/examples/embeddings/Langchain.ipynb
-/examples/embeddings/llm_rails.ipynb
-/examples/embeddings/mistralai.ipynb
-/examples/embeddings/OpenAI.ipynb
-/examples/embeddings/sagemaker_embedding_endpoint.ipynb
-/examples/embeddings/text_embedding_inference.ipynb
-/examples/embeddings/together.ipynb
-/examples/embeddings/voyageai.ipynb
-/examples/embeddings/nomic.ipynb
-/examples/embeddings/fireworks.ipynb
-```
+- [Azure OpenAI](../../examples/customization/llms/AzureOpenAI.ipynb)
+- [CalrifAI](../../examples/embeddings/clarifai.ipynb)
+- [Cohere](../../examples/embeddings/cohereai.ipynb)
+- [Custom](../../examples/embeddings/custom_embeddings.ipynb)
+- [Dashscope](../../examples/embeddings/dashscope_embeddings.ipynb)
+- [ElasticSearch](../../examples/embeddings/elasticsearch.ipynb)
+- [FastEmbed](../../examples/embeddings/fastembed.ipynb)
+- [Google Palm](../../examples/embeddings/google_palm.ipynb)
+- [Gradient](../../examples/embeddings/gradient.ipynb)
+- [Anyscale](../../examples/embeddings/Anyscale.ipynb)
+- [Huggingface](../../examples/embeddings/huggingface.ipynb)
+- [JinaAI](../../examples/embeddings/jinaai_embeddings.ipynb)
+- [Langchain](../../examples/embeddings/Langchain.ipynb)
+- [LLM Rails](../../examples/embeddings/llm_rails.ipynb)
+- [MistralAI](../../examples/embeddings/mistralai.ipynb)
+- [OpenAI](../../examples/embeddings/OpenAI.ipynb)
+- [Sagemaker](../../examples/embeddings/sagemaker_embedding_endpoint.ipynb)
+- [Text Embedding Inference](../../examples/embeddings/text_embedding_inference.ipynb)
+- [TogetherAI](../../examples/embeddings/together.ipynb)
+- [VoyageAI](../../examples/embeddings/voyageai.ipynb)
+- [Nomic](../../examples/embeddings/nomic.ipynb)
+- [Fireworks AI](../../examples/embeddings/fireworks.ipynb)
diff --git a/docs/docs/module_guides/models/index.md b/docs/docs/module_guides/models/index.md
new file mode 100644
index 0000000000000000000000000000000000000000..2b1cd9fc723729fb62e156324143f99c75482674
--- /dev/null
+++ b/docs/docs/module_guides/models/index.md
@@ -0,0 +1,10 @@
+# Models
+
+There are a few primary ways you interact with models in LlamaIndex:
+
+- [LLMs](./llms.md)
+- [Embeddings](./embeddings.md)
+
+Experimental
+
+- [MultiModal](./multi_modal.md)
diff --git a/docs/module_guides/models/llms.md b/docs/docs/module_guides/models/llms.md
similarity index 96%
rename from docs/module_guides/models/llms.md
rename to docs/docs/module_guides/models/llms.md
index 2fc4c5f7ad68d389686964fbae987f02d6e3356e..96937a31ac1e81b44b71b9ccf860057984ab864d 100644
--- a/docs/module_guides/models/llms.md
+++ b/docs/docs/module_guides/models/llms.md
@@ -33,13 +33,7 @@ resp = OpenAI().complete("Paul Graham is ")
 print(resp)
 ```
 
-```{toctree}
----
-maxdepth: 1
----
-llms/usage_standalone.md
-llms/usage_custom.md
-```
+Find more details on [standalone usage](./llms/usage_standalone.md) or [custom usage](./llms/usage_custom.md).
 
 ## A Note on Tokenization
 
@@ -118,21 +112,11 @@ Since open source LLMs require large amounts of resources, the quantization is r
 
 We support integrations with OpenAI, Hugging Face, PaLM, and more.
 
-```{toctree}
----
-maxdepth: 2
----
-llms/modules.md
-```
+See the full [list of modules](./llms/modules.md).
 
 ## Further reading
 
-```{toctree}
----
-maxdepth: 1
----
-/module_guides/models/embeddings.md
-/module_guides/models/prompts.md
-/module_guides/models/llms/local.md
-Run Llama2 locally <https://replicate.com/blog/run-llama-locally>
-```
+- [Embeddings](./embeddings.md)
+- [Prompts](./prompts/index.md)
+- [Local LLMs](./llms/local.md)
+- [Running Llama2 Locally](https://replicate.com/blog/run-llama-locally)
diff --git a/docs/module_guides/models/llms/local.md b/docs/docs/module_guides/models/llms/local.md
similarity index 100%
rename from docs/module_guides/models/llms/local.md
rename to docs/docs/module_guides/models/llms/local.md
diff --git a/docs/docs/module_guides/models/llms/modules.md b/docs/docs/module_guides/models/llms/modules.md
new file mode 100644
index 0000000000000000000000000000000000000000..0de149370bfd51c995625b4c600aae2714f8a987
--- /dev/null
+++ b/docs/docs/module_guides/models/llms/modules.md
@@ -0,0 +1,55 @@
+# Available LLM integrations
+
+We support integrations with OpenAI, Anthropic, Hugging Face, PaLM, and more.
+
+- [AI21](../../../examples/llm/ai21.ipynb)
+- [Anthropic](../../../examples/llm/anthropic.ipynb)
+- [AnyScale](../../../examples/llm/anyscale.ipynb)
+- [Azure OpenAI](../../../examples/llm/azure_openai.ipynb)
+- [Bedrock](../../../examples/llm/bedrock.ipynb)
+- [Clarifai](../../../examples/llm/clarifai.ipynb)
+- [Cohere](../../../examples/llm/cohere.ipynb)
+- [Dashscope](../../../examples/llm/dashscope.ipynb)
+- [Dashscope Multi-Modal](../../../examples/multi_modal/dashscope_multi_modal.ipynb)
+- [EverlyAI](../../../examples/llm/everlyai.ipynb)
+- [Fireworks](../../../examples/llm/fireworks.ipynb)
+- [Friendli](../../../examples/llm/friendli.ipynb)
+- [Gradient](../../../examples/llm/gradient_base_model.ipynb)
+- [Gradient Model Adapter](../../../examples/llm/gradient_model_adapter.ipynb)
+- [Groq](../../../examples/llm/groq.ipynb)
+- [HuggingFace Camel-7B](../../../examples/customization/llms/SimpleIndexDemo-Huggingface_camel.ipynb)
+- [HuggingFace StableLM](../../../examples/customization/llms/SimpleIndexDemo-Huggingface_stablelm.ipynb)
+- [HuggingFace Llama2](../../../examples/vector_stores/SimpleIndexDemoLlama-Local.ipynb)
+- [Konko](../../../examples/llm/konko.ipynb)
+- [LangChain](../../../examples/llm/langchain.ipynb)
+- [LiteLLM](../../../examples/llm/litellm.ipynb)
+- [Llama API](../../../examples/llm/llama_api.ipynb)
+- [Llama CPP](../../../examples/llm/llama_2_llama_cpp.ipynb)
+- [LocalAI](../../../examples/llm/localai.ipynb)
+- [MariTalk](../../../examples/llm/maritalk.ipynb)
+- [MistralAI](../../../examples/llm/mistralai.ipynb)
+- [Modelscope](../../../examples/llm/modelscope.ipynb)
+- [MonsterAPI](../../../examples/llm/monsterapi.ipynb)
+- [MyMagic](../../../examples/llm/mymagic.ipynb)
+- [NeutrinoAI](../../../examples/llm/neutrino.ipynb)
+- [Nvidia TensorRT-LLM](../../../examples/llm/nvidia_tensorrt.ipynb)
+- [Nvidia Triton](../../../examples/llm/nvidia_triton.ipynb)
+- [Ollama](../../../examples/llm/ollama.ipynb)
+- [OpenAI](../../../examples/llm/openai.ipynb)
+- [OpenLLM](../../../examples/llm/openllm.ipynb)
+- [OpenRouter](../../../examples/llm/openrouter.ipynb)
+- [PaLM](../../../examples/llm/palm.ipynb)
+- [Perplexity](../../../examples/llm/perplexity.ipynb)
+- [PremAI](../../../examples/llm/premai.ipynb)
+- [Portkey](../../../examples/llm/portkey.ipynb)
+- [Predibase](../../../examples/llm/predibase.ipynb)
+- [Replicate Llama2](../../../examples/llm/llama_2.ipynb)
+- [Replicate Vicuna](../../../examples/llm/vicuna.ipynb)
+- [Replicate Vector Index Llama2](../../../examples/vector_stores/SimpleIndexDemoLlama2.ipynb)
+- [RunGPT](../../../examples/llm/rungpt.ipynb)
+- [SageMaker](../../../examples/llm/sagemaker_endpoint_llm.ipynb)
+- [Solar](../../../examples/llm/solar.ipynb)
+- [Together.ai](../../../examples/llm/together.ipynb)
+- [Vertex](../../../examples/llm/vertex.ipynb)
+- [vLLM](../../../examples/llm/vllm.ipynb)
+- [Xorbits Inference](../../../examples/llm/xinference_local_deployment.ipynb)
diff --git a/docs/module_guides/models/llms/usage_custom.md b/docs/docs/module_guides/models/llms/usage_custom.md
similarity index 97%
rename from docs/module_guides/models/llms/usage_custom.md
rename to docs/docs/module_guides/models/llms/usage_custom.md
index b9a61334eff5617a206204faf672f9cacc341ea2..0f517a6b4d1de1f17ce42be578c9bb71d6f3645b 100644
--- a/docs/module_guides/models/llms/usage_custom.md
+++ b/docs/docs/module_guides/models/llms/usage_custom.md
@@ -149,14 +149,12 @@ HuggingFaceLLM(
 )
 ```
 
-A full API reference can be found [here](../../../api_reference/llms/huggingface.rst).
+A full API reference can be found [here](../../../api_reference/llms/huggingface.md).
 
 Several example notebooks are also listed below:
 
-- [StableLM](/examples/customization/llms/SimpleIndexDemo-Huggingface_stablelm.ipynb)
-- [Camel](/examples/customization/llms/SimpleIndexDemo-Huggingface_camel.ipynb)
-
-(using-custom-llm-advanced)=
+- [StableLM](../../../examples/customization/llms/SimpleIndexDemo-Huggingface_stablelm.ipynb)
+- [Camel](../../../examples/customization/llms/SimpleIndexDemo-Huggingface_camel.ipynb)
 
 ## Example: Using a Custom LLM Model - Advanced
 
@@ -236,4 +234,4 @@ The decorator is optional, but provides observability via callbacks on the LLM c
 
 Note that you may have to adjust the internal prompts to get good performance. Even then, you should be using a sufficiently large LLM to ensure it's capable of handling the complex queries that LlamaIndex uses internally, so your mileage may vary.
 
-A list of all default internal prompts is available [here](https://github.com/run-llama/llama_index/blob/main/llama_index/prompts/default_prompts.py), and chat-specific prompts are listed [here](https://github.com/run-llama/llama_index/blob/main/llama_index/prompts/chat_prompts.py). You can also implement [your own custom prompts](/module_guides/models/prompts.md).
+A list of all default internal prompts is available [here](https://github.com/run-llama/llama_index/blob/main/llama_index/prompts/default_prompts.py), and chat-specific prompts are listed [here](https://github.com/run-llama/llama_index/blob/main/llama_index/prompts/chat_prompts.py). You can also implement [your own custom prompts](../prompts/index.md).
diff --git a/docs/module_guides/models/llms/usage_standalone.md b/docs/docs/module_guides/models/llms/usage_standalone.md
similarity index 100%
rename from docs/module_guides/models/llms/usage_standalone.md
rename to docs/docs/module_guides/models/llms/usage_standalone.md
diff --git a/docs/module_guides/models/multi_modal.md b/docs/docs/module_guides/models/multi_modal.md
similarity index 65%
rename from docs/module_guides/models/multi_modal.md
rename to docs/docs/module_guides/models/multi_modal.md
index 5e92d596423f3f8ba03d144cd08c87574e2568eb..c6614235fe0f108e47a18e3cd8aa6a5d5fbd5582 100644
--- a/docs/module_guides/models/multi_modal.md
+++ b/docs/docs/module_guides/models/multi_modal.md
@@ -124,67 +124,51 @@ The tables below attempt to show the **initial** steps with various LlamaIndex f
 
 These notebooks serve as examples how to leverage and integrate Multi-Modal LLM model, Multi-Modal embeddings, Multi-Modal vector stores, Retriever, Query engine for composing Multi-Modal Retrieval Augmented Generation (RAG) orchestration.
 
-| Multi-Modal<br>Vision Models                                                       | Single<br>Image<br>Reasoning | Multiple<br>Images<br>Reasoning | Image<br>Embeddings | Simple<br>Query<br>Engine | Pydantic<br>Structured<br>Output |
-| ---------------------------------------------------------------------------------- | ---------------------------- | ------------------------------- | ------------------- | ------------------------- | -------------------------------- |
-| [GPT4V](/examples/multi_modal/gpt4v_multi_modal_retrieval.ipynb)<br>(OpenAI API)   | ✅                           | ✅                              | 🛑                  | ✅                        | ✅                               |
-| [GPT4V-Azure](/examples/multi_modal/azure_openai_multi_modal.ipynb)<br>(Azure API) | ✅                           | ✅                              | 🛑                  | ✅                        | ✅                               |
-| [Gemini](/examples/multi_modal/gemini.ipynb)<br>(Google)                           | ✅                           | ✅                              | 🛑                  | ✅                        | ✅                               |
-| [CLIP](/examples/multi_modal/image_to_image_retrieval.ipynb)<br>(Local host)       | 🛑                           | 🛑                              | ✅                  | 🛑                        | 🛑                               |
-| [LLaVa](/examples/multi_modal/llava_multi_modal_tesla_10q.ipynb)<br>(replicate)    | ✅                           | 🛑                              | 🛑                  | ✅                        | ⚠️                               |
-| [Fuyu-8B](/examples/multi_modal/replicate_multi_modal.ipynb)<br>(replicate)        | ✅                           | 🛑                              | 🛑                  | ✅                        | ⚠️                               |
-| [ImageBind<br>](https://imagebind.metademolab.com/)[To integrate]                  | 🛑                           | 🛑                              | ✅                  | 🛑                        | 🛑                               |
-| [MiniGPT-4<br>](/examples/multi_modal/replicate_multi_modal.ipynb)                 | ✅                           | 🛑                              | 🛑                  | ✅                        | ⚠️                               |
-| [CogVLM<br>](https://github.com/THUDM/CogVLM)                                      | ✅                           | 🛑                              | 🛑                  | ✅                        | ⚠️                               |
-| [Qwen-VL<br>](https://arxiv.org/abs/2308.12966)[To integrate]                      | ✅                           | 🛑                              | 🛑                  | ✅                        | ⚠️                               |
+| Multi-Modal<br>Vision Models                                                            | Single<br>Image<br>Reasoning | Multiple<br>Images<br>Reasoning | Image<br>Embeddings | Simple<br>Query<br>Engine | Pydantic<br>Structured<br>Output |
+| --------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------- | ------------------- | ------------------------- | -------------------------------- |
+| [GPT4V](../../examples/multi_modal/gpt4v_multi_modal_retrieval.ipynb)<br>(OpenAI API)   | ✅                           | ✅                              | 🛑                  | ✅                        | ✅                               |
+| [GPT4V-Azure](../../examples/multi_modal/azure_openai_multi_modal.ipynb)<br>(Azure API) | ✅                           | ✅                              | 🛑                  | ✅                        | ✅                               |
+| [Gemini](../../examples/multi_modal/gemini.ipynb)<br>(Google)                           | ✅                           | ✅                              | 🛑                  | ✅                        | ✅                               |
+| [CLIP](../../examples/multi_modal/image_to_image_retrieval.ipynb)<br>(Local host)       | 🛑                           | 🛑                              | ✅                  | 🛑                        | 🛑                               |
+| [LLaVa](../../examples/multi_modal/llava_multi_modal_tesla_10q.ipynb)<br>(replicate)    | ✅                           | 🛑                              | 🛑                  | ✅                        | ⚠️                               |
+| [Fuyu-8B](../../examples/multi_modal/replicate_multi_modal.ipynb)<br>(replicate)        | ✅                           | 🛑                              | 🛑                  | ✅                        | ⚠️                               |
+| [ImageBind<br>](https://imagebind.metademolab.com/)[To integrate]                       | 🛑                           | 🛑                              | ✅                  | 🛑                        | 🛑                               |
+| [MiniGPT-4<br>](../../examples/multi_modal/replicate_multi_modal.ipynb)                 | ✅                           | 🛑                              | 🛑                  | ✅                        | ⚠️                               |
+| [CogVLM<br>](https://github.com/THUDM/CogVLM)                                           | ✅                           | 🛑                              | 🛑                  | ✅                        | ⚠️                               |
+| [Qwen-VL<br>](https://arxiv.org/abs/2308.12966)[To integrate]                           | ✅                           | 🛑                              | 🛑                  | ✅                        | ⚠️                               |
 
 ### Multi Modal Vector Stores
 
 Below table lists some vector stores supporting Multi-Modal use cases. Our LlamaIndex built-in `MultiModalVectorStoreIndex` supports building separate vector stores for image and text embedding vector stores. `MultiModalRetriever`, and `SimpleMultiModalQueryEngine` support text to text/image and image to image retrieval and simple ranking fusion functions for combining text and image retrieval results.
 | Multi-Modal<br>Vector Stores | Single<br>Vector<br>Store | Multiple<br>Vector<br>Stores | Text<br>Embedding | Image<br>Embedding |
 | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------- | --------------------------- | --------------------------------------------------------- | ------------------------------------------------------- |
-| [LLamaIndex self-built<br>MultiModal Index](/examples/multi_modal/gpt4v_multi_modal_retrieval.ipynb) | 🛑 | ✅ | Can be arbitrary<br>text embedding<br>(Default is GPT3.5) | Can be arbitrary<br>Image embedding<br>(Default is CLIP) |
-| [Chroma](/examples/multi_modal/ChromaMultiModalDemo.ipynb) | ✅ | 🛑 | CLIP ✅ | CLIP ✅ |
+| [LLamaIndex self-built<br>MultiModal Index](../../examples/multi_modal/gpt4v_multi_modal_retrieval.ipynb) | 🛑 | ✅ | Can be arbitrary<br>text embedding<br>(Default is GPT3.5) | Can be arbitrary<br>Image embedding<br>(Default is CLIP) |
+| [Chroma](../../examples/multi_modal/ChromaMultiModalDemo.ipynb) | ✅ | 🛑 | CLIP ✅ | CLIP ✅ |
 | [Weaviate](https://weaviate.io/developers/weaviate/modules/retriever-vectorizer-modules/multi2vec-bind)<br>[To integrate] | ✅ | 🛑 | CLIP ✅<br>ImageBind ✅ | CLIP ✅<br>ImageBind ✅ |
 
 ## Multi-Modal LLM Modules
 
 We support integrations with GPT4-V, Anthropic (Opus, Sonnet), Gemini (Google), CLIP (OpenAI), BLIP (Salesforce), and Replicate (LLaVA, Fuyu-8B, MiniGPT-4, CogVLM), and more.
 
-```{toctree}
----
-maxdepth: 1
----
-/examples/multi_modal/openai_multi_modal.ipynb
-/examples/multi_modal/gemini.ipynb
-/examples/multi_modal/replicate_multi_modal.ipynb
-/examples/multi_modal/multi_modal_pydantic.ipynb
-/examples/multi_modal/gpt4v_experiments_cot.ipynb
-/examples/multi_modal/llava_multi_modal_tesla_10q.ipynb
-/examples/multi_modal/anthropic_multi_modal.ipynb
-```
+- [OpenAI](../../examples/multi_modal/openai_multi_modal.ipynb)
+- [Gemini](../../examples/multi_modal/gemini.ipynb)
+- [Anthropic](../../examples/multi_modal/anthropic_multi_modal.ipynb)
+- [Replicate](../../examples/multi_modal/replicate_multi_modal.ipynb)
+- [Pydantic Multi-Modal](../../examples/multi_modal/multi_modal_pydantic.ipynb)
+- [GPT-4v COT Experiments](../../examples/multi_modal/gpt4v_experiments_cot.ipynb)
+- [Llava Tesla 10q](../../examples/multi_modal/llava_multi_modal_tesla_10q.ipynb)
 
 ## Multi-Modal Retrieval Augmented Generation
 
 We support Multi-Modal Retrieval Augmented Generation with different Multi-Modal LLMs with Multi-Modal vector stores.
 
-```{toctree}
----
-maxdepth: 1
----
-/examples/multi_modal/gpt4v_multi_modal_retrieval.ipynb
-/examples/multi_modal/multi_modal_pdf_tables.ipynb
-/examples/multi_modal/multi_modal_retrieval.ipynb
-/examples/multi_modal/image_to_image_retrieval.ipynb
-/examples/multi_modal/ChromaMultiModalDemo.ipynb
-```
+- [GPT-4v Retrieval](../../examples/multi_modal/gpt4v_multi_modal_retrieval.ipynb)
+- [Multi-Modal Retrieval](../../examples/multi_modal/multi_modal_retrieval.ipynb)
+- [Image-to-Image Retrieval](../../examples/multi_modal/image_to_image_retrieval.ipynb)
+- [Chroma Multi-Modal](../../examples/multi_modal/ChromaMultiModalDemo.ipynb)
 
 ## Evaluation
 
 We support basic evaluation for Multi-Modal LLM and Retrieval Augmented Generation.
 
-```{toctree}
----
-maxdepth: 1
----
-/examples/evaluation/multi_modal/multi_modal_rag_evaluation.ipynb
-```
+- [Multi-Modal RAG Eval](../../examples/evaluation/multi_modal/multi_modal_rag_evaluation.ipynb)
diff --git a/docs/module_guides/models/prompts.md b/docs/docs/module_guides/models/prompts/index.md
similarity index 73%
rename from docs/module_guides/models/prompts.md
rename to docs/docs/module_guides/models/prompts/index.md
index b5810704c11751051045dd3269e023370449f29d..e0a9fc269f28231be4b85de9c8bb64f6dd0efd59 100644
--- a/docs/module_guides/models/prompts.md
+++ b/docs/docs/module_guides/models/prompts/index.md
@@ -34,44 +34,22 @@ prompt = qa_template.format(context_str=..., query_str=...)
 messages = qa_template.format_messages(context_str=..., query_str=...)
 ```
 
-See our Usage Pattern Guide for more details.
-
-```{toctree}
----
-maxdepth: 2
----
-prompts/usage_pattern.md
-```
+See our [Usage Pattern Guide](./usage_pattern.md) for more details.
 
 ## Example Guides
 
 Simple Customization Examples
 
-```{toctree}
----
-maxdepth: 1
----
-Completion prompts </examples/customization/prompts/completion_prompts.ipynb>
-Chat prompts </examples/customization/prompts/chat_prompts.ipynb>
-```
+- [Completion prompts](../../../examples/customization/prompts/completion_prompts.ipynb)
+- [Chat prompts](../../../examples/customization/prompts/chat_prompts.ipynb)
+- [Prompt Mixin](../../../examples/prompts/prompt_mixin.ipynb)
 
 Prompt Engineering Guides
 
-```{toctree}
----
-maxdepth: 1
----
-/examples/prompts/prompt_mixin.ipynb
-/examples/prompts/advanced_prompts.ipynb
-/examples/prompts/prompts_rag.ipynb
-```
+- [Advanced Prompts](../../../examples/prompts/advanced_prompts.ipynb)
+- [RAG Prompts](../../../examples/prompts/prompts_rag.ipynb)
 
 Experimental
 
-```{toctree}
----
-maxdepth: 1
----
-/examples/prompts/prompt_optimization.ipynb
-/examples/prompts/emotion_prompt.ipynb
-```
+- [Prompt Optimization](../../../examples/prompts/prompt_optimization.ipynb)
+- [Emotion Prompting](../../../examples/prompts/emotion_prompt.ipynb)
diff --git a/docs/module_guides/models/prompts/usage_pattern.md b/docs/docs/module_guides/models/prompts/usage_pattern.md
similarity index 93%
rename from docs/module_guides/models/prompts/usage_pattern.md
rename to docs/docs/module_guides/models/prompts/usage_pattern.md
index f9b7c30fa3d5c32cae4010f0bd1784e0f319910e..0f9f0fda622658f6cda0735aa0c2948a60c5f9a5 100644
--- a/docs/module_guides/models/prompts/usage_pattern.md
+++ b/docs/docs/module_guides/models/prompts/usage_pattern.md
@@ -53,7 +53,7 @@ Since LlamaIndex is a multi-step pipeline, it's important to identify the operat
 
 For instance, prompts are used in response synthesizer, retrievers, index construction, etc; some of these modules are nested in other modules (synthesizer is nested in query engine).
 
-See [this guide](/examples/prompts/prompt_mixin.ipynb) for full details on accessing/customizing prompts.
+See [this guide](../../../examples/prompts/prompt_mixin.ipynb) for full details on accessing/customizing prompts.
 
 #### Commonly Used Prompts
 
@@ -135,9 +135,9 @@ query_engine = RetrieverQueryEngine(retriever, response_synthesizer)
 The two approaches above are equivalent, where 1 is essentially syntactic sugar for 2 and hides away the underlying complexity. You might want to use 1 to quickly modify some common parameters, and use 2 to have more granular control.
 
 For more details on which classes use which prompts, please visit
-[Query class references](/api_reference/query.rst).
+[Query class references](../../../api_reference/response_synthesizers/index.md).
 
-Check out the [reference documentation](/api_reference/prompts.rst) for a full set of all prompts.
+Check out the [reference documentation](../../../api_reference/prompts/index.md) for a full set of all prompts.
 
 #### Modify prompts used in index construction
 
@@ -162,7 +162,7 @@ index = TreeIndex.from_documents(docs, summary_template=custom_prompt)
 ```
 
 For more details on which index uses which prompts, please visit
-[Index class references](/api_reference/indices.rst).
+[Index class references](../../../api_reference/indices/index.md).
 
 ### [Advanced] Advanced Prompt Capabilities
 
@@ -170,8 +170,8 @@ In this section we show some advanced prompt capabilities in LlamaIndex.
 
 Related Guides:
 
-- [Advanced Prompts](/examples/prompts/advanced_prompts.ipynb)
-- [Prompt Engineering for RAG](/examples/prompts/prompts_rag.ipynb)
+- [Advanced Prompts](../../../examples/prompts/advanced_prompts.ipynb)
+- [Prompt Engineering for RAG](../../../examples/prompts/prompts_rag.ipynb)
 
 #### Partial Formatting
 
diff --git a/docs/docs/module_guides/observability/callbacks/index.md b/docs/docs/module_guides/observability/callbacks/index.md
new file mode 100644
index 0000000000000000000000000000000000000000..46f4b004e019779b647ea31563438eea98a10cb0
--- /dev/null
+++ b/docs/docs/module_guides/observability/callbacks/index.md
@@ -0,0 +1,39 @@
+# Callbacks
+
+## Concept
+
+LlamaIndex provides callbacks to help debug, track, and trace the inner workings of the library.
+Using the callback manager, as many callbacks as needed can be added.
+
+In addition to logging data related to events, you can also track the duration and number of occurrences
+of each event.
+
+Furthermore, a trace map of events is also recorded, and callbacks can use this data
+however they want. For example, the `LlamaDebugHandler` will, by default, print the trace of events
+after most operations.
+
+**Callback Event Types**
+While each callback may not leverage each event type, the following events are available to be tracked:
+
+- `CHUNKING` -> Logs for the before and after of text splitting.
+- `NODE_PARSING` -> Logs for the documents and the nodes that they are parsed into.
+- `EMBEDDING` -> Logs for the number of texts embedded.
+- `LLM` -> Logs for the template and response of LLM calls.
+- `QUERY` -> Keeps track of the start and end of each query.
+- `RETRIEVE` -> Logs for the nodes retrieved for a query.
+- `SYNTHESIZE` -> Logs for the result for synthesize calls.
+- `TREE` -> Logs for the summary and level of summaries generated.
+- `SUB_QUESTION` -> Log for a generated sub question and answer.
+
+You can implement your own callback to track and trace these events, or use an existing callback.
+
+## Modules
+
+Currently supported callbacks are as follows:
+
+- [TokenCountingHandler](../../../examples/callbacks/TokenCountingHandler.ipynb) -> Flexible token counting for prompt, completion, and embedding token usage. See [the migration details](../callbacks/token_counting_migration.md)
+- [LlamaDebugHanlder](../../../examples/callbacks/LlamaDebugHandler.ipynb) -> Basic tracking and tracing for events. Example usage can be found in the notebook below.
+- [WandbCallbackHandler](../../../examples/callbacks/WandbCallbackHandler.ipynb) -> Tracking of events and traces using the Wandb Prompts frontend. More details are in the notebook below or at [Wandb](https://docs.wandb.ai/guides/prompts/quickstart)
+- [AimCallback](../../../examples/callbacks/AimCallback.ipynb) -> Tracking of LLM inputs and outputs. Example usage can be found in the notebook below.
+- [OpenInferenceCallbackHandler](../../../examples/callbacks/OpenInferenceCallback.ipynb) -> Tracking of AI model inferences. Example usage can be found in the notebook below.
+- [OpenAIFineTuningHandler](https://github.com/jerryjliu/llama_index/blob/main/experimental/openai_fine_tuning/openai_fine_tuning.ipynb) -> Records all LLM inputs and outputs. Then, provides a function `save_finetuning_events()` to save inputs and outputs in a format suitable for fine-tuning with OpenAI.
diff --git a/docs/module_guides/observability/callbacks/root.md b/docs/docs/module_guides/observability/callbacks/root.md
similarity index 52%
rename from docs/module_guides/observability/callbacks/root.md
rename to docs/docs/module_guides/observability/callbacks/root.md
index 11bd0093c93e40c6299510d5fd81507618fed537..32ed2ba753bd1b4012ea41e7ff2024775759e300 100644
--- a/docs/module_guides/observability/callbacks/root.md
+++ b/docs/docs/module_guides/observability/callbacks/root.md
@@ -31,24 +31,10 @@ You can implement your own callback to track and trace these events, or use an e
 
 Currently supported callbacks are as follows:
 
-- [LangfuseCallbackHandler](/examples/callbacks/LangfuseCallbackHandler.ipynb) -> Tracking of events and traces using the open-source platform Langfuse. More details are in the linked notebook or in the [Langfuse docs](https://langfuse.com/docs)
-- [TokenCountingHandler](/examples/callbacks/TokenCountingHandler.ipynb) -> Flexible token counting for prompt, completion, and embedding token usage. See [the migration details](/module_guides/observability/callbacks/token_counting_migration.md)
-- [LlamaDebugHanlder](/examples/callbacks/LlamaDebugHandler.ipynb) -> Basic tracking and tracing for events. Example usage can be found in the notebook below.
-- [WandbCallbackHandler](/examples/callbacks/WandbCallbackHandler.ipynb) -> Tracking of events and traces using the Wandb Prompts frontend. More details are in the notebook below or at [Wandb](https://docs.wandb.ai/guides/prompts/quickstart)
-- [AimCallback](/examples/callbacks/AimCallback.ipynb) -> Tracking of LLM inputs and outputs. Example usage can be found in the notebook below.
-- [OpenInferenceCallbackHandler](/examples/callbacks/OpenInferenceCallback.ipynb) -> Tracking of AI model inferences. Example usage can be found in the notebook below.
+- [LangfuseCallbackHandler](../../../examples/callbacks/LangfuseCallbackHandler.ipynb) -> Tracking of events and traces using the open-source platform Langfuse. More details are in the linked notebook or in the [Langfuse docs](https://langfuse.com/docs)
+- [TokenCountingHandler](../../../examples/callbacks/TokenCountingHandler.ipynb) -> Flexible token counting for prompt, completion, and embedding token usage. See [the migration details](../callbacks/token_counting_migration.md)
+- [LlamaDebugHanlder](../../../examples/callbacks/LlamaDebugHandler.ipynb) -> Basic tracking and tracing for events. Example usage can be found in the notebook below.
+- [WandbCallbackHandler](../../../examples/callbacks/WandbCallbackHandler.ipynb) -> Tracking of events and traces using the Wandb Prompts frontend. More details are in the notebook below or at [Wandb](https://docs.wandb.ai/guides/prompts/quickstart)
+- [AimCallback](../../../examples/callbacks/AimCallback.ipynb) -> Tracking of LLM inputs and outputs. Example usage can be found in the notebook below.
+- [OpenInferenceCallbackHandler](../../../examples/callbacks/OpenInferenceCallback.ipynb) -> Tracking of AI model inferences. Example usage can be found in the notebook below.
 - [OpenAIFineTuningHandler](https://github.com/jerryjliu/llama_index/blob/main/experimental/openai_fine_tuning/openai_fine_tuning.ipynb) -> Records all LLM inputs and outputs. Then, provides a function `save_finetuning_events()` to save inputs and outputs in a format suitable for fine-tuning with OpenAI.
-
-```{toctree}
----
-maxdepth: 1
-hidden:
----
-/examples/callbacks/LangfuseCallbackHandler.ipynb
-/examples/callbacks/TokenCountingHandler.ipynb
-/examples/callbacks/LlamaDebugHandler.ipynb
-/examples/callbacks/WandbCallbackHandler.ipynb
-/examples/callbacks/AimCallback.ipynb
-/examples/callbacks/OpenInferenceCallback.ipynb
-token_counting_migration.md
-```
diff --git a/docs/module_guides/observability/callbacks/token_counting_migration.md b/docs/docs/module_guides/observability/callbacks/token_counting_migration.md
similarity index 100%
rename from docs/module_guides/observability/callbacks/token_counting_migration.md
rename to docs/docs/module_guides/observability/callbacks/token_counting_migration.md
diff --git a/docs/module_guides/observability/observability.md b/docs/docs/module_guides/observability/index.md
similarity index 87%
rename from docs/module_guides/observability/observability.md
rename to docs/docs/module_guides/observability/index.md
index 17d82097a5a596a7aa3c8c82de9b116575d7df57..d18ef18b604e58784462f884ecb2701b2931e496 100644
--- a/docs/module_guides/observability/observability.md
+++ b/docs/docs/module_guides/observability/index.md
@@ -132,16 +132,11 @@ storage_context = llama_index.core.global_handler.load_storage_context(
 )
 ```
 
-![](/_static/integrations/wandb.png)
+![](../../_static/integrations/wandb.png)
 
 #### Guides
 
-```{toctree}
----
-maxdepth: 1
----
-/examples/callbacks/WandbCallbackHandler.ipynb
-```
+- [Wandb Callback Handler](../../examples/callbacks/WandbCallbackHandler.ipynb)
 
 ### OpenLLMetry
 
@@ -158,14 +153,9 @@ Traceloop.init()
 
 #### Guides
 
-```{toctree}
----
-maxdepth: 1
----
-/examples/callbacks/OpenLLMetry.ipynb
-```
+- [OpenLLMetry](../../examples/callbacks/OpenLLMetry.ipynb)
 
-![](/_static/integrations/openllmetry.png)
+![](../../_static/integrations/openllmetry.png)
 
 ### Arize Phoenix
 
@@ -195,16 +185,11 @@ llama_index.core.set_global_handler("arize_phoenix")
 ...
 ```
 
-![](/_static/integrations/arize_phoenix.png)
+![](../../_static/integrations/arize_phoenix.png)
 
 #### Guides
 
-```{toctree}
----
-maxdepth: 1
----
-Arize Phoenix Tracing Tutorial <https://colab.research.google.com/github/Arize-ai/phoenix/blob/main/tutorials/tracing/llama_index_tracing_tutorial.ipynb>
-```
+- [Arize Phoenix Tracing Tutorial](https://colab.research.google.com/github/Arize-ai/phoenix/blob/main/tutorials/tracing/llama_index_tracing_tutorial.ipynb)
 
 ### OpenInference
 
@@ -240,13 +225,8 @@ query_dataframe = as_dataframe(query_data_buffer)
 
 #### Guides
 
-```{toctree}
----
-maxdepth: 1
----
-/examples/callbacks/OpenInferenceCallback.ipynb
-Evaluating Search and Retrieval with Arize Phoenix <https://colab.research.google.com/github/Arize-ai/phoenix/blob/main/tutorials/llama_index_search_and_retrieval_tutorial.ipynb>
-```
+- [OpenInference Callback Handler](../../examples/callbacks/OpenInferenceCallback.ipynb)
+- [Evaluating Search and Retrieval with Arize Phoenix](https://colab.research.google.com/github/Arize-ai/phoenix/blob/main/tutorials/llama_index_search_and_retrieval_tutorial.ipynb)
 
 ### TruEra TruLens
 
@@ -264,18 +244,13 @@ tru_query_engine = TruLlama(query_engine)
 tru_query_engine.query("What did the author do growing up?")
 ```
 
-![](/_static/integrations/trulens.png)
+![](../../_static/integrations/trulens.png)
 
 #### Guides
 
-```{toctree}
----
-maxdepth: 1
----
-/community/integrations/trulens.md
-Quickstart Guide with LlamaIndex + TruLens <https://github.com/truera/trulens/blob/trulens-eval-0.20.3/trulens_eval/examples/quickstart/llama_index_quickstart.ipynb>
-Colab <https://colab.research.google.com/github/truera/trulens/blob/trulens-eval-0.20.3/trulens_eval/examples/quickstart/llama_index_quickstart.ipynb>
-```
+- [Trulens Guide](../../community/integrations/trulens.md)
+- [Quickstart Guide with LlamaIndex + TruLens](https://github.com/truera/trulens/blob/trulens-eval-0.20.3/trulens_eval/examples/quickstart/llama_index_quickstart.ipynb)
+- [Google Colab](https://colab.research.google.com/github/truera/trulens/blob/trulens-eval-0.20.3/trulens_eval/examples/quickstart/llama_index_quickstart.ipynb)
 
 ### HoneyHive
 
@@ -307,18 +282,13 @@ from llama_index.core import Settings
 # Settings.callback_manager = CallbackManager([hh_tracer])
 ```
 
-![](/_static/integrations/honeyhive.png)
-![](/_static/integrations/perfetto.png)
+![](../../_static/integrations/honeyhive.png)
+![](../../_static/integrations/perfetto.png)
 _Use Perfetto to debug and analyze your HoneyHive traces_
 
 #### Guides
 
-```{toctree}
----
-maxdepth: 1
----
-/examples/callbacks/HoneyHiveLlamaIndexTracer.ipynb
-```
+- [HoneyHive Callback Handler](../../examples/callbacks/HoneyHiveLlamaIndexTracer.ipynb)
 
 ### PromptLayer
 
@@ -339,18 +309,8 @@ set_global_handler("promptlayer", pl_tags=["paul graham", "essay"])
 
 #### Guides
 
-```{toctree}
----
-maxdepth: 1
----
-/examples/callbacks/PromptLayerHandler.ipynb
-```
+- [PromptLayer](../../examples/callbacks/PromptLayerHandler.ipynb)
 
 ## More observability
 
-```{toctree}
----
-maxdepth: 1
----
-callbacks/root.md
-```
+- [Callbacks Guide](./callbacks/index.md)
diff --git a/docs/module_guides/observability/instrumentation.md b/docs/docs/module_guides/observability/instrumentation.md
similarity index 100%
rename from docs/module_guides/observability/instrumentation.md
rename to docs/docs/module_guides/observability/instrumentation.md
diff --git a/docs/docs/module_guides/querying/index.md b/docs/docs/module_guides/querying/index.md
new file mode 100644
index 0000000000000000000000000000000000000000..90c457c0f61b534d3528b3768c98c033adf65c76
--- /dev/null
+++ b/docs/docs/module_guides/querying/index.md
@@ -0,0 +1,22 @@
+# Querying
+
+Querying is the most important part of your LLM application. To learn more about getting a final product that you can deploy, check out the [query engine](../deploying/query_engine/index.md), [chat engine](../deploying/chat_engines/index.md).
+
+If you wish to combine advanced reasoning with tool use, check out our [agents](../deploying/agents/index.md) guide.
+
+## Query Pipeline
+
+You can create query pipelines/chains with ease with our declarative `QueryPipeline` interface. Check out our [query pipeline guide](pipeline/index.md) for more details.
+
+Otherwise check out how to use our query modules as standalone components 👇.
+
+## Query Modules
+
+- [Query Engines](../deploying/query_engine/index.md)
+- [Chat Engines](../deploying/chat_engines/index.md)
+- [Agents](../deploying/agents/index.md)
+- [Retrievers](../querying/retriever/index.md)
+- [Response Synthesizers](../querying/response_synthesizers/index.md)
+- [Routers](../querying/router/index.md)
+- [Node Postprocessors](../querying/node_postprocessors/index.md)
+- [Structured Outputs](../querying/structured_outputs/index.md)
diff --git a/docs/module_guides/querying/node_postprocessors/root.md b/docs/docs/module_guides/querying/node_postprocessors/index.md
similarity index 95%
rename from docs/module_guides/querying/node_postprocessors/root.md
rename to docs/docs/module_guides/querying/node_postprocessors/index.md
index b0469e9e8c7b9799df54021c369133ce6bbbe209..e8c777434e635dfbc66232ec0312ba8b5851cd00 100644
--- a/docs/module_guides/querying/node_postprocessors/root.md
+++ b/docs/docs/module_guides/querying/node_postprocessors/index.md
@@ -8,9 +8,8 @@ In LlamaIndex, node postprocessors are most commonly applied within a query engi
 
 LlamaIndex offers several node postprocessors for immediate use, while also providing a simple API for adding your own custom postprocessors.
 
-```{tip}
-Confused about where node postprocessor fits in the pipeline? Read about [high-level concepts](/getting_started/concepts.md)
-```
+!!! tip
+Confused about where node postprocessor fits in the pipeline? Read about [high-level concepts](../../../getting_started/concepts.md)
 
 ## Usage Pattern
 
@@ -135,9 +134,4 @@ class DummyNodePostprocessor(BaseNodePostprocessor):
 
 ## Modules
 
-```{toctree}
----
-maxdepth: 2
----
-/module_guides/querying/node_postprocessors/node_postprocessors.md
-```
+See the full [modules list](./node_postprocessors.md) for more details.
diff --git a/docs/module_guides/querying/node_postprocessors/node_postprocessors.md b/docs/docs/module_guides/querying/node_postprocessors/node_postprocessors.md
similarity index 76%
rename from docs/module_guides/querying/node_postprocessors/node_postprocessors.md
rename to docs/docs/module_guides/querying/node_postprocessors/node_postprocessors.md
index 255513a03e77bd19fc3f7fd45a4edbb177285c06..b7cb7541f04d40646183b951236c735ecdc2f677 100644
--- a/docs/module_guides/querying/node_postprocessors/node_postprocessors.md
+++ b/docs/docs/module_guides/querying/node_postprocessors/node_postprocessors.md
@@ -74,7 +74,7 @@ postprocessor = SentenceEmbeddingOptimizer(
 postprocessor.postprocess_nodes(nodes)
 ```
 
-A full notebook guide can be found [here](/examples/node_postprocessor/OptimizerDemo.ipynb)
+A full notebook guide can be found [here](../../../examples/node_postprocessor/OptimizerDemo.ipynb)
 
 (cohere_rerank)=
 
@@ -92,7 +92,7 @@ postprocessor = CohereRerank(
 postprocessor.postprocess_nodes(nodes)
 ```
 
-Full notebook guide is available [here](/examples/node_postprocessor/CohereRerank.ipynb).
+Full notebook guide is available [here](../../../examples/node_postprocessor/CohereRerank.ipynb).
 
 ## SentenceTransformerRerank
 
@@ -109,7 +109,7 @@ postprocessor = SentenceTransformerRerank(
 postprocessor.postprocess_nodes(nodes)
 ```
 
-Full notebook guide is available [here](/examples/node_postprocessor/SentenceTransformerRerank.ipynb).
+Full notebook guide is available [here](../../../examples/node_postprocessor/SentenceTransformerRerank.ipynb).
 
 Please also refer to the [`sentence-transformer` docs](https://www.sbert.net/docs/pretrained-models/ce-msmarco.html) for a more complete list of models (and also shows tradeoffs in speed/accuracy). The default model is `cross-encoder/ms-marco-TinyBERT-L-2-v2`, which provides the most speed.
 
@@ -125,7 +125,7 @@ postprocessor = LLMRerank(top_n=2, service_context=service_context)
 postprocessor.postprocess_nodes(nodes)
 ```
 
-Full notebook guide is available [her for Gatsby](/examples/node_postprocessor/LLMReranker-Gatsby.ipynb) and [here for Lyft 10K documents](/examples/node_postprocessor/LLMReranker-Lyft-10k.ipynb).
+Full notebook guide is available [her for Gatsby](../../../examples/node_postprocessor/LLMReranker-Gatsby.ipynb) and [here for Lyft 10K documents](../../../examples/node_postprocessor/LLMReranker-Lyft-10k.ipynb).
 
 ## JinaRerank
 
@@ -141,7 +141,7 @@ postprocessor = JinaRerank(
 postprocessor.postprocess_nodes(nodes)
 ```
 
-Full notebook guide is available [here](/examples/node_postprocessor/JinaRerank.ipynb).
+Full notebook guide is available [here](../../../examples/node_postprocessor/JinaRerank.ipynb).
 
 ## FixedRecencyPostprocessor
 
@@ -157,9 +157,9 @@ postprocessor = FixedRecencyPostprocessor(
 postprocessor.postprocess_nodes(nodes)
 ```
 
-![](/_static/node_postprocessors/recency.png)
+![](../../../_static/node_postprocessors/recency.png)
 
-A full notebook guide is available [here](/examples/node_postprocessor/RecencyPostprocessorDemo.ipynb).
+A full notebook guide is available [here](../../..../../../examples/node_postprocessor/RecencyPostprocessorDemo.ipynb).
 
 ## EmbeddingRecencyPostprocessor
 
@@ -175,7 +175,7 @@ postprocessor = EmbeddingRecencyPostprocessor(
 postprocessor.postprocess_nodes(nodes)
 ```
 
-A full notebook guide is available [here](/examples/node_postprocessor/RecencyPostprocessorDemo.ipynb).
+A full notebook guide is available [here](../../..../../../examples/node_postprocessor/RecencyPostprocessorDemo.ipynb).
 
 ## TimeWeightedPostprocessor
 
@@ -189,7 +189,7 @@ postprocessor = TimeWeightedPostprocessor(time_decay=0.99, top_k=1)
 postprocessor.postprocess_nodes(nodes)
 ```
 
-A full notebook guide is available [here](/examples/node_postprocessor/TimeWeightedPostprocessorDemo.ipynb).
+A full notebook guide is available [here](../../../examples/node_postprocessor/TimeWeightedPostprocessorDemo.ipynb).
 
 ## (Beta) PIINodePostprocessor
 
@@ -219,7 +219,7 @@ postprocessor = NERPIINodePostprocessor()
 postprocessor.postprocess_nodes(nodes)
 ```
 
-A full notebook guide for both can be found [here](/examples/node_postprocessor/PII.ipynb).
+A full notebook guide for both can be found [here](../../../examples/node_postprocessor/PII.ipynb).
 
 ## (Beta) PrevNextNodePostprocessor
 
@@ -239,7 +239,7 @@ postprocessor = PrevNextNodePostprocessor(
 postprocessor.postprocess_nodes(nodes)
 ```
 
-![](/_static/node_postprocessors/prev_next.png)
+![](../../../_static/node_postprocessors/prev_next.png)
 
 ## (Beta) AutoPrevNextNodePostprocessor
 
@@ -256,7 +256,7 @@ postprocessor = AutoPrevNextNodePostprocessor(
 postprocessor.postprocess_nodes(nodes)
 ```
 
-A full example notebook is available [here](/examples/node_postprocessor/PrevNextPostprocessorDemo.ipynb).
+A full example notebook is available [here](../../../examples/node_postprocessor/PrevNextPostprocessorDemo.ipynb).
 
 ## (Beta) RankGPT
 
@@ -270,7 +270,7 @@ postprocessor = RankGPTRerank(top_n=3, llm=OpenAI(model="gpt-3.5-turbo-16k"))
 postprocessor.postprocess_nodes(nodes)
 ```
 
-Full notebook guide is available [here](/examples/node_postprocessor/rankGPT.ipynb).
+Full notebook guide is available [here](../../../examples/node_postprocessor/rankGPT.ipynb).
 
 ## Colbert Reranker
 
@@ -295,42 +295,21 @@ response = query_engine.query(
 )
 ```
 
-Full notebook guide is available [here](/examples/node_postprocessor/ColbertRerank.ipynb).
-
-## Jina Reranker
-
-Uses models from [jina](https://jina.ai/) to rerank documents. Returns the top N ranked nodes.
-
-```python
-from llama_index.postprocessor.jinaai_rerank import JinaRerank
-
-jina_rerank = JinaRerank(api_key=api_key, top_n=2)
-
-query_engine = index.as_query_engine(
-    similarity_top_k=10, node_postprocessors=[jina_rerank]
-)
-```
-
-Full notebook guide is available [here](/examples/node_postprocessor/JinaRerank.ipynb).
+Full notebook guide is available [here](../../../examples/node_postprocessor/ColbertRerank.ipynb).
 
 ## All Notebooks
 
-```{toctree}
----
-maxdepth: 1
----
-/examples/node_postprocessor/OptimizerDemo.ipynb
-/examples/node_postprocessor/CohereRerank.ipynb
-/examples/node_postprocessor/LLMReranker-Lyft-10k.ipynb
-/examples/node_postprocessor/LLMReranker-Gatsby.ipynb
-/examples/node_postprocessor/RecencyPostprocessorDemo.ipynb
-/examples/node_postprocessor/TimeWeightedPostprocessorDemo.ipynb
-/examples/node_postprocessor/PII.ipynb
-/examples/node_postprocessor/PrevNextPostprocessorDemo.ipynb
-/examples/node_postprocessor/MetadataReplacementDemo.ipynb
-/examples/node_postprocessor/LongContextReorder.ipynb
-/examples/node_postprocessor/rankGPT.ipynb
-/examples/node_postprocessor/ColbertRerank.ipynb
-/examples/node_postprocessor/JinaRerank.ipynb
-/cookbooks/mixedbread_reranker.ipynb
-```
+- [Sentence Optimizer](../../../examples/node_postprocessor/OptimizerDemo.ipynb)
+- [Cohere Rerank](../../../examples/node_postprocessor/CohereRerank.ipynb)
+- [LLM Reranker Lyft 10k](../../../examples/node_postprocessor/LLMReranker-Lyft-10k.ipynb)
+- [LLM Reranker Gatsby](../../../examples/node_postprocessor/LLMReranker-Gatsby.ipynb)
+- [Recency](../../../examples/node_postprocessor/RecencyPostprocessorDemo.ipynb)
+- [Time Weighted](../../../examples/node_postprocessor/TimeWeightedPostprocessorDemo.ipynb)
+- [PII](../../../examples/node_postprocessor/PII.ipynb)
+- [PrevNext](../../../examples/node_postprocessor/PrevNextPostprocessorDemo.ipynb)
+- [Metadata Replacement](../../../examples/node_postprocessor/MetadataReplacementDemo.ipynb)
+- [Long Context Reorder](../../../examples/node_postprocessor/LongContextReorder.ipynb)
+- [RankGPT](../../../examples/node_postprocessor/rankGPT.ipynb)
+- [Colbert Rerank](../../../examples/node_postprocessor/ColbertRerank.ipynb)
+- [JinaAI Rerank](../../../examples/node_postprocessor/JinaRerank.ipynb)
+- [MixedBread Rerank](../../../examples/cookbooks/mixedbread_reranker.ipynb)
diff --git a/docs/module_guides/querying/pipeline/root.md b/docs/docs/module_guides/querying/pipeline/index.md
similarity index 78%
rename from docs/module_guides/querying/pipeline/root.md
rename to docs/docs/module_guides/querying/pipeline/index.md
index a02b6fe8ab4ea72cc8cb0b13b9756ea58ad4d98a..bccdacf06a3e68f7f65d2f5caf5df83e456b2496 100644
--- a/docs/module_guides/querying/pipeline/root.md
+++ b/docs/docs/module_guides/querying/pipeline/index.md
@@ -13,11 +13,11 @@ This is centered around our `QueryPipeline` abstraction. Load in a variety of mo
 - Greater parity / better integration points with common low-code / no-code solutions (e.g. LangFlow)
 - [In the future] A declarative interface allows easy serializability of pipeline components, providing portability of pipelines/easier deployment to different systems.
 
-Our query pipelines also propagate callbacks throughout all sub-modules, and these integrate with our [observability partners](/module_guides/observability/observability.md).
+Our query pipelines also propagate callbacks throughout all sub-modules, and these integrate with our [observability partners](../../observability/index.md).
 
-![](/_static/query/pipeline_rag_example.png)
+![](../../../_static/query/pipeline_rag_example.png)
 
-To see an interactive example of `QueryPipeline` being put in use, check out the [RAG CLI](/use_cases/q_and_a/rag_cli.md).
+To see an interactive example of `QueryPipeline` being put in use, check out the [RAG CLI](../../../use_cases/q_and_a/rag_cli.md).
 
 ## Usage Pattern
 
@@ -40,21 +40,9 @@ p.run(prompt_key1="<input1>", ...)
 
 More information can be found in our usage pattern guides below.
 
-```{toctree}
----
-maxdepth: 2
----
-usage_pattern.md
-module_usage.md
-```
+- [Usage Pattern Guide](./usage_pattern.md)
+- [Module Usage](./module_usage.md)
 
 ## Module Guides
 
-Check out our `QueryPipeline` end-to-end guides to learn standard to advanced ways to setup orchestration over your data.
-
-```{toctree}
----
-maxdepth: 2
----
-modules.md
-```
+Check out our `QueryPipeline` [end-to-end guides](./modules.md) to learn standard to advanced ways to setup orchestration over your data.
diff --git a/docs/module_guides/querying/pipeline/module_usage.md b/docs/docs/module_guides/querying/pipeline/module_usage.md
similarity index 79%
rename from docs/module_guides/querying/pipeline/module_usage.md
rename to docs/docs/module_guides/querying/pipeline/module_usage.md
index 1c6950a4046d6408df478b6c4ba2a7c8659c3625..9b1ee63acc0a41105f5f20f3a969f3b7a7ba7f0a 100644
--- a/docs/module_guides/querying/pipeline/module_usage.md
+++ b/docs/docs/module_guides/querying/pipeline/module_usage.md
@@ -5,7 +5,7 @@ Currently the following LlamaIndex modules are supported within a QueryPipeline.
 ### LLMs (both completion and chat)
 
 - Base class: `LLM`
-- [Module Guide](/module_guides/models/llms.md)
+- [Module Guide](../../models/llms.md)
 - If chat model:
   - Input: `messages`. Takes in any `List[ChatMessage]` or any stringable input.
   - Output: `output`. Outputs `ChatResponse` (stringable)
@@ -16,42 +16,42 @@ Currently the following LlamaIndex modules are supported within a QueryPipeline.
 ### Prompts
 
 - Base class: `PromptTemplate`
-- [Module Guide](/module_guides/models/prompts.md)
+- [Module Guide](../../models/prompts/index.md)
 - Input: Prompt template variables. Each variable can be a stringable input.
 - Output: `output`. Outputs formatted prompt string (stringable)
 
 ### Query Engines
 
 - Base class: `BaseQueryEngine`
-- [Module Guide](/module_guides/deploying/query_engine/root.md)
+- [Module Guide](../../deploying/query_engine/index.md)
 - Input: `input`. Takes in any stringable input.
 - Output: `output`. Outputs `Response` (stringable)
 
 ### Query Transforms
 
 - Base class: `BaseQueryTransform`
-- [Module Guide](/optimizing/advanced_retrieval/query_transformations.md)
+- [Module Guide](../../../optimizing/advanced_retrieval/query_transformations.md)
 - Input: `query_str`, `metadata` (optional). `query_str` is any stringable input.
 - Output: `query_str`. Outputs string.
 
 ### Retrievers
 
 - Base class: `BaseRetriever`
-- [Module Guide](/module_guides/querying/retriever/root.md)
+- [Module Guide](../retriever/index.md)
 - Input: `input`. Takes in any stringable input.
 - Output: `output`. Outputs list of nodes `List[BaseNode]`.
 
 ### Output Parsers
 
 - Base class: `BaseOutputParser`
-- [Module Guide](/module_guides/querying/structured_outputs/output_parser.md)
+- [Module Guide](../structured_outputs/output_parser.md)
 - Input: `input`. Takes in any stringable input.
 - Output: `output`. Outputs whatever type output parser is supposed to parse out.
 
 ### Postprocessors/Rerankers
 
 - Base class: `BaseNodePostprocessor`
-- [Module Guide](/module_guides/querying/node_postprocessors/root.md)
+- [Module Guide](../node_postprocessors/index.md)
 - Input: `nodes`, `query_str` (optional). `nodes` is `List[BaseNode]`, `query_str` is any stringable input.
 - Output: `nodes`. Outputs list of nodes `List[BaseNode]`.
 
@@ -68,4 +68,4 @@ You can define a `QueryPipeline` as a module within another query pipeline. This
 
 ### Custom Components
 
-See our [custom components guide](query-pipeline-custom-component) for more details.
+See our [custom components guide](./usage_pattern.md#defining-a-custom-query-component) for more details.
diff --git a/docs/docs/module_guides/querying/pipeline/modules.md b/docs/docs/module_guides/querying/pipeline/modules.md
new file mode 100644
index 0000000000000000000000000000000000000000..d8f5e13022a97e70b91ef08f1d790f93e66084f8
--- /dev/null
+++ b/docs/docs/module_guides/querying/pipeline/modules.md
@@ -0,0 +1,7 @@
+# Module Guides
+
+- [Query Pipeline](../../../examples/pipeline/query_pipeline.ipynb)
+- [Async Query Pipeline](../../../examples/pipeline/query_pipeline_async.ipynb)
+- [Pandas Query Pipeline](../../../examples/pipeline/query_pipeline_pandas.ipynb)
+- [SQL Query Pipeline](../../../examples/pipeline/query_pipeline_sql.ipynb)
+- [Query Pipeline Agent](../../../examples/agent/agent_runner/query_pipeline_agent.ipynb)
diff --git a/docs/module_guides/querying/pipeline/usage_pattern.md b/docs/docs/module_guides/querying/pipeline/usage_pattern.md
similarity index 98%
rename from docs/module_guides/querying/pipeline/usage_pattern.md
rename to docs/docs/module_guides/querying/pipeline/usage_pattern.md
index 8eb7e0033e89f611f6f23960e8818f521ff83757..c036f78c4d2b76f19c815cc1192b831970bf7793 100644
--- a/docs/module_guides/querying/pipeline/usage_pattern.md
+++ b/docs/docs/module_guides/querying/pipeline/usage_pattern.md
@@ -113,8 +113,6 @@ p = QueryPipeline(chain=[prompt_tmpl, llm, summarizer_c])
 p.run(topic="YC")
 ```
 
-(query-pipeline-custom-component)=
-
 ## Defining a Custom Query Component
 
 You can easily define a custom component: Either passing a function to a `FnComponent` or subclassing a `CustomQueryComponent`.
@@ -178,7 +176,7 @@ class MyComponent(CustomQueryComponent):
         return {"output_key": result}
 ```
 
-For more details check out our [in-depth query transformations guide](/examples/pipeline/query_pipeline.ipynb).
+For more details check out our [in-depth query transformations guide](../../../examples/pipeline/query_pipeline.ipynb).
 
 ## Ensuring outputs are compatible
 
diff --git a/docs/module_guides/querying/response_synthesizers/root.md b/docs/docs/module_guides/querying/response_synthesizers/index.md
similarity index 97%
rename from docs/module_guides/querying/response_synthesizers/root.md
rename to docs/docs/module_guides/querying/response_synthesizers/index.md
index 97ae40fb4b318cce769a9119e75e043926e01db7..f4c607d84000ccd36922a31c294b41230ae23ece 100644
--- a/docs/module_guides/querying/response_synthesizers/root.md
+++ b/docs/docs/module_guides/querying/response_synthesizers/index.md
@@ -8,9 +8,8 @@ The method for doing this can take many forms, from as simple as iterating over
 
 When used in a query engine, the response synthesizer is used after nodes are retrieved from a retriever, and after any node-postprocessors are ran.
 
-```{tip}
-Confused about where response synthesizer fits in the pipeline? Read the [high-level concepts](/getting_started/concepts.md)
-```
+!!! tip
+Confused about where response synthesizer fits in the pipeline? Read the [high-level concepts](../../../getting_started/concepts.md)
 
 ## Usage Pattern
 
@@ -64,9 +63,8 @@ query_engine = index.as_query_engine(response_synthesizer=response_synthesizer)
 response = query_engine.query("query_text")
 ```
 
-```{tip}
-To learn how to build an index, see [Indexing](/module_guides/indexing/indexing.md)
-```
+!!! tip
+To learn how to build an index, see [Indexing](../../indexing/index.md)
 
 ## Configuring the Response Mode
 
@@ -221,10 +219,4 @@ response = summarizer.get_response(
 
 ## Modules
 
-```{toctree}
----
-maxdepth: 2
----
-/module_guides/querying/response_synthesizers/response_synthesizers.md
-
-```
+See the full [module guide](./response_synthesizers.md) for more details.
diff --git a/docs/module_guides/querying/response_synthesizers/response_synthesizers.md b/docs/docs/module_guides/querying/response_synthesizers/response_synthesizers.md
similarity index 86%
rename from docs/module_guides/querying/response_synthesizers/response_synthesizers.md
rename to docs/docs/module_guides/querying/response_synthesizers/response_synthesizers.md
index 15864ddf19b5ce782108963125551f727a244502..72bca5ffc14ac583cabd4f18a30c37965743159b 100644
--- a/docs/module_guides/querying/response_synthesizers/response_synthesizers.md
+++ b/docs/docs/module_guides/querying/response_synthesizers/response_synthesizers.md
@@ -60,12 +60,7 @@ response_str = response_synthesizer.get_response(
 
 ## Example Notebooks
 
-```{toctree}
----
-maxdepth: 1
----
-/examples/response_synthesizers/refine.ipynb
-/examples/response_synthesizers/structured_refine.ipynb
-/examples/response_synthesizers/tree_summarize.ipynb
-/examples/response_synthesizers/custom_prompt_synthesizer.ipynb
-```
+- [Refine](../../../examples/response_synthesizers/refine.ipynb)
+- [Structured Refine](../../../examples/response_synthesizers/structured_refine.ipynb)
+- [Tree Summarize](../../../examples/response_synthesizers/tree_summarize.ipynb)
+- [Custom Prompting](../../../examples/response_synthesizers/custom_prompt_synthesizer.ipynb)
diff --git a/docs/module_guides/querying/retriever/root.md b/docs/docs/module_guides/querying/retriever/index.md
similarity index 71%
rename from docs/module_guides/querying/retriever/root.md
rename to docs/docs/module_guides/querying/retriever/index.md
index 88bd9173ed3dc2e0d21d7dd94f04e3db03e95edb..21fb766e3b300975d8179a3649f79ed76ef4c9e1 100644
--- a/docs/module_guides/querying/retriever/root.md
+++ b/docs/docs/module_guides/querying/retriever/index.md
@@ -4,12 +4,11 @@
 
 Retrievers are responsible for fetching the most relevant context given a user query (or chat message).
 
-It can be built on top of [indexes](/module_guides/indexing/indexing.md), but can also be defined independently.
-It is used as a key building block in [query engines](/module_guides/deploying/query_engine/root.md) (and [Chat Engines](/module_guides/deploying/chat_engines/root.md)) for retrieving relevant context.
+It can be built on top of [indexes](../../indexing/index.md), but can also be defined independently.
+It is used as a key building block in [query engines](../../deploying/query_engine/index.md) (and [Chat Engines](../../deploying/chat_engines/index.md)) for retrieving relevant context.
 
-```{tip}
-Confused about where retriever fits in the pipeline? Read about [high-level concepts](/getting_started/concepts.md)
-```
+!!! tip
+Confused about where retriever fits in the pipeline? Read about [high-level concepts](../../../getting_started/concepts.md)
 
 ## Usage Pattern
 
@@ -34,7 +33,7 @@ Retrieve relevant context for a question:
 nodes = retriever.retrieve("Who is Paul Graham?")
 ```
 
-> Note: To learn how to build an index, see [Indexing](/module_guides/indexing/indexing.md)
+> Note: To learn how to build an index, see [Indexing](../../indexing/index.md)
 
 ## High-Level API
 
@@ -49,19 +48,11 @@ retriever = summary_index.as_retriever(
 )
 ```
 
-This creates a [SummaryIndexLLMRetriever](/api_reference/query/retrievers/list.rst) on top of the summary index.
+This creates a [SummaryIndexLLMRetriever](../../../api_reference/retrievers/summary.md) on top of the summary index.
 
 See [**Retriever Modes**](retriever_modes.md) for a full list of (index-specific) retriever modes
 and the retriever classes they map to.
 
-```{toctree}
----
-maxdepth: 1
-hidden:
----
-retriever_modes.md
-```
-
 ### Configuring a Retriever
 
 In the same way, you can pass kwargs to configure the selected retriever.
@@ -94,9 +85,4 @@ retriever = SummaryIndexLLMRetriever(
 
 ## Examples
 
-```{toctree}
----
-maxdepth: 2
----
-retrievers.md
-```
+See more examples in the [retrievers guide](./retrievers.md).
diff --git a/docs/module_guides/querying/retriever/retriever_modes.md b/docs/docs/module_guides/querying/retriever/retriever_modes.md
similarity index 100%
rename from docs/module_guides/querying/retriever/retriever_modes.md
rename to docs/docs/module_guides/querying/retriever/retriever_modes.md
diff --git a/docs/docs/module_guides/querying/retriever/retrievers.md b/docs/docs/module_guides/querying/retriever/retrievers.md
new file mode 100644
index 0000000000000000000000000000000000000000..3de7794ebe0432c9c19f095c1d8fcd5cdd269f8b
--- /dev/null
+++ b/docs/docs/module_guides/querying/retriever/retrievers.md
@@ -0,0 +1,72 @@
+# Retriever Modules
+
+We are actively adding more tailored retrieval guides.
+In the meanwhile, please take a look at the [API References](../../../api_reference/retrievers/index.md).
+
+## Index Retrievers
+
+Please see [the retriever modes](retriever_modes.md) for more details on how to get a retriever from any given index.
+
+If you want to import the corresponding retrievers directly, please check out our [API reference](../../../api_reference/retrievers/index.md).
+
+## Comprehensive Retriever Guides
+
+Check out our comprehensive guides on various retriever modules, many of which cover advanced concepts (auto-retrieval, routing, ensembling, and more).
+
+### Advanced Retrieval and Search
+
+These guides contain advanced retrieval techniques. Some are common like keyword/hybrid search, reranking, and more.
+Some are specific to LLM + RAG pipelines, like small-to-big and auto-merging retrieval.
+
+- [Define Custom Retriever](../../../examples/query_engine/CustomRetrievers.ipynb)
+- [BM25 Hybrid Retriever](../../../examples/retrievers/bm25_retriever.ipynb)
+- [Simple Query Fusion](../../../examples/retrievers/simple_fusion.ipynb)
+- [Reciprocal Rerank Fusion](../../../examples/retrievers/reciprocal_rerank_fusion.ipynb)
+- [Auto Merging Retriever](../../../examples/retrievers/auto_merging_retriever.ipynb)
+- [Metadata Replacement](../../../examples/node_postprocessor/MetadataReplacementDemo.ipynb)
+- [Composable Retrievers](../../../examples/retrievers/composable_retrievers.ipynb)
+
+### Auto-Retrieval
+
+These retrieval techniques perform **semi-structured** queries, combining semantic search with structured filtering.
+
+- [Auto-Retrieval (with Pinecone)](../../../examples/vector_stores/pinecone_auto_retriever.ipynb)
+- [Auto-Retrieval (with Lantern)](../../../examples/vector_stores/LanternAutoRetriever.ipynb)
+- [Auto-Retrieval (with Chroma)](../../../examples/vector_stores/chroma_auto_retriever.ipynb)
+- [Auto-Retrieval (with BagelDB)](../../../examples/vector_stores/BagelAutoRetriever.ipynb)
+- [Auto-Retrieval (with Vectara)](../../../examples/retrievers/vectara_auto_retriever.ipynb)
+- [Multi-Doc Auto-Retrieval](../../../examples/query_engine/multi_doc_auto_retrieval/multi_doc_auto_retrieval.ipynb)
+
+### Knowledge Graph Retrievers
+
+- [Knowledge Graph RAG Retriever](../../../examples/query_engine/knowledge_graph_rag_query_engine.ipynb)
+
+### Composed Retrievers
+
+These are retrieval techniques that are composed on top of other retrieval techniques - providing higher-level capabilities like
+hierarchical retrieval and query decomposition.
+
+- [Query Fusion](../../../examples/retrievers/reciprocal_rerank_fusion.ipynb)
+- [Recursive Table Retrieval](../../../examples/query_engine/pdf_tables/recursive_retriever.ipynb)
+- [Recursive Node Retrieval](../../../examples/retrievers/recursive_retriever_nodes.ipynb)
+- [Braintrust](../../../examples/retrievers/recurisve_retriever_nodes_braintrust.ipynb)
+- [Router Retriever](../../../examples/retrievers/router_retriever.ipynb)
+- [Ensemble Retriever](../../../examples/retrievers/ensemble_retrieval.ipynb)
+- [Multi-Doc Auto-Retrieval](../../../examples/query_engine/multi_doc_auto_retrieval/multi_doc_auto_retrieval.ipynb)
+
+### Managed Retrievers
+
+- [Google](../../../examples/managed/GoogleDemo.ipynb)
+- [Vectara](../../../examples/managed/vectaraDemo.ipynb)
+- [VideoDB](../../../examples/retrievers/videodb_retriever.ipynb)
+- [Zilliz](../../../examples/managed/zcpDemo.ipynb)
+
+### Other Retrievers
+
+These are guides that don't fit neatly into a category but should be highlighted regardless.
+
+- [Multi-Doc Hybrid](../../../examples/retrievers/multi_doc_together_hybrid.ipynb)
+- [You Retriever](../../../examples/retrievers/you_retriever.ipynb)
+- [Text-to-SQL](../../../examples/index_structs/struct_indices/SQLIndexDemo.ipynb)
+- [DeepMemory (Activeloop)](../../../examples/retrievers/deep_memory.ipynb)
+- [Pathway](../../../examples/retrievers/pathway_retriever.ipynb)
diff --git a/docs/module_guides/querying/router/root.md b/docs/docs/module_guides/querying/router/index.md
similarity index 94%
rename from docs/module_guides/querying/router/root.md
rename to docs/docs/module_guides/querying/router/index.md
index fbfe5253b56679dda29ad0c26a1e5724e0d26b69..d9cff212012951393eb8ceb0352e73260c4eb3d8 100644
--- a/docs/module_guides/querying/router/root.md
+++ b/docs/docs/module_guides/querying/router/index.md
@@ -181,12 +181,9 @@ selector_result = selector.select(
 print(selector_result.selections)
 ```
 
-```{toctree}
----
-maxdepth: 1
----
-/examples/query_engine/RouterQueryEngine.ipynb
-/examples/query_engine/RetrieverRouterQueryEngine.ipynb
-/examples/query_engine/SQLRouterQueryEngine.ipynb
-/examples/retrievers/router_retriever.ipynb
-```
+More examples:
+
+- [Router Query Engine](../../../examples/query_engine/RouterQueryEngine.ipynb)
+- [Retriever Router Query Engine](../../../examples/query_engine/RetrieverRouterQueryEngine.ipynb)
+- [SQL Router Query Engine](../../../examples/query_engine/SQLRouterQueryEngine.ipynb)
+- [Router Retriever](../../../examples/retrievers/router_retriever.ipynb)
diff --git a/docs/module_guides/querying/structured_outputs/structured_outputs.md b/docs/docs/module_guides/querying/structured_outputs/index.md
similarity index 89%
rename from docs/module_guides/querying/structured_outputs/structured_outputs.md
rename to docs/docs/module_guides/querying/structured_outputs/index.md
index 4299df77163d648c7c3d046eea3119d2c089183b..2d5f6bd003c2f16db412c620d09343a3705cfcac 100644
--- a/docs/module_guides/querying/structured_outputs/structured_outputs.md
+++ b/docs/docs/module_guides/querying/structured_outputs/index.md
@@ -18,18 +18,15 @@ See the sections below for an overview of output parsers and Pydantic programs.
 
 Here we describe the different components of an LLM-powered structured output function. The pipeline depends on whether you're using a **generic LLM text completion API** or an **LLM function calling API**.
 
-![](/_static/structured_output/diagram1.png)
+![](../../../_static/structured_output/diagram1.png)
 
 With generic completion APIs, the inputs and outputs are handled by text prompts. The output parser plays a role before and after the LLM call in ensuring structured outputs. Before the LLM call, the output parser can
 append format instructions to the prompt. After the LLM call, the output parser can parse the output to the specified instructions.
 
 With function calling APIs, the output is inherently in a structured format, and the input can take in the signature of the desired object. The structured output just needs to be cast in the right object format (e.g. Pydantic).
 
-```{toctree}
----
-maxdepth: 1
----
-/module_guides/querying/structured_outputs/pydantic_program.md
-/module_guides/querying/structured_outputs/query_engine.md
-/module_guides/querying/structured_outputs/output_parser.md
-```
+## Resources
+
+- [Pydanitc Programs](./pydantic_program.md)
+- [Structured Outputs + Query Engines](./query_engine.md)
+- [Output Parsers](./output_parser.md)
diff --git a/docs/module_guides/querying/structured_outputs/output_parser.md b/docs/docs/module_guides/querying/structured_outputs/output_parser.md
similarity index 88%
rename from docs/module_guides/querying/structured_outputs/output_parser.md
rename to docs/docs/module_guides/querying/structured_outputs/output_parser.md
index edfbab23b60a9556ff27fc8b129656814dee8f22..5048b1edf1ee1994496d53784f5453ba788c67c1 100644
--- a/docs/module_guides/querying/structured_outputs/output_parser.md
+++ b/docs/docs/module_guides/querying/structured_outputs/output_parser.md
@@ -121,15 +121,10 @@ Output:
 
 ### Guides
 
-```{toctree}
----
-caption: Examples
-maxdepth: 1
----
-
-/examples/output_parsing/GuardrailsDemo.ipynb
-/examples/output_parsing/LangchainOutputParserDemo.ipynb
-/examples/output_parsing/guidance_pydantic_program.ipynb
-/examples/output_parsing/guidance_sub_question.ipynb
-/examples/output_parsing/openai_pydantic_program.ipynb
-```
+More examples:
+
+- [Guardrails](../../../examples/output_parsing/GuardrailsDemo.ipynb)
+- [Langchain](../../../examples/output_parsing/LangchainOutputParserDemo.ipynb)
+- [Guidance Pydantic Program](../../../examples/output_parsing/guidance_pydantic_program.ipynb)
+- [Guidance Sub-Question](../../../examples/output_parsing/guidance_sub_question.ipynb)
+- [Openai Pydantic Program](../../../examples/output_parsing/openai_pydantic_program.ipynb)
diff --git a/docs/module_guides/querying/structured_outputs/pydantic_program.md b/docs/docs/module_guides/querying/structured_outputs/pydantic_program.md
similarity index 62%
rename from docs/module_guides/querying/structured_outputs/pydantic_program.md
rename to docs/docs/module_guides/querying/structured_outputs/pydantic_program.md
index ed6ced9674c4b6af6e2313bcd37499e52f239c68..4d4bcdab8f7e0678fec2819da7e083f877aed868 100644
--- a/docs/module_guides/querying/structured_outputs/pydantic_program.md
+++ b/docs/docs/module_guides/querying/structured_outputs/pydantic_program.md
@@ -12,30 +12,15 @@ There's a few general types of Pydantic Programs:
 
 ## LLM Text Completion Pydantic Programs
 
-```{toctree}
----
-maxdepth: 1
----
-/examples/output_parsing/llm_program.ipynb
-```
+See the example notebook on [LLM Text Completion programs](../../../examples/output_parsing/llm_program.ipynb)
 
 ## LLM Function Calling Pydantic Programs
 
-```{toctree}
----
-maxdepth: 1
----
-/examples/output_parsing/openai_pydantic_program.ipynb
-/examples/output_parsing/guidance_pydantic_program.ipynb
-/examples/output_parsing/guidance_sub_question.ipynb
-```
+- [OpenAI Pydantic Program](../../../examples/output_parsing/openai_pydantic_program.ipynb)
+- [Guidance Pydantic Program](../../../examples/output_parsing/guidance_pydantic_program.ipynb)
+- [Guidance Sub-Question Generator](../../../examples/output_parsing/guidance_sub_question.ipynb)
 
 ## Prepackaged Pydantic Programs
 
-```{toctree}
----
-maxdepth: 1
----
-/examples/output_parsing/df_program.ipynb
-/examples/output_parsing/evaporate_program.ipynb
-```
+- [DF Program](../../../examples/output_parsing/df_program.ipynb)
+- [Evaporate Program](../../../examples/output_parsing/evaporate_program.ipynb)
diff --git a/docs/module_guides/querying/structured_outputs/query_engine.md b/docs/docs/module_guides/querying/structured_outputs/query_engine.md
similarity index 88%
rename from docs/module_guides/querying/structured_outputs/query_engine.md
rename to docs/docs/module_guides/querying/structured_outputs/query_engine.md
index 9d9b6cc7d2ef2b85ca82398012aa05f443b0253e..4c305db40c58f76897f40776d7794d0eafa9cd2e 100644
--- a/docs/module_guides/querying/structured_outputs/query_engine.md
+++ b/docs/docs/module_guides/querying/structured_outputs/query_engine.md
@@ -54,10 +54,5 @@ print(response.extra_info)
 
 Detailed usage is available in the notebooks below:
 
-```{toctree}
----
-maxdepth: 2
----
-/examples/query_engine/pydantic_query_engine.ipynb
-/examples/response_synthesizers/pydantic_tree_summarize.ipynb
-```
+- [Structured Outputs with a Query Engine](../../../examples/query_engine/pydantic_query_engine.ipynb)
+- [Structured Outputs with a Tree Summarize](../../../examples/response_synthesizers/pydantic_tree_summarize.ipynb)
diff --git a/docs/module_guides/storing/chat_stores.md b/docs/docs/module_guides/storing/chat_stores.md
similarity index 100%
rename from docs/module_guides/storing/chat_stores.md
rename to docs/docs/module_guides/storing/chat_stores.md
diff --git a/docs/module_guides/storing/customization.md b/docs/docs/module_guides/storing/customization.md
similarity index 99%
rename from docs/module_guides/storing/customization.md
rename to docs/docs/module_guides/storing/customization.md
index 50d61faff5760d24041a43bd238793de310c82c4..6057fd181fd26a8d792742d392167abf078e3126 100644
--- a/docs/module_guides/storing/customization.md
+++ b/docs/docs/module_guides/storing/customization.md
@@ -13,7 +13,7 @@ response = query_engine.query("Summarize the documents.")
 
 Under the hood, LlamaIndex also supports a swappable **storage layer** that allows you to customize where ingested documents (i.e., `Node` objects), embedding vectors, and index metadata are stored.
 
-![](/_static/storage/storage.png)
+![](../../_static/storage/storage.png)
 
 ### Low-Level API
 
diff --git a/docs/module_guides/storing/docstores.md b/docs/docs/module_guides/storing/docstores.md
similarity index 98%
rename from docs/module_guides/storing/docstores.md
rename to docs/docs/module_guides/storing/docstores.md
index 2460f6c685952ad60943825c9acd0426d125d8a2..08e9bee4a464b37c633a35750c89de62fb086640 100644
--- a/docs/module_guides/storing/docstores.md
+++ b/docs/docs/module_guides/storing/docstores.md
@@ -2,7 +2,7 @@
 
 Document stores contain ingested document chunks, which we call `Node` objects.
 
-See the [API Reference](/api_reference/storage/docstore.rst) for more details.
+See the [API Reference](../../api_reference/storage/docstore/index.md) for more details.
 
 ### Simple Document Store
 
diff --git a/docs/module_guides/storing/storing.md b/docs/docs/module_guides/storing/index.md
similarity index 88%
rename from docs/module_guides/storing/storing.md
rename to docs/docs/module_guides/storing/index.md
index 2e20f94ba3e3df323e8e512c984c421c936b5a9d..654cbd88afa0d14c7ef12153bd9f0283847cd269 100644
--- a/docs/module_guides/storing/storing.md
+++ b/docs/docs/module_guides/storing/index.md
@@ -21,7 +21,7 @@ We have confirmed support for the following storage backends:
 - AWS S3
 - Cloudflare R2
 
-![](/_static/storage/storage.png)
+![](../../_static/storage/storage.png)
 
 ## Usage Pattern
 
@@ -65,26 +65,16 @@ storage_context = StorageContext.from_defaults(
 
 More details on customization/persistence can be found in the guides below.
 
-```{toctree}
----
-maxdepth: 1
----
-customization.md
-save_load.md
-```
+- [Customization](./customization.md)
+- [Save/Load](./save_load.md)
 
 ## Modules
 
 We offer in-depth guides on the different storage components.
 
-```{toctree}
----
-maxdepth: 1
----
-vector_stores.md
-docstores.md
-index_stores.md
-kv_stores.md
-/community/integrations/graph_stores.md
-chat_stores.md
-```
+- [Vector Stores](./vector_stores.md)
+- [Docstores](./docstores.md)
+- [Index Stores](./index_stores.md)
+- [Key-Val Stores](./kv_stores.md)
+- [Graph Stores](../../community/integrations/graph_stores.md)
+- [ChatStores](./chat_stores.md)
diff --git a/docs/module_guides/storing/index_stores.md b/docs/docs/module_guides/storing/index_stores.md
similarity index 97%
rename from docs/module_guides/storing/index_stores.md
rename to docs/docs/module_guides/storing/index_stores.md
index 3f59d09ffd70e67af8be1e5d965c7d0900d7fe5d..f5951f73f265447ea5618ce68a03a45c2c764d99 100644
--- a/docs/module_guides/storing/index_stores.md
+++ b/docs/docs/module_guides/storing/index_stores.md
@@ -2,7 +2,7 @@
 
 Index stores contains lightweight index metadata (i.e. additional state information created when building an index).
 
-See the [API Reference](/api_reference/storage/index_store.rst) for more details.
+See the [API Reference](../../api_reference/storage/index_store/index.md) for more details.
 
 ### Simple Index Store
 
diff --git a/docs/module_guides/storing/kv_stores.md b/docs/docs/module_guides/storing/kv_stores.md
similarity index 84%
rename from docs/module_guides/storing/kv_stores.md
rename to docs/docs/module_guides/storing/kv_stores.md
index e3b88b504e279bf25c4bc35445dbea7f8167d91c..2eb4ab9b0553400c4a180c36963d238e6f8d58b3 100644
--- a/docs/module_guides/storing/kv_stores.md
+++ b/docs/docs/module_guides/storing/kv_stores.md
@@ -7,6 +7,6 @@ We provide the following key-value stores:
 - **Simple Key-Value Store**: An in-memory KV store. The user can choose to call `persist` on this kv store to persist data to disk.
 - **MongoDB Key-Value Store**: A MongoDB KV store.
 
-See the [API Reference](/api_reference/storage/kv_store.rst) for more details.
+See the [API Reference](../../api_reference/storage/kvstore/index.md) for more details.
 
 Note: At the moment, these storage abstractions are not externally facing.
diff --git a/docs/module_guides/storing/save_load.md b/docs/docs/module_guides/storing/save_load.md
similarity index 97%
rename from docs/module_guides/storing/save_load.md
rename to docs/docs/module_guides/storing/save_load.md
index dbe612efc7a1c0b83381b18f7d69376c4b0536bc..d2795506280f8e5a95edaa8833718e344f1432da 100644
--- a/docs/module_guides/storing/save_load.md
+++ b/docs/docs/module_guides/storing/save_load.md
@@ -57,8 +57,6 @@ graph = load_graph_from_storage(
 )  # loads graph with the specified root_id
 ```
 
-Here's the full [API Reference on saving and loading](/api_reference/storage/indices_save_load.rst).
-
 ## Using a remote backend
 
 By default, LlamaIndex uses a local filesystem to load and save files. However, you can override this by passing a `fsspec.AbstractFileSystem` object.
diff --git a/docs/module_guides/storing/vector_stores.md b/docs/docs/module_guides/storing/vector_stores.md
similarity index 66%
rename from docs/module_guides/storing/vector_stores.md
rename to docs/docs/module_guides/storing/vector_stores.md
index 8a6a39e1a1384f73146fbe36975c9891a07b3e9b..8598f3dc831a108bca48a22e835a951ccc7c0dab 100644
--- a/docs/module_guides/storing/vector_stores.md
+++ b/docs/docs/module_guides/storing/vector_stores.md
@@ -55,53 +55,49 @@ We are actively adding more integrations and improving feature coverage for each
 | Upstash                  | cloud                   |                    |               |        | ✓               |       |
 | Weaviate                 | self-hosted / cloud     | ✓                  | ✓             | ✓      | ✓               |       |
 
-For more details, see [Vector Store Integrations](/community/integrations/vector_stores.md).
+For more details, see [Vector Store Integrations](../../community/integrations/vector_stores.md).
 
-```{toctree}
----
-caption: Examples
-maxdepth: 1
----
-/examples/vector_stores/AstraDBIndexDemo.ipynb
-/examples/vector_stores/AsyncIndexCreationDemo.ipynb
-/examples/vector_stores/AzureAISearchIndexDemo.ipynb
-/examples/vector_stores/AzureCosmosDBMongoDBvCoreDemo.ipynb
-/examples/vector_stores/BaiduVectorDBIndexDemo.ipynb
-/examples/vector_stores/CassandraIndexDemo.ipynb
-/examples/vector_stores/ChromaIndexDemo.ipynb
-/examples/vector_stores/DashvectorIndexDemo.ipynb
-/examples/vector_stores/DashvectorIndexDemo-Hybrid.ipynb
-/examples/vector_stores/DatabricksVectorSearchDemo.ipynb
-/examples/vector_stores/DeepLakeIndexDemo.ipynb
-/examples/vector_stores/DocArrayHnswIndexDemo.ipynb
-/examples/vector_stores/DocArrayInMemoryIndexDemo.ipynb
-/examples/vector_stores/DuckDBDemo.ipynb
-/examples/vector_stores/EpsillaIndexDemo.ipynb
-/examples/vector_stores/JaguarIndexDemo.ipynb
-/examples/vector_stores/LanceDBIndexDemo.ipynb
-/examples/vector_stores/LanternIndexDemo.ipynb
-/examples/vector_stores/MetalIndexDemo.ipynb
-/examples/vector_stores/MilvusIndexDemo.ipynb
-/examples/vector_stores/MyScaleIndexDemo.ipynb
-/examples/vector_stores/ElasticsearchIndexDemo.ipynb
-/examples/vector_stores/FaissIndexDemo.ipynb
-/examples/vector_stores/MongoDBAtlasVectorSearch.ipynb
-/examples/vector_stores/Neo4jVectorDemo.ipynb
-/examples/vector_stores/OpensearchDemo.ipynb
-/examples/vector_stores/PineconeIndexDemo.ipynb
-/examples/vector_stores/PineconeIndexDemo-Hybrid.ipynb
-/examples/vector_stores/PGVectoRsDemo.ipynb
-/examples/vector_stores/postgres.ipynb
-/examples/vector_stores/RedisIndexDemo.ipynb
-/examples/vector_stores/QdrantIndexDemo.ipynb
-/examples/vector_stores/qdrant_hybrid.ipynb
-/examples/vector_stores/RocksetIndexDemo.ipynb
-/examples/vector_stores/SimpleIndexDemo.ipynb
-/examples/vector_stores/SupabaseVectorIndexDemo.ipynb
-/examples/vector_stores/TairIndexDemo.ipynb
-/examples/vector_stores/TencentVectorDBIndexDemo.ipynb
-/examples/vector_stores/Timescalevector.ipynb
-/examples/vector_stores/WeaviateIndexDemo.ipynb
-/examples/vector_stores/WeaviateIndexDemo-Hybrid.ipynb
-/examples/vector_stores/ZepIndexDemo.ipynb
-```
+## Example Notebooks
+
+- [Astra DB](../../examples/vector_stores/AstraDBIndexDemo.ipynb)
+- [Async Index Creation](../../examples/vector_stores/AsyncIndexCreationDemo.ipynb)
+- [Azure AI Search](../../examples/vector_stores/AzureAISearchIndexDemo.ipynb)
+- [Azure Cosmos DB](../../examples/vector_stores/AzureCosmosDBMongoDBvCoreDemo.ipynb)
+- [Baidu](../../examples/vector_stores/BaiduVectorDBIndexDemo.ipynb)
+- [Caasandra](../../examples/vector_stores/CassandraIndexDemo.ipynb)
+- [Chromadb](../../examples/vector_stores/ChromaIndexDemo.ipynb)
+- [Dash](../../examples/vector_stores/DashvectorIndexDemo.ipynb)
+- [Databricks](../../examples/vector_stores/DatabricksVectorSearchDemo.ipynb)
+- [Deeplake](../../examples/vector_stores/DeepLakeIndexDemo.ipynb)
+- [DocArray HNSW](../../examples/vector_stores/DocArrayHnswIndexDemo.ipynb)
+- [DocArray in-Memory](../../examples/vector_stores/DocArrayInMemoryIndexDemo.ipynb)
+- [DuckDB](../../examples/vector_stores/DuckDBDemo.ipynb)
+- [Espilla](../../examples/vector_stores/EpsillaIndexDemo.ipynb)
+- [Jaguar](../../examples/vector_stores/JaguarIndexDemo.ipynb)
+- [LanceDB](../../examples/vector_stores/LanceDBIndexDemo.ipynb)
+- [Lantern](../../examples/vector_stores/LanternIndexDemo.ipynb)
+- [Metal](../../examples/vector_stores/MetalIndexDemo.ipynb)
+- [Milvus](../../examples/vector_stores/MilvusIndexDemo.ipynb)
+- [MyScale](../../examples/vector_stores/MyScaleIndexDemo.ipynb)
+- [ElsaticSearch](../../examples/vector_stores/ElasticsearchIndexDemo.ipynb)
+- [FAISS](../../examples/vector_stores/FaissIndexDemo.ipynb)
+- [MongoDB Atlas](../../examples/vector_stores/MongoDBAtlasVectorSearch.ipynb)
+- [Neo4j](../../examples/vector_stores/Neo4jVectorDemo.ipynb)
+- [OpenSearch](../../examples/vector_stores/OpensearchDemo.ipynb)
+- [Pinecone](../../examples/vector_stores/PineconeIndexDemo.ipynb)
+- [Pinecone Hybrid Search](../../examples/vector_stores/PineconeIndexDemo-Hybrid.ipynb)
+- [PGvectoRS](../../examples/vector_stores/PGVectoRsDemo.ipynb)
+- [Postgres](../../examples/vector_stores/postgres.ipynb)
+- [Redis](../../examples/vector_stores/RedisIndexDemo.ipynb)
+- [Qdrant](../../examples/vector_stores/QdrantIndexDemo.ipynb)
+- [Qdrant Hybrid Search](../../examples/vector_stores/qdrant_hybrid.ipynb)
+- [Rockset](../../examples/vector_stores/RocksetIndexDemo.ipynb)
+- [Simple](../../examples/vector_stores/SimpleIndexDemo.ipynb)
+- [Supabase](../../examples/vector_stores/SupabaseVectorIndexDemo.ipynb)
+- [Tair](../../examples/vector_stores/TairIndexDemo.ipynb)
+- [Tencent](../../examples/vector_stores/TencentVectorDBIndexDemo.ipynb)
+- [Timesacle](../../examples/vector_stores/Timescalevector.ipynb)
+- [Upstash](../../examples/vector_stores/UpstashVectorDemo.ipynb)
+- [Weaviate](../../examples/vector_stores/WeaviateIndexDemo.ipynb)
+- [Weaviate Hybrid Search](../../examples/vector_stores/WeaviateIndexDemo-Hybrid.ipynb)
+- [Zep](../../examples/vector_stores/ZepIndexDemo.ipynb)
diff --git a/docs/module_guides/supporting_modules/service_context_migration.md b/docs/docs/module_guides/supporting_modules/service_context_migration.md
similarity index 98%
rename from docs/module_guides/supporting_modules/service_context_migration.md
rename to docs/docs/module_guides/supporting_modules/service_context_migration.md
index ae1133df39b42fbdae91ecf9c2789c80100a1b19..f7e81ae86f06048d8cbebf43eb91533f569a167d 100644
--- a/docs/module_guides/supporting_modules/service_context_migration.md
+++ b/docs/docs/module_guides/supporting_modules/service_context_migration.md
@@ -21,7 +21,7 @@ Settings.embed_model = HuggingFaceEmbedding(
 
 Now with this settings, you can ensure OpenAI will never be used in the framework.
 
-The `Settings` object supports nearly all the same attributes as the old `ServiceConext`. A complete list can be found in the [docs page](/module_guides/supporting_modules/settings.md).
+The `Settings` object supports nearly all the same attributes as the old `ServiceConext`. A complete list can be found in the [docs page](settings.md).
 
 ### Complete Migration
 
diff --git a/docs/module_guides/supporting_modules/settings.md b/docs/docs/module_guides/supporting_modules/settings.md
similarity index 92%
rename from docs/module_guides/supporting_modules/settings.md
rename to docs/docs/module_guides/supporting_modules/settings.md
index 76f9e7631aeb75de0ad9f1d97b2ae2856cda4456..3f19603a255c1ff0b71df5d3bf333d8c6a7c670f 100644
--- a/docs/module_guides/supporting_modules/settings.md
+++ b/docs/docs/module_guides/supporting_modules/settings.md
@@ -109,13 +109,8 @@ Settings.context_window = 4096
 Settings.num_output = 256
 ```
 
-```{tip}
-Learn how to configure specific modules:
-- [LLM](/module_guides/models/llms/usage_custom.md)
-- [Embedding Model](/module_guides/models/embeddings.md)
-- [Node Parser/Text Splitters](/module_guides/loading/node_parsers/root.md)
-- [Callbacks](/module_guides/observability/callbacks/root.md)
-```
+!!! tip
+Learn how to configure specific modules: - [LLM](../models/llms/usage_custom.md) - [Embedding Model](../models/embeddings.md) - [Node Parser/Text Splitters](../loading/node_parsers/index.md) - [Callbacks](../observability/callbacks/index.md)
 
 ## Setting local configurations
 
diff --git a/docs/module_guides/supporting_modules/supporting_modules.md b/docs/docs/module_guides/supporting_modules/supporting_modules.md
similarity index 73%
rename from docs/module_guides/supporting_modules/supporting_modules.md
rename to docs/docs/module_guides/supporting_modules/supporting_modules.md
index 6343f450773cf6263de4f7573b4c14d3c6a00f18..53cb322c58610c30a3904b7f7bcd79366c6aa029 100644
--- a/docs/module_guides/supporting_modules/supporting_modules.md
+++ b/docs/docs/module_guides/supporting_modules/supporting_modules.md
@@ -3,12 +3,4 @@
 We have two configuration modules that can be configured separately and passed to individual indexes, or set globally.
 
 - The [Settings](settings.md) includes the LLM you're using, the embedding model, your node parser, your callback manager and more.
-- The `StorageContext` lets you specify where and how to store your documents, your vector embeddings, and your indexes. To learn more, read about [customizing storage](/module_guides/storing/customization.md)
-
-```{toctree}
----
-maxdepth: 1
-hidden: true
----
-settings.md
-```
+- The `StorageContext` lets you specify where and how to store your documents, your vector embeddings, and your indexes. To learn more, read about [customizing storage](../storing/customization.md)
diff --git a/docs/docs/node_postprocessors/prev_next.png b/docs/docs/node_postprocessors/prev_next.png
new file mode 100644
index 0000000000000000000000000000000000000000..2249cdb2943daa89c714619e8ddaa8e75aa4ae4e
Binary files /dev/null and b/docs/docs/node_postprocessors/prev_next.png differ
diff --git a/docs/docs/node_postprocessors/recency.png b/docs/docs/node_postprocessors/recency.png
new file mode 100644
index 0000000000000000000000000000000000000000..c46c975b5c90baeb7859b031df9ce1496c406c72
Binary files /dev/null and b/docs/docs/node_postprocessors/recency.png differ
diff --git a/docs/docs/optimizing/advanced_retrieval/advanced_retrieval.md b/docs/docs/optimizing/advanced_retrieval/advanced_retrieval.md
new file mode 100644
index 0000000000000000000000000000000000000000..8b780ac15cedd87fd2c4b81c609dc1fd5457f6ce
--- /dev/null
+++ b/docs/docs/optimizing/advanced_retrieval/advanced_retrieval.md
@@ -0,0 +1,49 @@
+# Advanced Retrieval Strategies
+
+## Main Advanced Retrieval Strategies
+
+There are a variety of more advanced retrieval strategies you may wish to try, each with different benefits:
+
+- {ref}`Reranking <cohere_rerank>`
+- [Recursive retrieval](../../examples/query_engine/pdf_tables/recursive_retriever.ipynb)
+- [Embedded tables](../../examples/query_engine/sec_tables/tesla_10q_table.ipynb)
+- [Small-to-big retrieval](../../examples/node_postprocessor/MetadataReplacementDemo.ipynb)
+
+See our full [retrievers module guide](../../module_guides/querying/retriever/retrievers.md) for a comprehensive list of all retrieval strategies, broken down into different categories.
+
+- Basic retrieval from each index
+- Advanced retrieval and search
+- Auto-Retrieval
+- Knowledge Graph Retrievers
+- Composed/Hierarchical Retrievers
+- and more!
+
+More resources are below.
+
+## Query Transformations
+
+A user query can be transformed before it enters a pipeline (query engine, agent, and more). See resources below on query transformations:
+
+- [Query Transform Cookbook](../../examples/query_transformations/query_transform_cookbook.ipynb)
+- [Query Transformations Docs](../../optimizing/advanced_retrieval/query_transformations.md)
+
+## Composable Retrievers
+
+Every retriever is capable of retrieving and running other objects, including
+
+- other retrievers
+- query engines
+- query pipelines
+- other nodes
+
+For more details, check out the guide below.
+
+- [Composable Retrievers](../../examples/retrievers/composable_retrievers.ipynb)
+
+## Third-Party Resources
+
+Here are some third-party resources on advanced retrieval strategies.
+
+- [DeepMemory (Activeloop)](../../examples/retrievers/deep_memory.ipynb)
+- [Weaviate Hybrid Search](../../examples/vector_stores/WeaviateIndexDemo-Hybrid.ipynb)
+- [Pinecone Hybrid Search](../../examples/vector_stores/PineconeIndexDemo-Hybrid.ipynb)
diff --git a/docs/optimizing/advanced_retrieval/query_transformations.md b/docs/docs/optimizing/advanced_retrieval/query_transformations.md
similarity index 93%
rename from docs/optimizing/advanced_retrieval/query_transformations.md
rename to docs/docs/optimizing/advanced_retrieval/query_transformations.md
index 8dbe05bd5dafc7a544998ff63445b4b810e5febf..80b66ce5f9bee0600dd2c0150dbf6c0b8c96d471 100644
--- a/docs/optimizing/advanced_retrieval/query_transformations.md
+++ b/docs/docs/optimizing/advanced_retrieval/query_transformations.md
@@ -56,7 +56,7 @@ Given the response (along with prior responses) and the query, follow-up questio
 
 An example image is shown below.
 
-![](/_static/query_transformations/multi_step_diagram.png)
+![](../../_static/query_transformations/multi_step_diagram.png)
 
 Here's a corresponding example code snippet.
 
@@ -81,11 +81,5 @@ print(str(response))
 
 Check out our [example notebook](https://github.com/jerryjliu/llama_index/blob/main/examples/vector_indices/SimpleIndexDemo-multistep.ipynb) for a full walkthrough.
 
-```{toctree}
----
-caption: Examples
-maxdepth: 1
----
-/examples/query_transformations/HyDEQueryTransformDemo.ipynb
-/examples/query_transformations/SimpleIndexDemo-multistep.ipynb
-```
+- [HyDE Query Transform](../../examples/query_transformations/HyDEQueryTransformDemo.ipynb)
+- [Multistep Query](../../examples/query_transformations/SimpleIndexDemo-multistep.ipynb)
diff --git a/docs/docs/optimizing/agentic_strategies/agentic_strategies.md b/docs/docs/optimizing/agentic_strategies/agentic_strategies.md
new file mode 100644
index 0000000000000000000000000000000000000000..dea1bbdbdbc70740b749ce5983610afd9334c497
--- /dev/null
+++ b/docs/docs/optimizing/agentic_strategies/agentic_strategies.md
@@ -0,0 +1,29 @@
+# Agentic strategies
+
+You can build agents on top of your existing LlamaIndex RAG pipeline to empower it with automated decision capabilities.
+A lot of modules (routing, query transformations, and more) are already agentic in nature in that they use LLMs for decision making.
+
+## Simpler Agentic Strategies
+
+These include routing and query transformations.
+
+- [Routing](../../module_guides/querying/router/index.md)
+- [Query Transformations](../../optimizing/advanced_retrieval/query_transformations.md)
+- [Sub Question Query Engine (Intro)](../../examples/query_engine/sub_question_query_engine.ipynb)
+
+## Data Agents
+
+This guides below show you how to deploy a full agent loop, capable of chain-of-thought and query planning, on top of existing RAG query engines as tools for more advanced decision making.
+
+Make sure to check out our [full module guide on Data Agents](../../module_guides/deploying/agents/index.md), which highlight these use cases and much more.
+
+Our [lower-level agent API](../../module_guides/deploying/agents/agent_runner.md) shows you the internals of how an agent works (with step-wise execution).
+
+Example guides below (using OpenAI function calling):
+
+- [OpenAIAgent](../../examples/agent/openai_agent.ipynb)
+- [OpenAIAgent with Query Engine Tools](../../examples/agent/openai_agent_with_query_engine.ipynb)
+- [OpenAIAgent Retrieval](../../examples/agent/openai_agent_retrieval.ipynb)
+- [OpenAIAgent Query Cookbook](../../examples/agent/openai_agent_query_cookbook.ipynb)
+- [OpenAIAgent Query Planning](../../examples/agent/openai_agent_query_plan.ipynb)
+- [OpenAIAgent Context Retrieval](../../examples/agent/openai_agent_context_retrieval.ipynb)
diff --git a/docs/optimizing/basic_strategies/basic_strategies.md b/docs/docs/optimizing/basic_strategies/basic_strategies.md
similarity index 78%
rename from docs/optimizing/basic_strategies/basic_strategies.md
rename to docs/docs/optimizing/basic_strategies/basic_strategies.md
index 1514fff48d7e4ed6fd04de83793b79e9cdc9ab67..ad5db5e9febfd5341e49f3a7545f14ceeb24bb00 100644
--- a/docs/optimizing/basic_strategies/basic_strategies.md
+++ b/docs/docs/optimizing/basic_strategies/basic_strategies.md
@@ -11,23 +11,13 @@ Some tasks are listed below, from simple to advanced.
 
 1. Try inspecting the prompts used in your RAG pipeline (e.g. the question–answering prompt) and customizing it.
 
-```{toctree}
----
-maxdepth: 1
----
-/examples/prompts/prompt_mixin.ipynb
-/examples/prompts/advanced_prompts.ipynb
-```
+- [Customizing Prompts](../../examples/prompts/prompt_mixin.ipynb)
+- [Advanced Prompts](../../examples/prompts/advanced_prompts.ipynb)
 
 2. Try adding **prompt functions**, allowing you to dynamically inject few-shot examples or process the injected inputs.
 
-```{toctree}
----
-maxdepth: 1
----
-/examples/prompts/advanced_prompts.ipynb
-/examples/prompts/prompts_rag.ipynb
-```
+- [Advanced Prompts](../../examples/prompts/advanced_prompts.ipynb)
+- [RAG Prompts](../../examples/prompts/prompts_rag.ipynb)
 
 ## Embeddings
 
@@ -43,7 +33,7 @@ A great resource to check on the current best overall embeddings models is the [
 
 **NOTE:** Unlike an LLM (which you can change at any time), if you change your embedding model, you must re-index your data. Furthermore, you should ensure the same embedding model is used for both indexing and querying.
 
-We have a list of [all supported embedding model integrations](/module_guides/models/embeddings.md).
+We have a list of [all supported embedding model integrations](../../module_guides/models/embeddings.md).
 
 ## Chunk Sizes
 
@@ -85,20 +75,15 @@ Embeddings are not perfect, and may fail to return text chunks with matching key
 
 The solution to this issue is often hybrid search. In LlamaIndex, there are two main ways to achieve this:
 
-1. Use a vector database that has a hybrid search functionality (see [our complete list of supported vector stores](/module_guides/storing/vector_stores.md)).
+1. Use a vector database that has a hybrid search functionality (see [our complete list of supported vector stores](../../module_guides/storing/vector_stores.md)).
 2. Set up a local hybrid search mechanism with BM25.
 
 Relevant guides with both approaches can be found below:
 
-```{toctree}
----
-maxdepth: 1
----
-/examples/retrievers/bm25_retriever.ipynb
-/examples/retrievers/reciprocal_rerank_fusion.ipynb
-/examples/vector_stores/WeaviateIndexDemo-Hybrid.ipynb
-/examples/vector_stores/PineconeIndexDemo-Hybrid.ipynb
-```
+- [BM25 Retriever](../../examples/retrievers/bm25_retriever.ipynb)
+- [Reciprocal Rerank Query Fusion](../../examples/retrievers/reciprocal_rerank_fusion.ipynb)
+- [Weaviate Hybrid Search](../../examples/vector_stores/WeaviateIndexDemo-Hybrid.ipynb)
+- [Pinecone Hybrid Search](../../examples/vector_stores/PineconeIndexDemo-Hybrid.ipynb)
 
 ## Metadata Filters
 
@@ -123,27 +108,17 @@ index = VectorStoreIndex.from_documents(documents)
 query_engine = index.as_query_engine(filters=filters)
 ```
 
-If you are using an advanced LLM like GPT-4, and your [vector database supports filtering](/module_guides/storing/vector_stores.md), you can get the LLM to write filters automatically at query time, using an `AutoVectorRetriever`.
+If you are using an advanced LLM like GPT-4, and your [vector database supports filtering](../../module_guides/storing/vector_stores.md), you can get the LLM to write filters automatically at query time, using an `AutoVectorRetriever`.
 
-```{toctree}
----
-maxdepth: 1
----
-/module_guides/indexing/vector_store_guide.ipynb
-```
+- [Vector Store Guide](../../module_guides/indexing/vector_store_guide.ipynb)
 
 ## Document/Node Usage
 
 Take a look at our in-depth guides for more details on how to use Documents/Nodes.
 
-```{toctree}
----
-maxdepth: 1
----
-/module_guides/loading/documents_and_nodes/usage_documents.md
-/module_guides/loading/documents_and_nodes/usage_nodes.md
-/module_guides/loading/documents_and_nodes/usage_metadata_extractor.md
-```
+- [Documents Usage](../../module_guides/loading/documents_and_nodes/usage_documents.md)
+- [Nodes Usage](../../module_guides/loading/documents_and_nodes/usage_nodes.md)
+- [Metadata Extraction](../../module_guides/loading/documents_and_nodes/usage_metadata_extractor.md)
 
 ## Multi-Tenancy RAG
 
@@ -151,11 +126,6 @@ Multi-Tenancy in RAG systems is crucial for ensuring data security. It enables u
 
 Refer the guides below for more details.
 
-```{toctree}
----
-maxdepth: 1
----
-/examples/multi_tenancy/multi_tenancy_rag.ipynb
-```
+- [Multi Tenancy RAG](../../examples/multi_tenancy/multi_tenancy_rag.ipynb)
 
 For detailed guidance on implementing Multi-Tenancy RAG with LlamaIndex and Qdrant, refer to the [blog post](https://qdrant.tech/documentation/tutorials/llama-index-multitenancy/) released by Qdrant.
diff --git a/docs/optimizing/building_rag_from_scratch.md b/docs/docs/optimizing/building_rag_from_scratch.md
similarity index 79%
rename from docs/optimizing/building_rag_from_scratch.md
rename to docs/docs/optimizing/building_rag_from_scratch.md
index a9686038dca3749807790946e72bb1a05b3895b4..f041c5d9d10959ba897d229a632c1cd8e0c6991c 100644
--- a/docs/optimizing/building_rag_from_scratch.md
+++ b/docs/docs/optimizing/building_rag_from_scratch.md
@@ -16,35 +16,20 @@ We show how to build an app from scratch, component by component. For the sake o
 
 This tutorial shows how you can define an ingestion pipeline into a vector store.
 
-```{toctree}
----
-maxdepth: 1
----
-/examples/low_level/ingestion.ipynb
-```
+- [Ingestion from scratch](../examples/low_level/ingestion.ipynb)
 
 ## Building Vector Retrieval from Scratch
 
 This tutorial shows you how to build a retriever to query a vector store.
 
-```{toctree}
----
-maxdepth: 1
----
-/examples/low_level/retrieval.ipynb
-```
+- [Vector Retrieval from Scratch](../examples/low_level/retrieval.ipynb)
 
 ## Building Ingestion/Retrieval from Scratch (Open-Source/Local Components)
 
 This tutoral shows you how to build an ingestion/retrieval pipeline using only
 open-source components.
 
-```{toctree}
----
-maxdepth: 1
----
-/examples/low_level/oss_ingestion_retrieval.ipynb
-```
+- [Open Source RAG](../examples/low_level/oss_ingestion_retrieval.ipynb)
 
 ## Building a (Very Simple) Vector Store from Scratch
 
@@ -52,34 +37,19 @@ If you want to learn more about how vector stores work, here's a tutorial showin
 
 Obviously not a replacement for production databases.
 
-```{toctree}
----
-maxdepth: 1
----
-/examples/low_level/vector_store.ipynb
-```
+- [Vector Store from Scratch](../examples/low_level/vector_store.ipynb)
 
 ## Building Response Synthesis from Scratch
 
 This tutorial shows you how to use the LLM to synthesize results given a set of retrieved context. Deals with context overflows, async calls, and source citations!
 
-```{toctree}
----
-maxdepth: 1
----
-/examples/low_level/response_synthesis.ipynb
-```
+- [Response Synthesis from Scratch](../examples/low_level/response_synthesis.ipynb)
 
 ## Building Evaluation from Scratch
 
 Learn how to build common LLM-based eval modules (correctness, faithfulness) using LLMs and prompt modules; this will help you define your own custom evals!
 
-```{toctree}
----
-maxdepth: 1
----
-/examples/low_level/evaluation.ipynb
-```
+- [Evaluation from Scratch](../examples/low_level/evaluation.ipynb)
 
 ## Building Advanced RAG from Scratch
 
@@ -89,34 +59,19 @@ These tutorials will show you how to build advanced functionality beyond the bas
 
 Hybrid search is an advanced retrieval feature supported by many vector databases. It allows you to combine **dense** retrieval with **sparse** retrieval with matching keywords.
 
-```{toctree}
----
-maxdepth: 1
----
-Building Hybrid Search from Scratch </examples/vector_stores/qdrant_hybrid.ipynb>
-```
+- [Building Hybrid Search from Scratch](../examples/vector_stores/qdrant_hybrid.ipynb)
 
 ### Building a Router from Scratch
 
 Beyond the standard RAG pipeline, this takes you one step towards automated decision making with LLMs by showing you how to build a router module from scratch.
 
-```{toctree}
----
-maxdepth: 1
----
-/examples/low_level/router.ipynb
-```
+- [Router from Scratch](../examples/low_level/router.ipynb)
 
 ### Building RAG Fusion Retriever from Scratch
 
 Here we show you how to build an advanced retriever capable of query-rewriting, ensembling, dynamic retrieval.
 
-```{toctree}
----
-maxdepth: 1
----
-/examples/low_level/fusion_retriever.ipynb
-```
+- [Fusion Retrieval from Scratch](../examples/low_level/fusion_retriever.ipynb)
 
 ## Building QA over Structured Data from Scratch
 
@@ -124,10 +79,5 @@ RAG as a framework is primarily focused on unstructured data. LlamaIndex also ha
 
 Take a look at our guides below to see how to build text-to-SQL and text-to-Pandas from scratch (using our Query Pipeline syntax).
 
-```{toctree}
----
-maxdepth: 1
----
-/examples/pipeline/query_pipeline_sql.ipynb
-/examples/pipeline/query_pipeline_pandas.ipynb
-```
+- [Text-to-SQL from Scratch](../examples/pipeline/query_pipeline_sql.ipynb)
+- [Text-to-Pandas from Scratch](../examples/pipeline/query_pipeline_pandas.ipynb)
diff --git a/docs/docs/optimizing/custom_modules.md b/docs/docs/optimizing/custom_modules.md
new file mode 100644
index 0000000000000000000000000000000000000000..3f6e07d2ba9b219ab5060c99f4e39a899d9cc731
--- /dev/null
+++ b/docs/docs/optimizing/custom_modules.md
@@ -0,0 +1,53 @@
+# Writing Custom Modules
+
+A core design principle of LlamaIndex is that **almost every core module can be subclassed and customized**.
+
+This allows you to use LlamaIndex for any advanced LLM use case, beyond the capabilities offered by our prepackaged modules. You're free to write as much custom code for any given module, but still take advantage of our lower-level abstractions and also plug this module along with other components.
+
+We offer convenient/guided ways to subclass our modules, letting you write your custom logic without having to worry about having to define all boilerplate (for instance, [callbacks](../module_guides/observability/callbacks/index.md)).
+
+This guide centralizes all the resources around writing custom modules in LlamaIndex. Check them out below 👇
+
+## Custom LLMs
+
+- [Custom LLMs](../module_guides/models/llms/usage_custom.md#example-using-a-custom-llm-model---advanced)
+
+## Custom Embeddings
+
+- [Custom Embedding Model](../module_guides/models/embeddings.md#custom-embedding-model)
+
+## Custom Output Parsers
+
+- [Custom Output Parsers](../examples/output_parsing/llm_program.ipynb)
+
+## Custom Transformations
+
+- [Custom Transformations](../module_guides/loading/ingestion_pipeline/transformations.md#custom-transformations)
+
+## Custom Retrievers
+
+- [Custom Retrievers](../examples/query_engine/CustomRetrievers.ipynb)
+
+## Custom Postprocessors/Rerankers
+
+- [Custom Node Postprocessor](./custom_modules.md#custom-postprocessorsrerankers)
+
+## Custom Query Engines
+
+- [Custom Query Engine](../examples/query_engine/custom_query_engine.ipynb)
+
+## Custom Agents
+
+- [Custom Agents](../examples/agent/custom_agent.ipynb)
+
+## Custom Query Components (for use in Query Pipeline)
+
+- [Custom Query Component](../module_guides/querying/pipeline/usage_pattern.md#defining-a-custom-query-component)
+
+## Other Ways of Customization
+
+Some modules can be customized heavily within your workflows but not through subclassing (and instead through parameters or functions we expose). We list these in guides below:
+
+- [Customizing Documents](../module_guides/loading/documents_and_nodes/usage_documents.md)
+- [Customizing Nodes](../module_guides/loading/documents_and_nodes/usage_nodes.md)
+- [Customizing Prompts within Higher-Level Modules](../examples/prompts/prompt_mixin.ipynb)
diff --git a/docs/optimizing/evaluation/component_wise_evaluation.md b/docs/docs/optimizing/evaluation/component_wise_evaluation.md
similarity index 93%
rename from docs/optimizing/evaluation/component_wise_evaluation.md
rename to docs/docs/optimizing/evaluation/component_wise_evaluation.md
index 1470f18db87b4daa7cab6285388bd2ef691858a9..c435a0cbf93fc8d2a21024417ba7efefbf636d40 100644
--- a/docs/optimizing/evaluation/component_wise_evaluation.md
+++ b/docs/docs/optimizing/evaluation/component_wise_evaluation.md
@@ -22,12 +22,7 @@ For instance, after fine-tuning an embedding model on your dataset, it may be he
 
 Here is a notebook showing how the BEIR dataset can be used with your retrieval pipeline.
 
-```{toctree}
----
-maxdepth: 1
----
-/examples/evaluation/BeirEvaluation.ipynb
-```
+- [BEIR Evaluation](../../examples/evaluation/BeirEvaluation.ipynb)
 
 We will be adding more methods to evaluate retrieval soon. This includes evaluating retrieval on your own dataset.
 
@@ -41,12 +36,7 @@ The HotpotQA dataset is useful for evaluating queries that require multiple retr
 
 Example:
 
-```{toctree}
----
-maxdepth: 1
----
-/examples/evaluation/HotpotQADistractor.ipynb
-```
+- [HotpotQA Eval](../../examples/evaluation/HotpotQADistractor.ipynb)
 
 Limitations:
 
diff --git a/docs/optimizing/evaluation/e2e_evaluation.md b/docs/docs/optimizing/evaluation/e2e_evaluation.md
similarity index 84%
rename from docs/optimizing/evaluation/e2e_evaluation.md
rename to docs/docs/optimizing/evaluation/e2e_evaluation.md
index bf197e22eb636d9d661e6d520fad7fe23227eea1..eb057e089363ffddbbda67e822923a7d173ca225 100644
--- a/docs/optimizing/evaluation/e2e_evaluation.md
+++ b/docs/docs/optimizing/evaluation/e2e_evaluation.md
@@ -10,12 +10,7 @@ It is helpful to start off with a small but diverse set of queries, and build up
 
 We've created some tools that automatically generate a dataset for you given a set of documents to query. (See example below).
 
-```{toctree}
----
-maxdepth: 1
----
-/examples/evaluation/QuestionGeneration.ipynb
-```
+- [Question Generation](../../examples/evaluation/QuestionGeneration.ipynb)
 
 In the future, we will also be able to create datasets automatically against tools.
 
@@ -29,18 +24,13 @@ There is a spectrum of evaluation options ranging from metrics, cheaper models,
 
 Below is some example usage of the [evaluation modules](evaluation.md):
 
-```{toctree}
----
-maxdepth: 1
----
-/examples/evaluation/batch_eval.ipynb
-/examples/evaluation/correctness_eval.ipynb
-/examples/evaluation/faithfulness_eval.ipynb
-/examples/evaluation/guideline_eval.ipynb
-/examples/evaluation/pairwise_eval.ipynb
-/examples/evaluation/relevancy_eval.ipynb
-/examples/evaluation/semantic_similarity_eval.ipynb
-```
+- [Batch Eval Runner](../../examples/evaluation/batch_eval.ipynb)
+- [Correctness Eval](../../examples/evaluation/correctness_eval.ipynb)
+- [Faithfulness Eval](../../examples/evaluation/faithfulness_eval.ipynb)
+- [Guideline Eval](../../examples/evaluation/guideline_eval.ipynb)
+- [Pairwise Eval](../../examples/evaluation/pairwise_eval.ipynb)
+- [Relevancy Eval](../../examples/evaluation/relevancy_eval.ipynb)
+- [Semantic Similarity Eval](../../examples/evaluation/semantic_similarity_eval.ipynb)
 
 ## Discovery - Sensitivity Testing
 
diff --git a/docs/optimizing/evaluation/evaluation.md b/docs/docs/optimizing/evaluation/evaluation.md
similarity index 92%
rename from docs/optimizing/evaluation/evaluation.md
rename to docs/docs/optimizing/evaluation/evaluation.md
index 8aaf9631b82e7840589321427a9823f88b1aebad..4dcc118424e9f2e4f070197ca13909f86a7471ae 100644
--- a/docs/optimizing/evaluation/evaluation.md
+++ b/docs/docs/optimizing/evaluation/evaluation.md
@@ -16,22 +16,12 @@ When developing your LLM application, it could help to first define an end-to-en
 
 The analogy with software testing is integration tests and unit tests. You should probably start writing unit tests once you start fiddling with individual components. Equally, your gold standard on whether things are working well together are integration tests. Both are equally important.
 
-```{toctree}
----
-maxdepth: 1
----
-/optimizing/evaluation/e2e_evaluation.md
-/optimizing/evaluation/component_wise_evaluation.md
-```
+- [End-to-end Evaluation](./e2e_evaluation.md)
+- [Component-Wise Evaluation](./component_wise_evaluation.md)
 
 Here is an overview of the existing modules for evaluation. We will be adding more modules and support over time.
 
-```{toctree}
----
-maxdepth: 1
----
-/module_guides/evaluating/root.md
-```
+- [Evaluation Overview](../../module_guides/evaluating/index.md)
 
 ### E2E or Component-Wise - Which Do I Start With?
 
@@ -64,7 +54,7 @@ This [towardsdatascience article](https://towardsdatascience.com/ranking-evaluat
 2. [Scale's Approach to LLM Testing and Evaluation](https://scale.com/llm-test-evaluation)
 3. [LLM Patterns by Eugene Yan](https://eugeneyan.com/writing/llm-patterns/)
 
-```{toctree}
-component_wise_evaluation.md
-e2e_evaluation.md
-```
+## Resources
+
+- [Component-Wise Evaluation](./component_wise_evaluation.md)
+- [End-to-end Evaluation](./e2e_evaluation.md)
diff --git a/docs/optimizing/fine-tuning/fine-tuning.md b/docs/docs/optimizing/fine-tuning/fine-tuning.md
similarity index 59%
rename from docs/optimizing/fine-tuning/fine-tuning.md
rename to docs/docs/optimizing/fine-tuning/fine-tuning.md
index d3ecf06f91ca9618bd049641ec0d491b89300519..96c6062b9c4e89910918ec78aa542f3a707d3996 100644
--- a/docs/optimizing/fine-tuning/fine-tuning.md
+++ b/docs/docs/optimizing/fine-tuning/fine-tuning.md
@@ -37,24 +37,14 @@ We've created comprehensive guides showing you how to finetune embeddings in dif
 
 Finetuning gives you a 5-10% increase in retrieval evaluation metrics. You can then plug this fine-tuned model into your RAG application with LlamaIndex.
 
-```{toctree}
----
-maxdepth: 1
----
-Fine-tuning an Adapter </examples/finetuning/embeddings/finetune_embedding_adapter.ipynb>
-Embedding Fine-tuning Guide </examples/finetuning/embeddings/finetune_embedding.ipynb>
-Router Fine-tuning </examples/finetuning/router/router_finetune.ipynb>
-```
+- [Fine-tuning an Adapter](../../examples/finetuning/embeddings/finetune_embedding_adapter.ipynb)
+- [Embedding Fine-tuning Guide](../../examples/finetuning/embeddings/finetune_embedding.ipynb)
+- [Router Fine-tuning](../../examples/finetuning/router/router_finetune.ipynb)
 
 **Old**
 
-```{toctree}
----
-maxdepth: 1
----
-Embedding Fine-tuning Repo <https://github.com/run-llama/finetune-embedding>
-Embedding Fine-tuning Blog <https://medium.com/llamaindex-blog/fine-tuning-embeddings-for-rag-with-synthetic-data-e534409a3971>
-```
+- [Embedding Fine-tuning Repo](https://github.com/run-llama/finetune-embedding)
+- [Embedding Fine-tuning Blog](https://medium.com/llamaindex-blog/fine-tuning-embeddings-for-rag-with-synthetic-data-e534409a3971)
 
 ## Fine-tuning LLMs
 
@@ -66,63 +56,23 @@ We use GPT-4 to automatically generate questions from any unstructured context,
 
 We then launch a finetuning job, and get back a distilled model. We can evaluate this model with [Ragas](https://github.com/explodinggradients/ragas) to benchmark against a naive GPT-3.5 pipeline.
 
-```{toctree}
----
-maxdepth: 1
----
-GPT-3.5 Fine-tuning Notebook (Colab) <https://colab.research.google.com/drive/1NgyCJVyrC2xcZ5lxt2frTU862v6eJHlc?usp=sharing>
-GPT-3.5 Fine-tuning Notebook (Notebook link) </examples/finetuning/openai_fine_tuning.ipynb>
-/examples/finetuning/react_agent/react_agent_finetune.ipynb
-[WIP] Function Calling Fine-tuning </examples/finetuning/openai_fine_tuning_functions.ipynb>
-```
+- [GPT-3.5 Fine-tuning Notebook (Colab)](https://colab.research.google.com/drive/1NgyCJVyrC2xcZ5lxt2frTU862v6eJHlc?usp=sharing)
+- [GPT-3.5 Fine-tuning Notebook (Notebook link)](../../examples/finetuning/openai_fine_tuning.ipynb)
+  /examples/finetuning/react_agent/react_agent_finetune.ipynb
+- [[WIP] Function Calling Fine-tuning](../../examples/finetuning/openai_fine_tuning_functions.ipynb)
 
 **Old**
 
-```{toctree}
----
-maxdepth: 1
----
-GPT-3.5 Fine-tuning Notebook (Colab) <https://colab.research.google.com/drive/1vWeJBXdFEObuihO7Z8ui2CAYkdHQORqo?usp=sharing>
-GPT-3.5 Fine-tuning Notebook (in Repo) <https://github.com/jerryjliu/llama_index/blob/main/experimental/openai_fine_tuning/openai_fine_tuning.ipynb>
-```
-
-### Fine-tuning with Retrieval Augmentation
-
-Here we try fine-tuning an LLM with retrieval-augmented inputs, as referenced from the RA-DIT paper: https://arxiv.org/abs/2310.01352.
-
-The core idea is to allow the LLM to better use the context from a given retriever or ignore it entirely.
-
-```{toctree}
----
-maxdepth: 1
----
-/examples/finetuning/knowledge/finetune_retrieval_aug.ipynb
-```
+- [GPT-3.5 Fine-tuning Notebook (Colab)](https://colab.research.google.com/drive/1vWeJBXdFEObuihO7Z8ui2CAYkdHQORqo?usp=sharing)
+- [GPT-3.5 Fine-tuning Notebook (in Repo)](https://github.com/jerryjliu/llama_index/blob/main/experimental/openai_fine_tuning/openai_fine_tuning.ipynb)
 
 ### Fine-tuning for Better Structured Outputs
 
 Another use case for fine-tuning is to make the model better at outputting structured data.
 We can do this for both OpenAI and Llama2.
 
-```{toctree}
----
-maxdepth: 1
----
-OpenAI Function Calling Fine-tuning </examples/finetuning/openai_fine_tuning_functions.ipynb>
-Llama2 Structured Output Fine-tuning </examples/finetuning/gradient/gradient_structured.ipynb>
-```
-
-### [WIP] Fine-tuning GPT-3.5 to Memorize Knowledge
-
-We have a guide experimenting with showing how to use OpenAI fine-tuning to memorize a body of text.
-Still WIP! Not quite as good as RAG yet.
-
-```{toctree}
----
-maxdepth: 1
----
-/examples/finetuning/knowledge/finetune_knowledge.ipynb
-```
+- [OpenAI Function Calling Fine-tuning](../../examples/finetuning/openai_fine_tuning_functions.ipynb)
+- [Llama2 Structured Output Fine-tuning](../../examples/finetuning/gradient/gradient_structured.ipynb)
 
 ### Fine-tuning Llama 2 for Better Text-to-SQL
 
@@ -130,14 +80,9 @@ In this tutorial, we show you how you can finetune Llama 2 on a text-to-SQL data
 
 The stack includes `sql-create-context` as the training dataset, OpenLLaMa as the base model, PEFT for finetuning, Modal for cloud compute, LlamaIndex for inference abstractions.
 
-```{toctree}
----
-maxdepth: 1
----
-Llama 2 Text-to-SQL Fine-tuning (w/ Gradient.AI) </examples/finetuning/gradient/gradient_fine_tuning.ipynb>
-Llama 2 Text-to-SQL Fine-tuning (w/ Modal, Repo) <https://github.com/run-llama/modal_finetune_sql>
-Llama 2 Text-to-SQL Fine-tuning (w/ Modal, Notebook) <https://github.com/run-llama/modal_finetune_sql/blob/main/tutorial.ipynb>
-```
+- [Llama 2 Text-to-SQL Fine-tuning (w/ Gradient.AI)](../../examples/finetuning/gradient/gradient_fine_tuning.ipynb)
+- [Llama 2 Text-to-SQL Fine-tuning (w/ Modal, Repo)](https://github.com/run-llama/modal_finetune_sql)
+- [Llama 2 Text-to-SQL Fine-tuning (w/ Modal, Notebook)](https://github.com/run-llama/modal_finetune_sql/blob/main/tutorial.ipynb)
 
 ### Fine-tuning An Evaluator
 
@@ -148,13 +93,8 @@ see https://arxiv.org/pdf/2306.05685.pdf).
 Thus, by fine-tuning a GPT-3.5 judge, we may be able to reach GPT-4 levels (and
 by proxy, agreement with humans) at a lower cost.
 
-```{toctree}
----
-maxdepth: 1
----
-/examples/finetuning/llm_judge/correctness/finetune_llm_judge_single_grading_correctness.ipynb
-/examples/finetuning/llm_judge/pairwise/finetune_llm_judge.ipynb
-```
+- [Finetune Correctness Judge](../../examples/finetuning/llm_judge/correctness/finetune_llm_judge_single_grading_correctness.ipynb)
+- [Finetune LLM Judge](../../examples/finetuning/llm_judge/pairwise/finetune_llm_judge.ipynb)
 
 ## Fine-tuning Cross-Encoders for Re-Ranking
 
@@ -165,14 +105,9 @@ are first.
 
 In this example, we use the `sentence-transformers` package to help finetune a crossencoder model, using a dataset that is generated based on the `QASPER` dataset.
 
-```{toctree}
----
-maxdepth: 1
----
-Cross-Encoder Finetuning </examples/finetuning/cross_encoder_finetuning/cross_encoder_finetuning.ipynb>
-Finetuning Llama 2 for Text-to-SQL <https://medium.com/llamaindex-blog/easily-finetune-llama-2-for-your-text-to-sql-applications-ecd53640e10d>
-Finetuning GPT-3.5 to Distill GPT-4 <https://colab.research.google.com/drive/1vWeJBXdFEObuihO7Z8ui2CAYkdHQORqo?usp=sharing>
-```
+- [Cross-Encoder Finetuning](../../examples/finetuning/cross_encoder_finetuning/cross_encoder_finetuning.ipynb)
+- [Finetuning Llama 2 for Text-to-SQL](https://medium.com/llamaindex-blog/easily-finetune-llama-2-for-your-text-to-sql-applications-ecd53640e10d)
+- [Finetuning GPT-3.5 to Distill GPT-4](https://colab.research.google.com/drive/1vWeJBXdFEObuihO7Z8ui2CAYkdHQORqo?usp=sharing)
 
 ## Cohere Custom Reranker
 
@@ -182,9 +117,4 @@ Re-ranking is a crucial step in advanced retrieval processes. This step involves
 
 In this example, we use the `cohere` custom reranker training module to create a reranker on your domain or specific dataset to improve retrieval performance.
 
-```{toctree}
----
-maxdepth: 1
----
-Cohere Custom Reranker </examples/finetuning/rerankers/cohere_custom_reranker.ipynb>
-```
+- [Cohere Custom Reranker](../../examples/finetuning/rerankers/cohere_custom_reranker.ipynb)
diff --git a/docs/optimizing/production_rag.md b/docs/docs/optimizing/production_rag.md
similarity index 77%
rename from docs/optimizing/production_rag.md
rename to docs/docs/optimizing/production_rag.md
index 336b0d1a867793e834b9bf0c2567ca7c27db6518..ab61d80aa6d929518257d345d5c406ceb6fdb6c5 100644
--- a/docs/optimizing/production_rag.md
+++ b/docs/docs/optimizing/production_rag.md
@@ -26,7 +26,7 @@ Check out [this Tweet thread](https://twitter.com/jerryjliu0/status/169293102896
 
 A key technique for better retrieval is to decouple chunks used for retrieval with those that are used for synthesis.
 
-![](/_static/production_rag/decouple_chunks.png)
+![](../_static/production_rag/decouple_chunks.png)
 
 #### Motivation
 
@@ -45,13 +45,8 @@ This can help retrieve relevant documents at a high-level before retrieving chun
 
 Resources:
 
-```{toctree}
----
-maxdepth: 1
----
-/examples/query_engine/pdf_tables/recursive_retriever.ipynb
-/examples/index_structs/doc_summary/DocSummary.ipynb
-```
+- [Table Recursive Retrieval](../examples/query_engine/pdf_tables/recursive_retriever.ipynb)
+- [Document Summary Index](../examples/index_structs/doc_summary/DocSummary.ipynb)
 
 **2. Embed a sentence, which then links to a window around the sentence.**
 
@@ -59,17 +54,11 @@ This allows for finer-grained retrieval of relevant context (embedding giant chu
 
 Resources:
 
-```{toctree}
----
-maxdepth: 1
----
-/examples/node_postprocessor/MetadataReplacementDemo.ipynb
-
-```
+- [Metadata Replacement Postprocessor](../examples/node_postprocessor/MetadataReplacementDemo.ipynb)
 
 ## Structured Retrieval for Larger Document Sets
 
-![](/_static/production_rag/structured_retrieval.png)
+![](../_static/production_rag/structured_retrieval.png)
 
 #### Motivation
 
@@ -96,19 +85,14 @@ Embed document summaries and map to chunks per document. Fetch at the document-l
 
 **Resources**
 
-```{toctree}
----
-maxdepth: 1
----
-/examples/vector_stores/chroma_auto_retriever.ipynb
-/examples/index_structs/doc_summary/DocSummary.ipynb
-/examples/query_engine/recursive_retriever_agents.ipynb
-/examples/retrievers/auto_vs_recursive_retriever.ipynb
-```
+- [Chroma Auto-Retrieval](../examples/vector_stores/chroma_auto_retriever.ipynb)
+- [Document Summary Index](../examples/index_structs/doc_summary/DocSummary.ipynb)
+- [Recursive Retriever](../examples/query_engine/recursive_retriever_agents.ipynb)
+- [Auto-Retriever vs. Recursive Retriever](../examples/retrievers/auto_vs_recursive_retriever.ipynb)
 
 ## Dynamically Retrieve Chunks Depending on your Task
 
-![](/_static/production_rag/joint_qa_summary.png)
+![](../_static/production_rag/joint_qa_summary.png)
 
 #### Motivation
 
@@ -116,7 +100,7 @@ RAG isn't just about question-answering about specific facts, which top-k simila
 
 #### Key Techniques
 
-LlamaIndex provides some core abstractions to help you do task-specific retrieval. This includes our [router](/module_guides/querying/router/root.md) module as well as our [data agent](/module_guides/deploying/agents/root.md) module.
+LlamaIndex provides some core abstractions to help you do task-specific retrieval. This includes our [router](../module_guides/querying/router/index.md) module as well as our [data agent](../module_guides/deploying/agents/index.md) module.
 This also includes some advanced query engine modules.
 This also include other modules that join structured and unstructured data.
 
@@ -124,23 +108,18 @@ You can use these modules to do joint question-answering and summarization, or e
 
 **Core Module Resources**
 
-- [Query engine](/module_guides/deploying/query_engine/root.md)
-- [Agents](/module_guides/deploying/agents/root.md)
-- [Router](/module_guides/querying/router/root.md)
+- [Query engine](../module_guides/deploying/query_engine/index.md)
+- [Agents](../module_guides/deploying/agents/index.md)
+- [Router](../module_guides/querying/router/index.md)
 
 **Detailed Guide Resources**
 
-```{toctree}
----
-maxdepth: 1
----
-/examples/query_engine/sub_question_query_engine.ipynb
-/examples/query_engine/JointQASummary.ipynb
-/examples/query_engine/recursive_retriever_agents.ipynb
-/examples/query_engine/RouterQueryEngine.ipynb
-/examples/agent/openai_agent_query_cookbook.ipynb
-/examples/agent/openai_agent_query_plan.ipynb
-```
+- [Sub-Question Query Engine](../examples/query_engine/sub_question_query_engine.ipynb)
+- [Joint QA-Summary](../examples/query_engine/JointQASummary.ipynb)
+- [Recursive Retriever Agents](../examples/query_engine/recursive_retriever_agents.ipynb)
+- [Router Query Engine](../examples/query_engine/RouterQueryEngine.ipynb)
+- [OpenAI Agent Cookbook](../examples/agent/openai_agent_query_cookbook.ipynb)
+- [OpenAIAgent Query Planning](../examples/agent/openai_agent_query_plan.ipynb)
 
 ## Optimize Context Embeddings
 
@@ -157,9 +136,4 @@ We can actually do this over an unstructured text corpus, in a label-free way.
 
 Check out our guides here:
 
-```{toctree}
----
-maxdepth: 1
----
-Embedding Fine-tuning Guide </examples/finetuning/embeddings/finetune_embedding.ipynb>
-```
+- [Embedding Fine-tuning Guide](../examples/finetuning/embeddings/finetune_embedding.ipynb)
diff --git a/docs/presentations/materials/2024-02-28-rag-bootcamp-vector-institute.ipynb b/docs/docs/presentations/materials/2024-02-28-rag-bootcamp-vector-institute.ipynb
similarity index 100%
rename from docs/presentations/materials/2024-02-28-rag-bootcamp-vector-institute.ipynb
rename to docs/docs/presentations/materials/2024-02-28-rag-bootcamp-vector-institute.ipynb
diff --git a/docs/presentations/past_presentations.md b/docs/docs/presentations/past_presentations.md
similarity index 100%
rename from docs/presentations/past_presentations.md
rename to docs/docs/presentations/past_presentations.md
diff --git a/docs/docs/production_rag/decouple_chunks.png b/docs/docs/production_rag/decouple_chunks.png
new file mode 100644
index 0000000000000000000000000000000000000000..e4e462099ed3ceea1357ae025ef9e9eb2bdb1362
Binary files /dev/null and b/docs/docs/production_rag/decouple_chunks.png differ
diff --git a/docs/docs/production_rag/doc_agents.png b/docs/docs/production_rag/doc_agents.png
new file mode 100644
index 0000000000000000000000000000000000000000..f6571db808feb67114162d379d5d3674ab490aa5
Binary files /dev/null and b/docs/docs/production_rag/doc_agents.png differ
diff --git a/docs/docs/production_rag/joint_qa_summary.png b/docs/docs/production_rag/joint_qa_summary.png
new file mode 100644
index 0000000000000000000000000000000000000000..aca66e2a5da373ea010e392dccb0d4d2f595f29b
Binary files /dev/null and b/docs/docs/production_rag/joint_qa_summary.png differ
diff --git a/docs/docs/production_rag/structured_retrieval.png b/docs/docs/production_rag/structured_retrieval.png
new file mode 100644
index 0000000000000000000000000000000000000000..8c1912e05c4088917fcf346d68a6196d3f4ca2a5
Binary files /dev/null and b/docs/docs/production_rag/structured_retrieval.png differ
diff --git a/docs/docs/query/disclosure.png b/docs/docs/query/disclosure.png
new file mode 100644
index 0000000000000000000000000000000000000000..f16649106d17f5a56426ec4881989c51be6d10c1
Binary files /dev/null and b/docs/docs/query/disclosure.png differ
diff --git a/docs/docs/query/pipeline_rag_example.png b/docs/docs/query/pipeline_rag_example.png
new file mode 100644
index 0000000000000000000000000000000000000000..700db714fb73d55f7c61ec427797088a73006d09
Binary files /dev/null and b/docs/docs/query/pipeline_rag_example.png differ
diff --git a/docs/docs/query/query_classes.png b/docs/docs/query/query_classes.png
new file mode 100644
index 0000000000000000000000000000000000000000..e2122d42c1c308384b0af37cf1411c8803bbeb5d
Binary files /dev/null and b/docs/docs/query/query_classes.png differ
diff --git a/docs/docs/query_transformations/multi_step_diagram.png b/docs/docs/query_transformations/multi_step_diagram.png
new file mode 100644
index 0000000000000000000000000000000000000000..254740ff72068aa10cc200ac37ca4e4066e35834
Binary files /dev/null and b/docs/docs/query_transformations/multi_step_diagram.png differ
diff --git a/docs/docs/query_transformations/single_step_diagram.png b/docs/docs/query_transformations/single_step_diagram.png
new file mode 100644
index 0000000000000000000000000000000000000000..477daf979d8ffc79f51d25d9a4f90908bfa7ac5e
Binary files /dev/null and b/docs/docs/query_transformations/single_step_diagram.png differ
diff --git a/docs/docs/response/response_1.jpeg b/docs/docs/response/response_1.jpeg
new file mode 100644
index 0000000000000000000000000000000000000000..f2014fde7fd8d2eec6cfdbe720fe31c8076faa79
Binary files /dev/null and b/docs/docs/response/response_1.jpeg differ
diff --git a/docs/docs/sitemap.xml b/docs/docs/sitemap.xml
new file mode 100644
index 0000000000000000000000000000000000000000..3e3e518d76f816aedf3e20eabca56c504f1a5339
--- /dev/null
+++ b/docs/docs/sitemap.xml
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
+    <url><loc>https://docs.llamaindex.ai/en/stable/examples/vector_stores/postgres.html</loc></url>
+    <url><loc>https://docs.llamaindex.ai/en/stable/examples/agent/Chatbot_SEC.html</loc></url>
+    <url><loc>https://docs.llamaindex.ai/en/stable/examples/agent/openai_forced_function_call.html</loc></url>
+    <url><loc>https://docs.llamaindex.ai/en/stable/examples/agent/react_agent.html</loc></url>
+    <url><loc>https://docs.llamaindex.ai/en/stable/examples/analysis/PlaygroundDemo.html</loc></url>
+    <url><loc>https://docs.llamaindex.ai/en/stable/examples/chat_engine/chat_engine_best.html</loc></url>
+    <url><loc>https://docs.llamaindex.ai/en/stable/examples/chat_engine/chat_engine_personality.html</loc></url>
+    <url><loc>https://docs.llamaindex.ai/en/stable/examples/citation/pdf_page_reference.html</loc></url>
+    <url><loc>https://docs.llamaindex.ai/en/stable/examples/composable_indices/city_analysis/City_Analysis.html</loc></url>
+    <url><loc>https://docs.llamaindex.ai/en/stable/examples/composable_indices/city_analysis/City_Analysis-Decompose.html</loc></url>
+    <url><loc>https://docs.llamaindex.ai/en/stable/examples/composable_indices/city_analysis/City_Analysis-Unified-Query.html</loc></url>
+    <url><loc>https://docs.llamaindex.ai/en/stable/examples/composable_indices/city_analysis/PineconeDemo-CityAnalysis.html</loc></url>
+    <url><loc>https://docs.llamaindex.ai/en/stable/examples/composable_indices/financial_data_analysis/DeepLakeDemo-FinancialData.html</loc></url>
+    <url><loc>https://docs.llamaindex.ai/en/stable/examples/customization/llms/SimpleIndexDemo-ChatGPT.html</loc></url>
+    <url><loc>https://docs.llamaindex.ai/en/stable/examples/customization/streaming/SimpleIndexDemo-streaming.html</loc></url>
+    <url><loc>https://docs.llamaindex.ai/en/stable/examples/customization/streaming/chat_engine_condense_question_stream_response.html</loc></url>
+    <url><loc>https://docs.llamaindex.ai/en/stable/examples/data_connectors/DashvectorReaderDemo.html</loc></url>
+    <url><loc>https://docs.llamaindex.ai/en/stable/examples/data_connectors/html_tag_reader.html</loc></url>
+    <url><loc>https://docs.llamaindex.ai/en/stable/examples/discover_llamaindex/document_management/Discord_Thread_Management.html</loc></url>
+    <url><loc>https://docs.llamaindex.ai/en/stable/examples/docstore/DocstoreDemo.html</loc></url>
+    <url><loc>https://docs.llamaindex.ai/en/stable/examples/docstore/DynamoDBDocstoreDemo.html</loc></url>
+    <url><loc>https://docs.llamaindex.ai/en/stable/examples/docstore/FirestoreDemo.html</loc></url>
+    <url><loc>https://docs.llamaindex.ai/en/stable/examples/docstore/MongoDocstoreDemo.html</loc></url>
+    <url><loc>https://docs.llamaindex.ai/en/stable/examples/docstore/RedisDocstoreIndexStoreDemo.html</loc></url>
+    <url><loc>https://docs.llamaindex.ai/en/stable/examples/embeddings/bedrock.html</loc></url>
+    <url><loc>https://docs.llamaindex.ai/en/stable/examples/embeddings/jina_embeddings.html</loc></url>
+    <url><loc>https://docs.llamaindex.ai/en/stable/examples/embeddings/voyageai.html</loc></url>
+    <url><loc>https://docs.llamaindex.ai/en/stable/examples/finetuning/gradient/gradient_text2sql.html</loc></url>
+    <url><loc>https://docs.llamaindex.ai/en/stable/examples/llama_hub/llama_hub.html</loc></url>
+    <url><loc>https://docs.llamaindex.ai/en/stable/examples/llm/Konko.html</loc></url>
+    <url><loc>https://docs.llamaindex.ai/en/stable/examples/llm/cohere.html</loc></url>
+    <url><loc>https://docs.llamaindex.ai/en/stable/examples/llm/huggingface.html</loc></url>
+    <url><loc>https://docs.llamaindex.ai/en/stable/examples/llm/llama_2_rap_battle.html</loc></url>
+    <url><loc>https://docs.llamaindex.ai/en/stable/examples/llm/llm_predictor.html</loc></url>
+    <url><loc>https://docs.llamaindex.ai/en/stable/examples/llm/openai_json_vs_function_calling.html</loc></url>
+    <url><loc>https://docs.llamaindex.ai/en/stable/examples/llm/watsonx.html</loc></url>
+    <url><loc>https://docs.llamaindex.ai/en/stable/examples/multi_modal/gpt4v_experiments_cot.html</loc></url>
+    <url><loc>https://docs.llamaindex.ai/en/stable/examples/node_postprocessor/FileNodeProcessors.html</loc></url>
+    <url><loc>https://docs.llamaindex.ai/en/stable/examples/node_postprocessor/LongLLMLingua.html</loc></url>
+    <url><loc>https://docs.llamaindex.ai/en/stable/examples/node_postprocessor/SentenceTransformerRerank.html</loc></url>
+    <url><loc>https://docs.llamaindex.ai/en/stable/examples/output_parsing/lmformatenforcer_pydantic_program.html</loc></url>
+    <url><loc>https://docs.llamaindex.ai/en/stable/examples/output_parsing/lmformatenforcer_regular_expressions.html</loc></url>
+    <url><loc>https://docs.llamaindex.ai/en/stable/examples/output_parsing/openai_sub_question.html</loc></url>
+    <url><loc>https://docs.llamaindex.ai/en/stable/examples/param_optimizer/param_optimizer.html</loc></url>
+    <url><loc>https://docs.llamaindex.ai/en/stable/examples/query_engine/cogniswitch_query_engine.html</loc></url>
+    <url><loc>https://docs.llamaindex.ai/en/stable/examples/response_synthesizers/long_context_test.html</loc></url>
+    <url><loc>https://docs.llamaindex.ai/en/stable/examples/retrievers/you_retriever.html</loc></url>
+    <url><loc>https://docs.llamaindex.ai/en/stable/examples/tools/OnDemandLoaderTool.html</loc></url>
+    <url><loc>https://docs.llamaindex.ai/en/stable/examples/transforms/TransformsEval.html</loc></url>
+    <url><loc>https://docs.llamaindex.ai/en/stable/examples/usecases/10k_sub_question.html</loc></url>
+    <url><loc>https://docs.llamaindex.ai/en/stable/examples/usecases/10q_sub_question.html</loc></url>
+    <url><loc>https://docs.llamaindex.ai/en/stable/examples/usecases/City_Analysis-Decompose-KeywordTable.html</loc></url>
+    <url><loc>https://docs.llamaindex.ai/en/stable/examples/usecases/github_issue_analysis.html</loc></url>
+    <url><loc>https://docs.llamaindex.ai/en/stable/examples/vector_stores/AwadbDemo.html</loc></url>
+    <url><loc>https://docs.llamaindex.ai/en/stable/examples/vector_stores/BagelIndexDemo.html</loc></url>
+    <url><loc>https://docs.llamaindex.ai/en/stable/examples/vector_stores/Elasticsearch_demo.html</loc></url>
+    <url><loc>https://docs.llamaindex.ai/en/stable/examples/vector_stores/Lantern.html</loc></url>
+    <url><loc>https://docs.llamaindex.ai/en/stable/examples/vector_stores/SimpleIndexDemoMMR.html</loc></url>
+    <url><loc>https://docs.llamaindex.ai/en/stable/examples/vector_stores/SimpleIndexOnS3.html</loc></url>
+    <url><loc>https://docs.llamaindex.ai/en/stable/examples/vector_stores/TypesenseDemo.html</loc></url>
+    <url><loc>https://docs.llamaindex.ai/en/stable/examples/vector_stores/chroma_metadata_filter.html</loc></url>
+    <url><loc>https://docs.llamaindex.ai/en/stable/examples/vector_stores/elasticsearch_auto_retriever.html</loc></url>
+    <url><loc>https://docs.llamaindex.ai/en/stable/examples/vector_stores/existing_data/pinecone_existing_data.html</loc></url>
+    <url><loc>https://docs.llamaindex.ai/en/stable/examples/vector_stores/existing_data/weaviate_existing_data.html</loc></url>
+    <url><loc>https://docs.llamaindex.ai/en/stable/examples/vector_stores/pinecone_auto_retriever.html</loc></url>
+    <url><loc>https://docs.llamaindex.ai/en/stable/examples/vector_stores/pinecone_metadata_filter.html</loc></url>
+    <url><loc>https://docs.llamaindex.ai/en/stable/examples/vector_stores/postgres.html</loc></url>
+</urlset>
diff --git a/docs/docs/storage/storage.png b/docs/docs/storage/storage.png
new file mode 100644
index 0000000000000000000000000000000000000000..319ba1772305de3f6f52bdd6e554ca40c9afe482
Binary files /dev/null and b/docs/docs/storage/storage.png differ
diff --git a/docs/docs/structured_output/diagram1.png b/docs/docs/structured_output/diagram1.png
new file mode 100644
index 0000000000000000000000000000000000000000..e9be22efb39915fba1adcc52cc72abde55be5287
Binary files /dev/null and b/docs/docs/structured_output/diagram1.png differ
diff --git a/docs/docs/structured_output/program2.png b/docs/docs/structured_output/program2.png
new file mode 100644
index 0000000000000000000000000000000000000000..a7f852955d01b59daf71aa0c7644320a00191dc5
Binary files /dev/null and b/docs/docs/structured_output/program2.png differ
diff --git a/docs/docs/understanding/deployment/deployment.md b/docs/docs/understanding/deployment/deployment.md
new file mode 100644
index 0000000000000000000000000000000000000000..e0b064d3453212b574464941c25b04b017509200
--- /dev/null
+++ b/docs/docs/understanding/deployment/deployment.md
@@ -0,0 +1,3 @@
+# Deployment
+
+TODO
diff --git a/docs/understanding/evaluating/cost_analysis/root.md b/docs/docs/understanding/evaluating/cost_analysis/index.md
similarity index 97%
rename from docs/understanding/evaluating/cost_analysis/root.md
rename to docs/docs/understanding/evaluating/cost_analysis/index.md
index 04113d85ebd8bc2bc7dad3847ffbc473d119e90a..774bb04cb1c31b33aa85b57be0c5ae7a8ae18e77 100644
--- a/docs/understanding/evaluating/cost_analysis/root.md
+++ b/docs/docs/understanding/evaluating/cost_analysis/index.md
@@ -83,12 +83,4 @@ Settings.embed_model = MockEmbedding(embed_dim=1536)
 
 ## Usage Pattern
 
-Read about the full usage pattern below!
-
-```{toctree}
----
-caption: Examples
-maxdepth: 1
----
-usage_pattern.md
-```
+Read about the [full usage pattern](./usage_pattern.md) for more details!
diff --git a/docs/understanding/evaluating/cost_analysis/usage_pattern.md b/docs/docs/understanding/evaluating/cost_analysis/usage_pattern.md
similarity index 100%
rename from docs/understanding/evaluating/cost_analysis/usage_pattern.md
rename to docs/docs/understanding/evaluating/cost_analysis/usage_pattern.md
diff --git a/docs/understanding/evaluating/evaluating.md b/docs/docs/understanding/evaluating/evaluating.md
similarity index 86%
rename from docs/understanding/evaluating/evaluating.md
rename to docs/docs/understanding/evaluating/evaluating.md
index be061fb02b1d77b3ec1fcd119c65e5f8a467591d..2de1b4ec5dfa08e732d8f4473e58d35c93dbc3e7 100644
--- a/docs/understanding/evaluating/evaluating.md
+++ b/docs/docs/understanding/evaluating/evaluating.md
@@ -2,7 +2,7 @@
 
 Evaluation and benchmarking are crucial concepts in LLM development. To improve the performance of an LLM app (RAG, agents), you must have a way to measure it.
 
-LlamaIndex offers key modules to measure the quality of generated results. We also offer key modules to measure retrieval quality. You can learn more about how evaluation works in LlamaIndex in our [module guides](/module_guides/evaluating/root.md).
+LlamaIndex offers key modules to measure the quality of generated results. We also offer key modules to measure retrieval quality. You can learn more about how evaluation works in LlamaIndex in our [module guides](../../module_guides/evaluating/index.md).
 
 ## Response Evaluation
 
@@ -34,7 +34,7 @@ print(str(eval_result.passing))
 
 The response contains both the response and the source from which the response was generated; the evaluator compares them and determines if the response is faithful to the source.
 
-You can learn more in our module guides about [response evaluation](/module_guides/evaluating/usage_pattern.md).
+You can learn more in our module guides about [response evaluation](../../module_guides/evaluating/usage_pattern.md).
 
 ## Retrieval Evaluation
 
@@ -58,16 +58,8 @@ retriever_evaluator.evaluate(
 
 This compares what was retrieved for the query to a set of nodes that were expected to be retrieved.
 
-In reality you would want to evaluate a whole batch of retrievals; you can learn how do this in our module guide on [retrieval evaluation](/module_guides/evaluating/usage_pattern_retrieval.md).
+In reality you would want to evaluate a whole batch of retrievals; you can learn how do this in our module guide on [retrieval evaluation](../../module_guides/evaluating/usage_pattern_retrieval.md).
 
 ## Related concepts
 
-You may be interested in [analyzing the cost of your application](/understanding/evaluating/cost_analysis/root.md) if you are making calls to a hosted, remote LLM.
-
-```{toctree}
----
-maxdepth: 1
-hidden: true
----
-/understanding/evaluating/cost_analysis/root.md
-```
+You may be interested in [analyzing the cost of your application](cost_analysis/index.md) if you are making calls to a hosted, remote LLM.
diff --git a/docs/docs/understanding/index.md b/docs/docs/understanding/index.md
new file mode 100644
index 0000000000000000000000000000000000000000..e67749e901d01f73990db2aba626dea135abb2f3
--- /dev/null
+++ b/docs/docs/understanding/index.md
@@ -0,0 +1,30 @@
+# Building an LLM application
+
+Welcome to the beginning of Understanding LlamaIndex. This is a series of short, bite-sized tutorials on every stage of building an LLM application to get you acquainted with how to use LlamaIndex before diving into more advanced and subtle strategies. If you're an experienced programmer new to LlamaIndex, this is the place to start.
+
+## Key steps in building an LLM application
+
+!!! tip
+If you've already read our [high-level concepts](../getting_started/concepts.md) page you'll recognize several of these steps.
+
+There are a series of key steps involved in building any LLM-powered application, whether it's answering questions about your data, creating a chatbot, or an autonomous agent. Throughout our documentation, you'll notice sections are arranged roughly in the order you'll perform these steps while building your app. You'll learn about:
+
+- **[Using LLMs](./using_llms/using_llms.md)**: whether it's OpenAI or any number of hosted LLMs or a locally-run model of your own, LLMs are used at every step of the way, from indexing and storing to querying and parsing your data. LlamaIndex comes with a huge number of reliable, tested prompts and we'll also show you how to customize your own.
+
+- **[Loading](./loading/loading.md)**: getting your data from wherever it lives, whether that's unstructured text, PDFs, databases, or APIs to other applications. LlamaIndex has hundreds of connectors to every data source over at [LlamaHub](https://llamahub.ai/).
+
+- **[Indexing](./indexing/indexing.md)**: once you've got your data there are an infinite number of ways to structure access to that data to ensure your applications is always working with the most relevant data. LlamaIndex has a huge number of these strategies built-in and can help you select the best ones.
+
+- **[Storing](./storing/storing.md)**: you will probably find it more efficient to store your data in indexed form, or pre-processed summaries provided by an LLM, often in a specialized database known as a `Vector Store` (see below). You can also store your indexes, metadata and more.
+
+- **[Querying](./querying/querying.md)**: every indexing strategy has a corresponding querying strategy and there are lots of ways to improve the relevance, speed and accuracy of what you retrieve and what the LLM does with it before returning it to you, including turning it into structured responses such as an API.
+
+- **[Putting it all together](./putting_it_all_together/index.md)**: whether you are building question & answering, chatbots, an API, or an autonomous agent, we show you how to get your application into production.
+
+- **[Tracing and debugging](./tracing_and_debugging/tracing_and_debugging.md)**: also called **observability**, it's especially important with LLM applications to be able to look into the inner workings of what's going on to help you debug problems and spot places to improve.
+
+- **[Evaluating](./evaluating/evaluating.md)**: every strategy has pros and cons and a key part of building, shipping and evolving your application is evaluating whether your change has improved your application in terms of accuracy, performance, clarity, cost and more. Reliably evaluating your changes is a crucial part of LLM application development.
+
+## Let's get started!
+
+Ready to dive in? Head to [using LLMs](./using_llms/using_llms.md).
diff --git a/docs/understanding/indexing/indexing.md b/docs/docs/understanding/indexing/indexing.md
similarity index 82%
rename from docs/understanding/indexing/indexing.md
rename to docs/docs/understanding/indexing/indexing.md
index eb40dbcb86cd42fd35b82cbf1e6aa5dedb9b2b63..004e26611be00fc9762981adeedd2bae98f9a705 100644
--- a/docs/understanding/indexing/indexing.md
+++ b/docs/docs/understanding/indexing/indexing.md
@@ -22,7 +22,7 @@ A `vector embedding`, often just called an embedding, is a **numerical represent
 
 This mathematical relationship enables **semantic search**, where a user provides query terms and LlamaIndex can locate text that is related to the **meaning of the query terms** rather than simple keyword matching. This is a big part of how Retrieval-Augmented Generation works, and how LLMs function in general.
 
-There are [many types of embeddings](/module_guides/models/embeddings.md), and they vary in efficiency, effectiveness and computational cost. By default LlamaIndex uses `text-embedding-ada-002`, which is the default embedding used by OpenAI. If you are using different LLMs you will often want to use different embeddings.
+There are [many types of embeddings](../../module_guides/models/embeddings.md), and they vary in efficiency, effectiveness and computational cost. By default LlamaIndex uses `text-embedding-ada-002`, which is the default embedding used by OpenAI. If you are using different LLMs you will often want to use different embeddings.
 
 ### Vector Store Index embeds your documents
 
@@ -34,7 +34,7 @@ When you want to search your embeddings, your query is itself turned into a vect
 
 Once the ranking is complete, VectorStoreIndex returns the most-similar embeddings as their corresponding chunks of text. The number of embeddings it returns is known as `k`, so the parameter controlling how many embeddings to return is known as `top_k`. This whole type of search is often referred to as "top-k semantic retrieval" for this reason.
 
-Top-k retrieval is the simplest form of querying a vector index; you will learn about more complex and subtler strategies when you read the [querying](/understanding/querying/querying.md) section.
+Top-k retrieval is the simplest form of querying a vector index; you will learn about more complex and subtler strategies when you read the [querying](../querying/querying.md) section.
 
 ### Using Vector Store Index
 
@@ -46,9 +46,8 @@ from llama_index.core import VectorStoreIndex
 index = VectorStoreIndex.from_documents(documents)
 ```
 
-```{tip}
+!!! tip
 `from_documents` also takes an optional argument `show_progress`. Set it to `True` to display a progress bar during index construction.
-```
 
 You can also choose to build an index over a list of Node objects directly:
 
@@ -58,7 +57,7 @@ from llama_index.core import VectorStoreIndex
 index = VectorStoreIndex(nodes)
 ```
 
-With your text indexed, it is now technically ready for [querying](/understanding/querying/querying.md)! However, embedding all your text can be time-consuming and, if you are using a hosted LLM, it can also be expensive. To save time and money you will want to [store your embeddings](/understanding/storing/storing.md) first.
+With your text indexed, it is now technically ready for [querying](../querying/querying.md)! However, embedding all your text can be time-consuming and, if you are using a hosted LLM, it can also be expensive. To save time and money you will want to [store your embeddings](../storing/storing.md) first.
 
 ## Summary Index
 
@@ -66,4 +65,4 @@ A Summary Index is a simpler form of Index best suited to queries where, as the
 
 ## Further Reading
 
-If your data is a set of interconnected concepts (in computer science terms, a "graph") then you may be interested in our [knowledge graph index](/examples/index_structs/knowledge_graph/KnowledgeGraphDemo.ipynb).
+If your data is a set of interconnected concepts (in computer science terms, a "graph") then you may be interested in our [knowledge graph index](../../examples/index_structs/knowledge_graph/KnowledgeGraphDemo.ipynb).
diff --git a/docs/understanding/loading/llamahub.md b/docs/docs/understanding/loading/llamahub.md
similarity index 96%
rename from docs/understanding/loading/llamahub.md
rename to docs/docs/understanding/loading/llamahub.md
index 947f209e9ce4b7036c3e847837a721dbc3476893..bd0b8ccc8d3b9c8780fcc91930ab64f9a69834e7 100644
--- a/docs/understanding/loading/llamahub.md
+++ b/docs/docs/understanding/loading/llamahub.md
@@ -3,7 +3,7 @@
 Our data connectors are offered through [LlamaHub](https://llamahub.ai/) 🦙.
 LlamaHub contains a registry of open-source data connectors that you can easily plug into any LlamaIndex application (+ Agent Tools, and Llama Packs).
 
-![](/_static/data_connectors/llamahub.png)
+![](../../_static/data_connectors/llamahub.png)
 
 ## Usage Pattern
 
diff --git a/docs/understanding/loading/loading.md b/docs/docs/understanding/loading/loading.md
similarity index 81%
rename from docs/understanding/loading/loading.md
rename to docs/docs/understanding/loading/loading.md
index d1f842af0ff17d0371a25fd7f372ce47010bc857..8b94fd951e629d11a9de19c015b43117af24b536 100644
--- a/docs/understanding/loading/loading.md
+++ b/docs/docs/understanding/loading/loading.md
@@ -8,7 +8,7 @@ This ingestion pipeline typically consists of three main stages:
 2. Transform the data
 3. Index and store the data
 
-We cover indexing/storage in [future](/understanding/indexing/indexing.md) [sections](/understanding/storing/storing.md). In this guide we'll mostly talk about loaders and transformations.
+We cover indexing/storage in [future](../indexing/indexing.md) [sections](../storing/storing.md). In this guide we'll mostly talk about loaders and transformations.
 
 ## Loaders
 
@@ -26,7 +26,7 @@ documents = SimpleDirectoryReader("./data").load_data()
 
 ### Using Readers from LlamaHub
 
-Because there are so many possible places to get data, they are not all built-in. Instead, you download them from our registry of data connectors, [LlamaHub](/understanding/loading/llamahub.md).
+Because there are so many possible places to get data, they are not all built-in. Instead, you download them from our registry of data connectors, [LlamaHub](llamahub.md).
 
 In this example LlamaIndex downloads and installs the connector called [DatabaseReader](https://llamahub.ai/l/database), which runs a query against a SQL database and returns every row of the results as a `Document`:
 
@@ -101,7 +101,7 @@ index = VectorStoreIndex.from_documents(
 
 You can also define these steps explicitly.
 
-You can do this by either using our transformation modules (text splitters, metadata extractors, etc.) as standalone components, or compose them in our declarative [Transformation Pipeline interface](/module_guides/loading/ingestion_pipeline/root.md).
+You can do this by either using our transformation modules (text splitters, metadata extractors, etc.) as standalone components, or compose them in our declarative [Transformation Pipeline interface](../../module_guides/loading/ingestion_pipeline/index.md).
 
 Let's walk through the steps below.
 
@@ -109,9 +109,9 @@ Let's walk through the steps below.
 
 A key step to process your documents is to split them into "chunks"/Node objects. The key idea is to process your data into bite-sized pieces that can be retrieved / fed to the LLM.
 
-LlamaIndex has support for a wide range of [text splitters](/module_guides/loading/node_parsers/modules.md), ranging from paragraph/sentence/token based splitters to file-based splitters like HTML, JSON.
+LlamaIndex has support for a wide range of [text splitters](../../module_guides/loading/node_parsers/modules.md), ranging from paragraph/sentence/token based splitters to file-based splitters like HTML, JSON.
 
-These can be [used on their own or as part of an ingestion pipeline](/module_guides/loading/node_parsers/root.md).
+These can be [used on their own or as part of an ingestion pipeline](../../module_guides/loading/node_parsers/index.md).
 
 ```python
 from llama_index.core import SimpleDirectoryReader
@@ -127,9 +127,9 @@ nodes = pipeline.run(documents=documents)
 
 ### Adding Metadata
 
-You can also choose to add metadata to your documents and nodes. This can be done either manually or with [automatic metadata extractors](/module_guides/loading/documents_and_nodes/usage_metadata_extractor.md).
+You can also choose to add metadata to your documents and nodes. This can be done either manually or with [automatic metadata extractors](../../module_guides/loading/documents_and_nodes/usage_metadata_extractor.md).
 
-Here are guides on 1) [how to customize Documents](/module_guides/loading/documents_and_nodes/usage_documents.md), and 2) [how to customize Nodes](/module_guides/loading/documents_and_nodes/usage_nodes.md).
+Here are guides on 1) [how to customize Documents](../../module_guides/loading/documents_and_nodes/usage_documents.md), and 2) [how to customize Nodes](../../module_guides/loading/documents_and_nodes/usage_nodes.md).
 
 ```python
 document = Document(
@@ -140,7 +140,7 @@ document = Document(
 
 ### Adding Embeddings
 
-To insert a node into a vector index, it should have an embedding. See our [ingestion pipeline](/module_guides/loading/ingestion_pipeline/root.md) or our [embeddings guide](/module_guides/models/embeddings.md) for more details.
+To insert a node into a vector index, it should have an embedding. See our [ingestion pipeline](../../module_guides/loading/ingestion_pipeline/index.md) or our [embeddings guide](../../module_guides/models/embeddings.md) for more details.
 
 ### Creating and passing Nodes directly
 
@@ -154,14 +154,3 @@ node2 = TextNode(text="<text_chunk>", id_="<node_id>")
 
 index = VectorStoreIndex([node1, node2])
 ```
-
-```{toctree}
----
-maxdepth: 1
-hidden: true
----
-/understanding/loading/llamahub.md
-/module_guides/loading/documents_and_nodes/root.md
-/module_guides/loading/node_parsers/root.md
-/module_guides/loading/ingestion_pipeline/root.md
-```
diff --git a/docs/understanding/putting_it_all_together/agents.md b/docs/docs/understanding/putting_it_all_together/agents.md
similarity index 55%
rename from docs/understanding/putting_it_all_together/agents.md
rename to docs/docs/understanding/putting_it_all_together/agents.md
index 1a22bbc1f1e98527e7ab8872b1ab88d219f48cce..47d8450d08949962eb12086b0b949d1e5fe7e6fa 100644
--- a/docs/understanding/putting_it_all_together/agents.md
+++ b/docs/docs/understanding/putting_it_all_together/agents.md
@@ -40,25 +40,20 @@ query_engine_tools = [
 agent = ReActAgent.from_tools(query_engine_tools, llm=llm, verbose=True)
 ```
 
-You can learn more in our [Agent Module Guide](/module_guides/deploying/agents/root.md).
+You can learn more in our [Agent Module Guide](../../module_guides/deploying/agents/index.md).
 
 ## Native OpenAIAgent
 
 We have an `OpenAIAgent` implementation built on the [OpenAI API for function calling](https://openai.com/blog/function-calling-and-other-api-updates) that allows you to rapidly build agents:
 
-```{toctree}
----
-maxdepth: 1
----
-/examples/agent/openai_agent.ipynb
-/examples/agent/openai_agent_with_query_engine.ipynb
-/examples/agent/openai_agent_query_plan.ipynb
-/examples/agent/openai_assistant_agent.ipynb
-/examples/agent/openai_assistant_query_cookbook.ipynb
-/examples/agent/openai_forced_function_call.ipynb
-/examples/agent/openai_agent_parallel_function_calling.ipynb
-/examples/agent/openai_agent_context_retrieval.ipynb
-```
+- [OpenAIAgent](../../examples/agent/openai_agent.ipynb)
+- [OpenAIAgent with Query Engine Tools](../../examples/agent/openai_agent_with_query_engine.ipynb)
+- [OpenAIAgent Query Planning](../../examples/agent/openai_agent_query_plan.ipynb)
+- [OpenAI Assistant](../../examples/agent/openai_assistant_agent.ipynb)
+- [OpenAI Assistant Cookbook](../../examples/agent/openai_assistant_query_cookbook.ipynb)
+- [Forced Function Calling](../../examples/agent/openai_forced_function_call.ipynb)
+- [Parallel Function Calling](../../examples/agent/openai_agent_parallel_function_calling.ipynb)
+- [Context Retrieval](../../examples/agent/openai_agent_context_retrieval.ipynb)
 
 ## Agentic Components within LlamaIndex
 
@@ -66,28 +61,28 @@ LlamaIndex provides core modules capable of automated reasoning for different us
 
 **SubQuestionQueryEngine for Multi-Document Analysis**
 
-- [Sub Question Query Engine (Intro)](/examples/query_engine/sub_question_query_engine.ipynb)
-- [10Q Analysis (Uber)](/examples/usecases/10q_sub_question.ipynb)
-- [10K Analysis (Uber and Lyft)](/examples/usecases/10k_sub_question.ipynb)
+- [Sub Question Query Engine (Intro)](../../examples/query_engine/sub_question_query_engine.ipynb)
+- [10Q Analysis (Uber)](../../examples/usecases/10q_sub_question.ipynb)
+- [10K Analysis (Uber and Lyft)](../../examples/usecases/10k_sub_question.ipynb)
 
 **Query Transformations**
 
-- [How-To](/optimizing/advanced_retrieval/query_transformations.md)
-- [Multi-Step Query Decomposition](/examples/query_transformations/HyDEQueryTransformDemo.ipynb) ([Notebook](https://github.com/jerryjliu/llama_index/blob/main/docs/examples/query_transformations/HyDEQueryTransformDemo.ipynb))
+- [How-To](../../optimizing/advanced_retrieval/query_transformations.md)
+- [Multi-Step Query Decomposition](../../examples/query_transformations/HyDEQueryTransformDemo.ipynb) ([Notebook](https://github.com/jerryjliu/llama_index/blob/main/docs/examples/query_transformations/HyDEQueryTransformDemo.ipynb))
 
 **Routing**
 
-- [Usage](/module_guides/querying/router/root.md)
-- [Router Query Engine Guide](/examples/query_engine/RouterQueryEngine.ipynb) ([Notebook](https://github.com/jerryjliu/llama_index/blob/main/docs/examples/query_engine/RouterQueryEngine.ipynb))
+- [Usage](../../module_guides/querying/router/index.md)
+- [Router Query Engine Guide](../../examples/query_engine/RouterQueryEngine.ipynb) ([Notebook](https://github.com/jerryjliu/llama_index/blob/main/docs../../examples/query_engine/RouterQueryEngine.ipynb))
 
 **LLM Reranking**
 
-- [Second Stage Processing How-To](/module_guides/querying/node_postprocessors/root.md)
-- [LLM Reranking Guide (Great Gatsby)](/examples/node_postprocessor/LLMReranker-Gatsby.ipynb)
+- [Second Stage Processing How-To](../../module_guides/querying/node_postprocessors/index.md)
+- [LLM Reranking Guide (Great Gatsby)](../../examples/node_postprocessor/LLMReranker-Gatsby.ipynb)
 
 **Chat Engines**
 
-- [Chat Engines How-To](/module_guides/deploying/chat_engines/root.md)
+- [Chat Engines How-To](../../module_guides/deploying/chat_engines/index.md)
 
 ## Using LlamaIndex as as Tool within an Agent Framework
 
@@ -100,9 +95,8 @@ LlamaIndex query engines can be easily packaged as Tools to be used within a Lan
 
 **Resources**
 
-- [LangChain integration guide](/community/integrations/using_with_langchain.md)
-- [Building a Chatbot Tutorial (LangChain + LlamaIndex)](/understanding/putting_it_all_together/chatbots/building_a_chatbot.md)
-- [OnDemandLoaderTool Tutorial](/examples/tools/OnDemandLoaderTool.ipynb)
+- [Building a Chatbot Tutorial](chatbots/building_a_chatbot.md)
+- [OnDemandLoaderTool Tutorial](../../examples/tools/OnDemandLoaderTool.ipynb)
 
 ### ChatGPT
 
diff --git a/docs/docs/understanding/putting_it_all_together/apps.md b/docs/docs/understanding/putting_it_all_together/apps.md
new file mode 100644
index 0000000000000000000000000000000000000000..b3f6dff2e78225b1564d54924c7a2afa053170d1
--- /dev/null
+++ b/docs/docs/understanding/putting_it_all_together/apps.md
@@ -0,0 +1,9 @@
+# Full-Stack Web Application
+
+LlamaIndex can be integrated into a downstream full-stack web application. It can be used in a backend server (such as Flask), packaged into a Docker container, and/or directly used in a framework such as Streamlit.
+
+We provide tutorials and resources to help you get started in this area:
+
+- [Fullstack Application Guide](apps/fullstack_app_guide.md) shows you how to build an app with LlamaIndex as an API and a TypeScript+React frontend
+- [Fullstack Application with Delphic](apps/fullstack_with_delphic.md) walks you through using LlamaIndex with a production-ready web app starter template called Delphic.
+- The [LlamaIndex Starter Pack](https://github.com/logan-markewich/llama_index_starter_pack) provides very basic flask, streamlit, and docker examples for LlamaIndex.
diff --git a/docs/understanding/putting_it_all_together/apps/fullstack_app_guide.md b/docs/docs/understanding/putting_it_all_together/apps/fullstack_app_guide.md
similarity index 100%
rename from docs/understanding/putting_it_all_together/apps/fullstack_app_guide.md
rename to docs/docs/understanding/putting_it_all_together/apps/fullstack_app_guide.md
diff --git a/docs/understanding/putting_it_all_together/apps/fullstack_with_delphic.md b/docs/docs/understanding/putting_it_all_together/apps/fullstack_with_delphic.md
similarity index 100%
rename from docs/understanding/putting_it_all_together/apps/fullstack_with_delphic.md
rename to docs/docs/understanding/putting_it_all_together/apps/fullstack_with_delphic.md
diff --git a/docs/understanding/putting_it_all_together/chatbots/building_a_chatbot.md b/docs/docs/understanding/putting_it_all_together/chatbots/building_a_chatbot.md
similarity index 99%
rename from docs/understanding/putting_it_all_together/chatbots/building_a_chatbot.md
rename to docs/docs/understanding/putting_it_all_together/chatbots/building_a_chatbot.md
index ff49491d7560a27be1569befb3be0622c3bfa6be..fdf22c259939ad9077de8acb6503b790e2775207 100644
--- a/docs/understanding/putting_it_all_together/chatbots/building_a_chatbot.md
+++ b/docs/docs/understanding/putting_it_all_together/chatbots/building_a_chatbot.md
@@ -367,4 +367,4 @@ User:
 
 ### Notebook
 
-Take a look at our [corresponding notebook](/examples/agent/Chatbot_SEC.ipynb).
+Take a look at our [corresponding notebook](../../../examples/agent/Chatbot_SEC.ipynb).
diff --git a/docs/understanding/putting_it_all_together/graphs.md b/docs/docs/understanding/putting_it_all_together/graphs.md
similarity index 80%
rename from docs/understanding/putting_it_all_together/graphs.md
rename to docs/docs/understanding/putting_it_all_together/graphs.md
index 3a653bc49bcd6c11039d554f962934391631e60b..658a62acb49e710aeff0419afb4a38f2d38fafa7 100644
--- a/docs/understanding/putting_it_all_together/graphs.md
+++ b/docs/docs/understanding/putting_it_all_together/graphs.md
@@ -2,7 +2,7 @@
 
 LlamaIndex contains some fantastic guides for building with knowledge graphs.
 
-Check out the end-to-end tutorials/workshops below. Also check out our [knowledge graph query engine guides](/module_guides/deploying/query_engine/modules.md).
+Check out the end-to-end tutorials/workshops below. Also check out our [knowledge graph query engine guides](../../module_guides/deploying/query_engine/modules.md).
 
 - LlamaIndex Workshop: Building RAG with Knowledge Graphs <https://colab.research.google.com/drive/1tLjOg2ZQuIClfuWrAC2LdiZHCov8oUbs>
 - REBEL + Knowledge Graph Index <https://colab.research.google.com/drive/1G6pcR0pXvSkdMQlAK_P-IrYgo-_staxd?usp=sharing>
diff --git a/docs/understanding/putting_it_all_together/putting_it_all_together.md b/docs/docs/understanding/putting_it_all_together/index.md
similarity index 64%
rename from docs/understanding/putting_it_all_together/putting_it_all_together.md
rename to docs/docs/understanding/putting_it_all_together/index.md
index 5f5a528bbf9f23da5fd5d1dea94eefe3e0c18dac..dbefd96d60da958407afaea6c58d448c7d63d22a 100644
--- a/docs/understanding/putting_it_all_together/putting_it_all_together.md
+++ b/docs/docs/understanding/putting_it_all_together/index.md
@@ -4,7 +4,7 @@ Congratulations! You've loaded your data, indexed it, stored your index, and que
 
 - In [Q&A Patterns](q_and_a.md) we'll go into some of the more advanced and subtle ways you can build a query engine beyond the basics.
   - The [terms definition tutorial](q_and_a/terms_definitions_tutorial.md) is a detailed, step-by-step tutorial on creating a subtle query application including defining your prompts and supporting images as input.
-  - We have a guide to [creating a unified query framework over your indexes](q_and_a/unified_query.md) which shows you how to run queries across multiple indexes.
+  - We have a guide to [creating a unified query framework over your indexes](../../examples/retrievers/reciprocal_rerank_fusion.ipynb) which shows you how to run queries across multiple indexes.
   - We talk about how to build queries over [knowledge graphs](graphs.md)
   - And also over [structured data like SQL](structured_data.md)
 - We have a guide on [how to build a chatbot](chatbots/building_a_chatbot.md)
@@ -13,18 +13,6 @@ Congratulations! You've loaded your data, indexed it, stored your index, and que
 
 LlamaIndex also provides some tools / project templates to help you build a full-stack template. For instance, [`create-llama`](https://github.com/run-llama/LlamaIndexTS/tree/main/packages/create-llama) spins up a full-stack scaffold for you.
 
-Check out our [Full-Stack Projects](/community/full_stack_projects.md) page for more details.
+Check out our [Full-Stack Projects](../../community/full_stack_projects.md) page for more details.
 
-We also have the [`llamaindex-cli rag` CLI tool](/use_cases/q_and_a/rag_cli.md) that combines some of the above concepts into an easy to use tool for chatting with files from your terminal!
-
-```{toctree}
----
-maxdepth: 1
-hidden: true
----
-/understanding/putting_it_all_together/q_and_a.md
-/understanding/putting_it_all_together/apps.md
-/understanding/putting_it_all_together/chatbots/building_a_chatbot.md
-/understanding/putting_it_all_together/agents.md
-/community/full_stack_projects.md
-```
+We also have the [`llamaindex-cli rag` CLI tool](../../use_cases/q_and_a/rag_cli.md) that combines some of the above concepts into an easy to use tool for chatting with files from your terminal!
diff --git a/docs/docs/understanding/putting_it_all_together/putting_it_all_together.md b/docs/docs/understanding/putting_it_all_together/putting_it_all_together.md
new file mode 100644
index 0000000000000000000000000000000000000000..440c9ef203ea23b99cae8483f5321428f91f678b
--- /dev/null
+++ b/docs/docs/understanding/putting_it_all_together/putting_it_all_together.md
@@ -0,0 +1,17 @@
+# Putting It All Together
+
+Congratulations! You've loaded your data, indexed it, stored your index, and queried your index. Now you've got to ship something to production. We can show you how to do that!
+
+- In [Q&A Patterns](q_and_a.md) we'll go into some of the more advanced and subtle ways you can build a query engine beyond the basics.
+  - The [terms definition tutorial](q_and_a/terms_definitions_tutorial.md) is a detailed, step-by-step tutorial on creating a subtle query application including defining your prompts and supporting images as input.
+  - We talk about how to build queries over [knowledge graphs](graphs.md)
+  - And also over [structured data like SQL](structured_data.md)
+- We have a guide on [how to build a chatbot](chatbots/building_a_chatbot.md)
+- We talk about [building agents in LlamaIndex](agents.md)
+- And last but not least we show you how to build [a full stack web application](apps.md) using LlamaIndex
+
+LlamaIndex also provides some tools / project templates to help you build a full-stack template. For instance, [`create-llama`](https://github.com/run-llama/LlamaIndexTS/tree/main/packages/create-llama) spins up a full-stack scaffold for you.
+
+Check out our [Full-Stack Projects](../../community/full_stack_projects.md) page for more details.
+
+We also have the [`llamaindex-cli rag` CLI tool](../../use_cases/q_and_a/rag_cli.md) that combines some of the above concepts into an easy to use tool for chatting with files from your terminal!
diff --git a/docs/understanding/putting_it_all_together/q_and_a.md b/docs/docs/understanding/putting_it_all_together/q_and_a.md
similarity index 71%
rename from docs/understanding/putting_it_all_together/q_and_a.md
rename to docs/docs/understanding/putting_it_all_together/q_and_a.md
index 03134b8ec9bc5fd0dbff7ba25831252657388538..28abcf6178de4f0774202298f0abd45bd2bc0d6a 100644
--- a/docs/understanding/putting_it_all_together/q_and_a.md
+++ b/docs/docs/understanding/putting_it_all_together/q_and_a.md
@@ -4,7 +4,7 @@
 
 ## Semantic Search
 
-The most basic example usage of LlamaIndex is through semantic search. We provide a simple in-memory vector store for you to get started, but you can also choose to use any one of our [vector store integrations](/community/integrations/vector_stores.md):
+The most basic example usage of LlamaIndex is through semantic search. We provide a simple in-memory vector store for you to get started, but you can also choose to use any one of our [vector store integrations](../../community/integrations/vector_stores.md):
 
 ```python
 from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
@@ -18,14 +18,12 @@ print(response)
 
 **Tutorials**
 
-- [Starter Tutorial](/getting_started/starter_example.md)
-- [Basic Usage Pattern](/understanding/querying/querying.md)
+- [Starter Tutorial](../../getting_started/starter_example.md)
+- [Basic Usage Pattern](../querying/querying.md)
 
 **Guides**
 
-- [Example](/examples/vector_stores/SimpleIndexDemo.ipynb) ([Notebook](https://github.com/run-llama/llama_index/tree/main/docs/examples/vector_stores/SimpleIndexDemo.ipynb))
-
-(Summarization)=
+- [Example](../../examples/vector_stores/SimpleIndexDemo.ipynb) ([Notebook](https://github.com/run-llama/llama_index/tree/main/docs../../examples/vector_stores/SimpleIndexDemo.ipynb))
 
 ## Summarization
 
@@ -54,14 +52,12 @@ Here are some relevant resources:
 
 **Tutorials**
 
-- [Guide on Text-to-SQL](/understanding/putting_it_all_together/structured_data.md)
+- [Guide on Text-to-SQL](structured_data.md)
 
 **Guides**
 
-- [SQL Guide (Core)](/examples/index_structs/struct_indices/SQLIndexDemo.ipynb) ([Notebook](https://github.com/jerryjliu/llama_index/blob/main/docs/examples/index_structs/struct_indices/SQLIndexDemo.ipynb))
-- [Pandas Demo](/examples/query_engine/pandas_query_engine.ipynb) ([Notebook](https://github.com/jerryjliu/llama_index/blob/main/docs/examples/query_engine/pandas_query_engine.ipynb))
-
-(Route-across-multiple-sources)=
+- [SQL Guide (Core)](../../examples/index_structs/struct_indices/SQLIndexDemo.ipynb) ([Notebook](https://github.com/jerryjliu/llama_index/blob/main/docs../../examples/index_structs/struct_indices/SQLIndexDemo.ipynb))
+- [Pandas Demo](../../examples/query_engine/pandas_query_engine.ipynb) ([Notebook](https://github.com/jerryjliu/llama_index/blob/main/docs../../examples/query_engine/pandas_query_engine.ipynb))
 
 ## Routing over Heterogeneous Data
 
@@ -109,7 +105,7 @@ response = query_engine.query(
 
 **Guides**
 
-- [Router Query Engine Guide](/examples/query_engine/RouterQueryEngine.ipynb) ([Notebook](https://github.com/jerryjliu/llama_index/blob/main/docs/examples/query_engine/RouterQueryEngine.ipynb))
+- [Router Query Engine Guide](../../examples/query_engine/RouterQueryEngine.ipynb) ([Notebook](https://github.com/jerryjliu/llama_index/blob/main/docs../../examples/query_engine/RouterQueryEngine.ipynb))
 
 ## Compare/Contrast Queries
 
@@ -127,12 +123,10 @@ This module will help break down a complex query into a simpler one over your ex
 
 **Guides**
 
-- [Query Transformations](/optimizing/advanced_retrieval/query_transformations.md)
+- [Query Transformations](../../optimizing/advanced_retrieval/query_transformations.md)
 
 You can also rely on the LLM to _infer_ whether to perform compare/contrast queries (see Multi-Document Queries below).
 
-(Multi-document-queries)=
-
 ## Multi-Document Queries
 
 Besides the explicit synthesis/routing flows described above, LlamaIndex can support more general multi-document queries as well.
@@ -184,9 +178,9 @@ This makes it especially well-suited for compare/contrast queries across documen
 
 **Guides**
 
-- [Sub Question Query Engine (Intro)](/examples/query_engine/sub_question_query_engine.ipynb)
-- [10Q Analysis (Uber)](/examples/usecases/10q_sub_question.ipynb)
-- [10K Analysis (Uber and Lyft)](/examples/usecases/10k_sub_question.ipynb)
+- [Sub Question Query Engine (Intro)](../../examples/query_engine/sub_question_query_engine.ipynb)
+- [10Q Analysis (Uber)](../../examples/usecases/10q_sub_question.ipynb)
+- [10K Analysis (Uber and Lyft)](../../examples/usecases/10k_sub_question.ipynb)
 
 ## Multi-Step Queries
 
@@ -199,8 +193,8 @@ query the index, and then ask followup questions.
 
 **Guides**
 
-- [Query Transformations](/optimizing/advanced_retrieval/query_transformations.md)
-- [Multi-Step Query Decomposition](/examples/query_transformations/HyDEQueryTransformDemo.ipynb) ([Notebook](https://github.com/jerryjliu/llama_index/blob/main/docs/examples/query_transformations/HyDEQueryTransformDemo.ipynb))
+- [Query Transformations](../../optimizing/advanced_retrieval/query_transformations.md)
+- [Multi-Step Query Decomposition](../../examples/query_transformations/HyDEQueryTransformDemo.ipynb) ([Notebook](https://github.com/jerryjliu/llama_index/blob/main/docs/examples/query_transformations/HyDEQueryTransformDemo.ipynb))
 
 ## Temporal Queries
 
@@ -211,23 +205,11 @@ LlamaIndex can support queries that require an understanding of time. It can do
 
 **Guides**
 
-- [Postprocessing Guide](/module_guides/querying/node_postprocessors/node_postprocessors.md)
-- [Prev/Next Postprocessing](/examples/node_postprocessor/PrevNextPostprocessorDemo.ipynb)
-- [Recency Postprocessing](/examples/node_postprocessor/RecencyPostprocessorDemo.ipynb)
+- [Postprocessing Guide](../../module_guides/querying/node_postprocessors/node_postprocessors.md)
+- [Prev/Next Postprocessing](../../examples/node_postprocessor/PrevNextPostprocessorDemo.ipynb)
+- [Recency Postprocessing](../../examples/node_postprocessor/RecencyPostprocessorDemo.ipynb)
 
 ## Additional Resources
 
-- [A Guide to Creating a Unified Query Framework over your indexes](/understanding/putting_it_all_together/q_and_a/unified_query.md)
-- [A Guide to Extracting Terms and Definitions](/understanding/putting_it_all_together/q_and_a/terms_definitions_tutorial.md)
+- [A Guide to Extracting Terms and Definitions](q_and_a/terms_definitions_tutorial.md)
 - [SEC 10k Analysis](https://medium.com/@jerryjliu98/how-unstructured-and-llamaindex-can-help-bring-the-power-of-llms-to-your-own-data-3657d063e30d)
-
-```{toctree}
----
-maxdepth: 1
-hidden: true
----
-/understanding/putting_it_all_together/q_and_a/terms_definitions_tutorial.md
-/understanding/putting_it_all_together/graphs.md
-/understanding/putting_it_all_together/structured_data.md
-/understanding/putting_it_all_together/structured_data/Airbyte_demo.ipynb
-```
diff --git a/docs/understanding/putting_it_all_together/q_and_a/terms_definitions_tutorial.md b/docs/docs/understanding/putting_it_all_together/q_and_a/terms_definitions_tutorial.md
similarity index 100%
rename from docs/understanding/putting_it_all_together/q_and_a/terms_definitions_tutorial.md
rename to docs/docs/understanding/putting_it_all_together/q_and_a/terms_definitions_tutorial.md
diff --git a/docs/understanding/putting_it_all_together/structured_data.md b/docs/docs/understanding/putting_it_all_together/structured_data.md
similarity index 98%
rename from docs/understanding/putting_it_all_together/structured_data.md
rename to docs/docs/understanding/putting_it_all_together/structured_data.md
index 05b6bc23e6c4560179b6eaa618337a3ff074c0ec..ed2add3aa787f812c65fc6c22a1d5dc326f3cf50 100644
--- a/docs/understanding/putting_it_all_together/structured_data.md
+++ b/docs/docs/understanding/putting_it_all_together/structured_data.md
@@ -178,4 +178,4 @@ If you have any questions let us know in [our Discord](https://discord.gg/dGcwcs
 
 Relevant Resources:
 
-- [Airbyte SQL Index Guide](/understanding/putting_it_all_together/structured_data/Airbyte_demo.ipynb)
+- [Airbyte SQL Index Guide](./structured_data/Airbyte_demo.ipynb)
diff --git a/docs/understanding/putting_it_all_together/structured_data/Airbyte_demo.ipynb b/docs/docs/understanding/putting_it_all_together/structured_data/Airbyte_demo.ipynb
similarity index 100%
rename from docs/understanding/putting_it_all_together/structured_data/Airbyte_demo.ipynb
rename to docs/docs/understanding/putting_it_all_together/structured_data/Airbyte_demo.ipynb
diff --git a/docs/understanding/querying/querying.md b/docs/docs/understanding/querying/querying.md
similarity index 85%
rename from docs/understanding/querying/querying.md
rename to docs/docs/understanding/querying/querying.md
index 75916fbf46c12c8ceab310621eada35fe456501e..4cf6e6752e565e3c958da35d34fc29d7fea47aa1 100644
--- a/docs/understanding/querying/querying.md
+++ b/docs/docs/understanding/querying/querying.md
@@ -22,13 +22,12 @@ print(response)
 
 However, there is more to querying than initially meets the eye. Querying consists of three distinct stages:
 
-- **Retrieval** is when you find and return the most relevant documents for your query from your `Index`. As previously discussed in [indexing](/understanding/indexing/indexing.md), the most common type of retrieval is "top-k" semantic retrieval, but there are many other retrieval strategies.
+- **Retrieval** is when you find and return the most relevant documents for your query from your `Index`. As previously discussed in [indexing](../indexing/indexing.md), the most common type of retrieval is "top-k" semantic retrieval, but there are many other retrieval strategies.
 - **Postprocessing** is when the `Node`s retrieved are optionally reranked, transformed, or filtered, for instance by requiring that they have specific metadata such as keywords attached.
 - **Response synthesis** is when your query, your most-relevant data and your prompt are combined and sent to your LLM to return a response.
 
-```{tip}
-You can find out about [how to attach metadata to documents](/module_guides/loading/documents_and_nodes/usage_documents.md) and [nodes](/module_guides/loading/documents_and_nodes/usage_nodes.md).
-```
+!!! tip
+You can find out about [how to attach metadata to documents](../../module_guides/loading/documents_and_nodes/usage_documents.md) and [nodes](../../module_guides/loading/documents_and_nodes/usage_nodes.md).
 
 ## Customizing the stages of querying
 
@@ -68,7 +67,7 @@ print(response)
 
 You can also add your own retrieval, response synthesis, and overall query logic, by implementing the corresponding interfaces.
 
-For a full list of implemented components and the supported configurations, check out our [reference docs](/api_reference/query.rst).
+For a full list of implemented components and the supported configurations, check out our [reference docs](../../api_reference/index.md).
 
 Let's go into more detail about customizing each step:
 
@@ -81,7 +80,7 @@ retriever = VectorIndexRetriever(
 )
 ```
 
-There are a huge variety of retrievers that you can learn about in our [module guide on retrievers](/module_guides/querying/retriever/root.md).
+There are a huge variety of retrievers that you can learn about in our [module guide on retrievers](../../module_guides/querying/retriever/index.md).
 
 ### Configuring node postprocessors
 
@@ -94,7 +93,7 @@ For example:
 - `SimilarityPostprocessor`: filters nodes by setting a threshold on the similarity score (thus only supported by embedding-based retrievers)
 - `PrevNextNodePostprocessor`: augments retrieved `Node` objects with additional relevant context based on `Node` relationships.
 
-The full list of node postprocessors is documented in the [Node Postprocessor Reference](/api_reference/node_postprocessor.rst).
+The full list of node postprocessors is documented in the [Node Postprocessor Reference](../../api_reference/postprocessor/index.md).
 
 To configure the desired node postprocessors:
 
@@ -142,12 +141,12 @@ Right now, we support the following options:
 
 ## Structured Outputs
 
-You may want to ensure your output is structured. See our [Query Engines + Pydantic Outputs](/module_guides/querying/structured_outputs/query_engine.md) to see how to extract a Pydantic object from a query engine class.
+You may want to ensure your output is structured. See our [Query Engines + Pydantic Outputs](../../module_guides/querying/structured_outputs/query_engine.md) to see how to extract a Pydantic object from a query engine class.
 
-Also make sure to check out our entire [Structured Outputs](/module_guides/querying/structured_outputs/structured_outputs.md) guide.
+Also make sure to check out our entire [Structured Outputs](../../module_guides/querying/structured_outputs/index.md) guide.
 
 ## Creating your own Query Pipeline
 
 If you want to design complex query flows, you can compose your own query pipeline across many different modules, from prompts/LLMs/output parsers to retrievers to response synthesizers to your own custom components.
 
-Take a look at our [Query Pipelines Module Guide](/module_guides/querying/pipeline/root.md) for more details.
+Take a look at our [Query Pipelines Module Guide](../../module_guides/querying/pipeline/index.md) for more details.
diff --git a/docs/docs/understanding/retrieval/retrieval.md b/docs/docs/understanding/retrieval/retrieval.md
new file mode 100644
index 0000000000000000000000000000000000000000..06dc6f52bf6a6823f17a22e22673134108d60673
--- /dev/null
+++ b/docs/docs/understanding/retrieval/retrieval.md
@@ -0,0 +1,3 @@
+# Retrieval & Postprocessing
+
+TODO
diff --git a/docs/understanding/storing/storing.md b/docs/docs/understanding/storing/storing.md
similarity index 74%
rename from docs/understanding/storing/storing.md
rename to docs/docs/understanding/storing/storing.md
index 200e8c5754917f1f21befba7ef029e397ed03f44..069a2afcd577459a7c34f718a312e0d3e6ee0330 100644
--- a/docs/understanding/storing/storing.md
+++ b/docs/docs/understanding/storing/storing.md
@@ -1,6 +1,6 @@
 # Storing
 
-Once you have data [loaded](/understanding/loading/loading.md) and [indexed](/understanding/indexing/indexing.md), you will probably want to store it to avoid the time and cost of re-indexing it. By default, your indexed data is stored only in memory.
+Once you have data [loaded](../loading/loading.md) and [indexed](../indexing/indexing.md), you will probably want to store it to avoid the time and cost of re-indexing it. By default, your indexed data is stored only in memory.
 
 ## Persisting to disk
 
@@ -28,17 +28,16 @@ storage_context = StorageContext.from_defaults(persist_dir="<persist_dir>")
 index = load_index_from_storage(storage_context)
 ```
 
-```{tip}
+!!! tip
 Important: if you had initialized your index with a custom
 `transformations`, `embed_model`, etc., you will need to pass in the same
-options during `load_index_from_storage`, or have it set as the [global settings](/module_guides/supporting_modules/settings.md).
-```
+options during `load_index_from_storage`, or have it set as the [global settings](../../module_guides/supporting_modules/settings.md).
 
 ## Using Vector Stores
 
-As discussed in [indexing](/understanding/indexing/indexing.md), one of the most common types of Index is the VectorStoreIndex. The API calls to create the {ref}`embeddings <what-is-an-embedding>` in a VectorStoreIndex can be expensive in terms of time and money, so you will want to store them to avoid having to constantly re-index things.
+As discussed in [indexing](../indexing/indexing.md), one of the most common types of Index is the VectorStoreIndex. The API calls to create the {ref}`embeddings <what-is-an-embedding>` in a VectorStoreIndex can be expensive in terms of time and money, so you will want to store them to avoid having to constantly re-index things.
 
-LlamaIndex supports a [huge number of vector stores](/module_guides/storing/vector_stores.md) which vary in architecture, complexity and cost. In this example we'll be using Chroma, an open-source vector store.
+LlamaIndex supports a [huge number of vector stores](../../module_guides/storing/vector_stores.md) which vary in architecture, complexity and cost. In this example we'll be using Chroma, an open-source vector store.
 
 First you will need to install chroma:
 
@@ -114,13 +113,12 @@ response = query_engine.query("What is llama2?")
 print(response)
 ```
 
-```{tip}
-We have a [more thorough example of using Chroma](/examples/vector_stores/ChromaIndexDemo.ipynb) if you want to go deeper on this store.
-```
+!!! tip
+We have a [more thorough example of using Chroma](../../examples/vector_stores/ChromaIndexDemo.ipynb) if you want to go deeper on this store.
 
 ### You're ready to query!
 
-Now you have loaded data, indexed it, and stored that index, you're ready to [query your data](/understanding/querying/querying.md).
+Now you have loaded data, indexed it, and stored that index, you're ready to [query your data](../querying/querying.md).
 
 ## Inserting Documents or Nodes
 
@@ -134,4 +132,4 @@ for doc in documents:
     index.insert(doc)
 ```
 
-See the [document management how-to](/module_guides/indexing/document_management.md) for more details on managing documents and an example notebook.
+See the [document management how-to](../../module_guides/indexing/document_management.md) for more details on managing documents and an example notebook.
diff --git a/docs/docs/understanding/synthesis/synthesis.md b/docs/docs/understanding/synthesis/synthesis.md
new file mode 100644
index 0000000000000000000000000000000000000000..df7eace4860b2d8c98f8868c2f6841e161548b4e
--- /dev/null
+++ b/docs/docs/understanding/synthesis/synthesis.md
@@ -0,0 +1,3 @@
+# Prompting & Synthesis
+
+TODO
diff --git a/docs/understanding/tracing_and_debugging/tracing_and_debugging.md b/docs/docs/understanding/tracing_and_debugging/tracing_and_debugging.md
similarity index 92%
rename from docs/understanding/tracing_and_debugging/tracing_and_debugging.md
rename to docs/docs/understanding/tracing_and_debugging/tracing_and_debugging.md
index f53af013f431ae54abd78cf2ad976a22ea888849..e766bd372640230aa294aea2c7fd035c4e0d195c 100644
--- a/docs/understanding/tracing_and_debugging/tracing_and_debugging.md
+++ b/docs/docs/understanding/tracing_and_debugging/tracing_and_debugging.md
@@ -31,7 +31,7 @@ import llama_index.core
 llama_index.core.set_global_handler("simple")
 ```
 
-You can also learn how to [build you own custom callback handler](/module_guides/observability/callbacks/root.md).
+You can also learn how to [build you own custom callback handler](../../module_guides/observability/callbacks/index.md).
 
 ## Observability
 
@@ -43,4 +43,4 @@ This feature allows you to seamlessly integrate the LlamaIndex library with powe
 - Ensure that the outputs of any component (LLMs, embeddings) are performing as expected
 - View call traces for both indexing and querying
 
-To learn more, check out our [observability docs](/module_guides/observability/observability.md)
+To learn more, check out our [observability docs](../../module_guides/observability/index.md)
diff --git a/docs/understanding/using_llms/privacy.md b/docs/docs/understanding/using_llms/privacy.md
similarity index 100%
rename from docs/understanding/using_llms/privacy.md
rename to docs/docs/understanding/using_llms/privacy.md
diff --git a/docs/understanding/using_llms/using_llms.md b/docs/docs/understanding/using_llms/using_llms.md
similarity index 76%
rename from docs/understanding/using_llms/using_llms.md
rename to docs/docs/understanding/using_llms/using_llms.md
index 624e5d185c5c70bb268e6975ce3230e4627c43b7..dfdf3a16859e20a1d92c9e68397e353a2fd6496e 100644
--- a/docs/understanding/using_llms/using_llms.md
+++ b/docs/docs/understanding/using_llms/using_llms.md
@@ -1,8 +1,7 @@
 # Using LLMs
 
-```{tip}
-For a list of our supported LLMs and a comparison of their functionality, check out our [LLM module guide](/module_guides/models/llms.md).
-```
+!!! tip
+For a list of our supported LLMs and a comparison of their functionality, check out our [LLM module guide](../../module_guides/models/llms.md).
 
 One of the first steps when building an LLM-based application is which LLM to use; you can also use more than one if you wish.
 
@@ -39,13 +38,15 @@ index = VectorStoreIndex.from_documents(
 
 In this case, you've instantiated OpenAI and customized it to use the `gpt-4` model instead of the default `gpt-3.5-turbo`, and also modified the `temperature`. The `VectorStoreIndex` will now use gpt-4 to answer questions when querying.
 
-```{tip}
-The `Settings` is a bundle of configuration data that you pass into different parts of LlamaIndex. You can [learn more about Settings](/module_guides/supporting_modules/settings.md) and how to customize it.
-```
+!!! tip
+The `Settings` is a bundle of configuration data that you pass into different parts of LlamaIndex. You can [learn more about Settings](../../module_guides/supporting_modules/settings.md) and how to customize it.
 
 ## Available LLMs
 
-We support integrations with OpenAI, Hugging Face, PaLM, and more. Check out our [module guide to LLMs](/module_guides/models/llms.md) for a full list, including how to run a local model.
+We support integrations with OpenAI, Hugging Face, PaLM, and more. Check out our [module guide to LLMs](../../module_guides/models/llms.md) for a full list, including how to run a local model.
+
+!!! tip
+A general note on privacy and LLMs can be found on the [privacy page](./privacy.md).
 
 ### Using a local LLM
 
@@ -60,16 +61,8 @@ from llama_index.core import Settings
 Settings.llm = Ollama(model="llama2", request_timeout=60.0)
 ```
 
-See the [custom LLM's How-To](/module_guides/models/llms/usage_custom.md) for more details.
+See the [custom LLM's How-To](../../module_guides/models/llms/usage_custom.md) for more details.
 
 ## Prompts
 
-By default, LlamaIndex comes with a great set of built-in, battle-tested prompts that handle the tricky work of getting a specific LLM to correctly handle and format data. This is one of the biggest benefits of using LlamaIndex. If you want to, you can [customize the prompts](/module_guides/models/prompts.md)
-
-```{toctree}
----
-maxdepth: 1
-hidden: true
----
-/understanding/using_llms/privacy.md
-```
+By default LlamaIndex comes with a great set of built-in, battle-tested prompts that handle the tricky work of getting a specific LLM to correctly handle and format data. This is one of the biggest benefits of using LlamaIndex. If you want to, you can [customize the prompts](../../module_guides/models/prompts/index.md)
diff --git a/docs/use_cases/agents.md b/docs/docs/use_cases/agents.md
similarity index 83%
rename from docs/use_cases/agents.md
rename to docs/docs/use_cases/agents.md
index ef08413baa02d810414e32afe610d62509846b1f..0806a3283b10379f432083b476a187be5ee8c788 100644
--- a/docs/use_cases/agents.md
+++ b/docs/docs/use_cases/agents.md
@@ -21,23 +21,13 @@ LlamaIndex provides some amazing tools to manage and interact with your data wit
 
 If you've built a RAG pipeline already and want to extend it with agentic behavior, check out the below resources
 
-```{toctree}
----
-maxdepth: 1
----
-Agents (Putting your RAG Pipeline Together) </understanding/putting_it_all_together/agents.md>
-Agentic Strategies (Optimizing your RAG Pipeline) </optimizing/agentic_strategies/agentic_strategies.md>
-```
+- [Agents (Putting your RAG Pipeline Together)](../understanding/putting_it_all_together/agents.md)
+- [Agentic Strategies (Optimizing your RAG Pipeline)](../optimizing/agentic_strategies/agentic_strategies.md)
 
 If you want to check out our standalone documentation hubs on agents and tools, check out the following module guides:
 
-```{toctree}
----
-maxdepth: 1
----
-/module_guides/deploying/agents/root.md
-/module_guides/deploying/agents/tools/root.md
-```
+- [Agents](../module_guides/deploying/agents/index.md)
+- [Tools](../module_guides/deploying/agents/tools/index.md)
 
 ## LlamaHub
 
diff --git a/docs/use_cases/chatbots.md b/docs/docs/use_cases/chatbots.md
similarity index 84%
rename from docs/use_cases/chatbots.md
rename to docs/docs/use_cases/chatbots.md
index 727884c2b1bb41f7cd714e73583fe4500ef280a5..8b564fb6004c76b49416957ee511eaa82e36415f 100644
--- a/docs/use_cases/chatbots.md
+++ b/docs/docs/use_cases/chatbots.md
@@ -6,11 +6,11 @@ LlamaIndex gives you the tools to build knowledge-augmented chatbots and agents.
 
 Here are some relevant resources:
 
-- [Building a chatbot](/understanding/putting_it_all_together/chatbots/building_a_chatbot.md) tutorial
+- [Building a chatbot](../understanding/putting_it_all_together/chatbots/building_a_chatbot.md) tutorial
 - [create-llama](https://blog.llamaindex.ai/create-llama-a-command-line-tool-to-generate-llamaindex-apps-8f7683021191), a command line tool that generates a full-stack chatbot application for you
 - [SECinsights.ai](https://www.secinsights.ai/), an open-source application that uses LlamaIndex to build a chatbot that answers questions about SEC filings
 - [RAGs](https://blog.llamaindex.ai/introducing-rags-your-personalized-chatgpt-experience-over-your-data-2b9d140769b1), a project inspired by OpenAI's GPTs that lets you build a low-code chatbot over your data using Streamlit
-- Our [OpenAI agents](/module_guides/deploying/agents/modules.md) are all chatbots in nature
+- Our [OpenAI agents](../module_guides/deploying/agents/modules.md) are all chat bots in nature
 
 ## External sources
 
diff --git a/docs/use_cases/extraction.md b/docs/docs/use_cases/extraction.md
similarity index 68%
rename from docs/use_cases/extraction.md
rename to docs/docs/use_cases/extraction.md
index 86205e1e1a46f4a2a02044a17e8e84ce4a156f22..3b5867b661467a3c905384d48e003abe485c70ac 100644
--- a/docs/use_cases/extraction.md
+++ b/docs/docs/use_cases/extraction.md
@@ -12,25 +12,15 @@ Once you have structured data you can send them to a database, or you can parse
 
 Check out our Structured Output guide for a comprehensive overview of structured data extraction with LlamaIndex. Do it in a standalone fashion (Pydantic program) or as part of a RAG pipeline. We also have standalone output parsing modules that you can use yourself with an LLM / prompt.
 
-```{toctree}
----
-maxdepth: 2
----
-/module_guides/querying/structured_outputs/structured_outputs.md
-/module_guides/querying/structured_outputs/output_parser.md
-```
+- [Structured Outputs](../module_guides/querying/structured_outputs/index.md)
+- [Output Parsing](../module_guides/querying/structured_outputs/output_parser.md)
 
-We also have multi-modal structured data extraction. [Check it out](multi-modal-pydantic-program).
+We also have multi-modal structured data extraction. [Check it out](../use_cases/multimodal.md#simple-evaluation-of-multi-modal-rag).
 
 ## Misc Examples
 
 Some additional miscellaneous examples highlighting use cases:
 
-```{toctree}
----
-maxdepth: 1
----
-Extracting names and locations from descriptions of people </examples/output_parsing/df_program.ipynb>
-Extracting album data from music reviews </examples/llm/llama_api.ipynb>
-Extracting information from emails </examples/usecases/email_data_extraction.ipynb>
-```
+- [Extracting names and locations from descriptions of people](../examples/output_parsing/df_program.ipynb)
+- [Extracting album data from music reviews](../examples/llm/llama_api.ipynb)
+- [Extracting information from emails](../examples/usecases/email_data_extraction.ipynb)
diff --git a/docs/docs/use_cases/fine_tuning.md b/docs/docs/use_cases/fine_tuning.md
new file mode 100644
index 0000000000000000000000000000000000000000..eda87abe70cf3fbe7f79f8366385815870f30363
--- /dev/null
+++ b/docs/docs/use_cases/fine_tuning.md
@@ -0,0 +1,120 @@
+# Fine-tuning
+
+## Overview
+
+Finetuning a model means updating the model itself over a set of data to improve the model in a variety of ways. This can include improving the quality of outputs, reducing hallucinations, memorizing more data holistically, and reducing latency/cost.
+
+The core of our toolkit revolves around in-context learning / retrieval augmentation, which involves using the models in inference mode and not training the models themselves.
+
+While finetuning can be also used to "augment" a model with external data, finetuning can complement retrieval augmentation in a variety of ways:
+
+#### Embedding Finetuning Benefits
+
+- Finetuning the embedding model can allow for more meaningful embedding representations over a training distribution of data --> leads to better retrieval performance.
+
+#### LLM Finetuning Benefits
+
+- Allow it to learn a style over a given dataset
+- Allow it to learn a DSL that might be less represented in the training data (e.g. SQL)
+- Allow it to correct hallucinations/errors that might be hard to fix through prompt engineering
+- Allow it to distill a better model (e.g. GPT-4) into a simpler/cheaper model (e.g. gpt-3.5, Llama 2)
+
+## Integrations with LlamaIndex
+
+This is an evolving guide, and there are currently three key integrations with LlamaIndex. Please check out the sections below for more details!
+
+- Finetuning embeddings for better retrieval performance
+- Finetuning Llama 2 for better text-to-SQL
+- Finetuning gpt-3.5-turbo to distill gpt-4
+
+## Finetuning Embeddings
+
+We've created comprehensive guides showing you how to finetune embeddings in different ways, whether that's the model itself (in this case, `bge`) over an unstructured text corpus, or an adapter over any black-box embedding. It consists of the following steps:
+
+1. Generating a synthetic question/answer dataset using LlamaIndex over any unstructured context.
+2. Finetuning the model
+3. Evaluating the model.
+
+Finetuning gives you a 5-10% increase in retrieval evaluation metrics. You can then plug this fine-tuned model into your RAG application with LlamaIndex.
+
+- [Fine-tuning an Adapter](../examples/finetuning/embeddings/finetune_embedding_adapter.ipynb)
+- [Embedding Fine-tuning Guide](../examples/finetuning/embeddings/finetune_embedding.ipynb)
+- [Router Fine-tuning](../examples/finetuning/router/router_finetune.ipynb)
+
+**Old**
+
+- [Embedding Fine-tuning Repo](https://github.com/run-llama/finetune-embedding)
+- [Embedding Fine-tuning Blog](https://medium.com/llamaindex-blog/fine-tuning-embeddings-for-rag-with-synthetic-data-e534409a3971)
+
+## Fine-tuning LLMs
+
+### Fine-tuning GPT-3.5 to distill GPT-4
+
+We have multiple guides showing how to use OpenAI's finetuning endpoints to fine-tune gpt-3.5-turbo to output GPT-4 responses for RAG/agents.
+
+We use GPT-4 to automatically generate questions from any unstructured context, and use a GPT-4 query engine pipeline to generate "ground-truth" answers. Our `OpenAIFineTuningHandler` callback automatically logs questions/answers to a dataset.
+
+We then launch a finetuning job, and get back a distilled model. We can evaluate this model with [Ragas](https://github.com/explodinggradients/ragas) to benchmark against a naive GPT-3.5 pipeline.
+
+- [GPT-3.5 Fine-tuning Notebook (Colab)](https://colab.research.google.com/drive/1NgyCJVyrC2xcZ5lxt2frTU862v6eJHlc?usp=sharing)
+- [GPT-3.5 Fine-tuning Notebook (Notebook link)](../examples/finetuning/openai_fine_tuning.ipynb)
+- [React Agent Finetuning](../examples/finetuning/react_agent/react_agent_finetune.ipynb)
+- [[WIP] Function Calling Fine-tuning](../examples/finetuning/openai_fine_tuning_functions.ipynb)
+
+**Old**
+
+- [GPT-3.5 Fine-tuning Notebook (Colab)](https://colab.research.google.com/drive/1vWeJBXdFEObuihO7Z8ui2CAYkdHQORqo?usp=sharing)
+- [GPT-3.5 Fine-tuning Notebook (in Repo)](https://github.com/jerryjliu/llama_index/blob/main/experimental/openai_fine_tuning/openai_fine_tuning.ipynb)
+
+### Fine-tuning for Better Structured Outputs
+
+Another use case for fine-tuning is to make the model better at outputting structured data.
+We can do this for both OpenAI and Llama2.
+
+- [OpenAI Function Calling Fine-tuning](../examples/finetuning/openai_fine_tuning_functions.ipynb)
+- [Llama2 Structured Output Fine-tuning](../examples/finetuning/gradient/gradient_structured.ipynb)
+
+### Fine-tuning Llama 2 for Better Text-to-SQL
+
+In this tutorial, we show you how you can finetune Llama 2 on a text-to-SQL dataset, and then use it for structured analytics against any SQL database using LlamaIndex abstractions.
+
+The stack includes `sql-create-context` as the training dataset, OpenLLaMa as the base model, PEFT for finetuning, Modal for cloud compute, LlamaIndex for inference abstractions.
+
+- [Llama 2 Text-to-SQL Fine-tuning (w/ Gradient.AI)](../examples/finetuning/gradient/gradient_fine_tuning.ipynb)
+- [Llama 2 Text-to-SQL Fine-tuning (w/ Modal, Repo)](https://github.com/run-llama/modal_finetune_sql)
+- [Llama 2 Text-to-SQL Fine-tuning (w/ Modal, Notebook)](https://github.com/run-llama/modal_finetune_sql/blob/main/tutorial.ipynb)
+
+### Fine-tuning An Evaluator
+
+In these tutorials, we aim to distill a GPT-4 judge (or evaluator) onto a GPT-3.5 judge. It has
+been recently observed that GPT-4 judges can reach high levels of agreement with human evaluators (e.g.,
+see https://arxiv.org/pdf/2306.05685.pdf).
+
+Thus, by fine-tuning a GPT-3.5 judge, we may be able to reach GPT-4 levels (and
+by proxy, agreement with humans) at a lower cost.
+
+- [Fine-tune LLM Correctness Judge](../examples/finetuning/llm_judge/correctness/finetune_llm_judge_single_grading_correctness.ipynb)
+- [Fine-tune LLM Judge](../examples/finetuning/llm_judge/pairwise/finetune_llm_judge.ipynb)
+
+## Fine-tuning Cross-Encoders for Re-Ranking
+
+By finetuning a cross encoder, we can attempt to improve re-ranking performance on our own private data.
+
+Re-ranking is key step in advanced retrieval, where retrieved nodes from many sources are re-ranked using a separate model, so that the most relevant nodes
+are first.
+
+In this example, we use the `sentence-transformers` package to help finetune a crossencoder model, using a dataset that is generated based on the `QASPER` dataset.
+
+- [Cross-Encoder Finetuning](../examples/finetuning/cross_encoder_finetuning/cross_encoder_finetuning.ipynb)
+- [Finetuning Llama 2 for Text-to-SQL](https://medium.com/llamaindex-blog/easily-finetune-llama-2-for-your-text-to-sql-applications-ecd53640e10d)
+- [Finetuning GPT-3.5 to Distill GPT-4](https://colab.research.google.com/drive/1vWeJBXdFEObuihO7Z8ui2CAYkdHQORqo?usp=sharing)
+
+## Cohere Custom Reranker
+
+By training a custom reranker with CohereAI, we can attempt to improve re-ranking performance on our own private data.
+
+Re-ranking is a crucial step in advanced retrieval processes. This step involves using a separate model to re-organize nodes retrieved from initial retrieval phase. The goal is to ensure that the most relevant nodes are prioritized and appear first.
+
+In this example, we use the `cohere` custom reranker training module to create a reranker on your domain or specific dataset to improve retrieval performance.
+
+- [Cohere Custom Reranker](../examples/finetuning/rerankers/cohere_custom_reranker.ipynb)
diff --git a/docs/docs/use_cases/graph_querying.md b/docs/docs/use_cases/graph_querying.md
new file mode 100644
index 0000000000000000000000000000000000000000..35c676db7a821c2b5816ef06d9205d88ac3df846
--- /dev/null
+++ b/docs/docs/use_cases/graph_querying.md
@@ -0,0 +1,3 @@
+# Querying Graphs
+
+TODO
diff --git a/docs/docs/use_cases/index.md b/docs/docs/use_cases/index.md
new file mode 100644
index 0000000000000000000000000000000000000000..4e2796b6f98168047d342c043567c094f98c95a3
--- /dev/null
+++ b/docs/docs/use_cases/index.md
@@ -0,0 +1,3 @@
+# Use Cases
+
+See the navigation on the left to explore the use-cases with LlamaIndex!
diff --git a/docs/use_cases/multimodal.md b/docs/docs/use_cases/multimodal.md
similarity index 66%
rename from docs/use_cases/multimodal.md
rename to docs/docs/use_cases/multimodal.md
index 42c5e837439b6eb6cc2be4a6bfaf8fe74085dded..e8c82613334827ad40a42c0a42a6a985ac09ce2b 100644
--- a/docs/use_cases/multimodal.md
+++ b/docs/docs/use_cases/multimodal.md
@@ -17,19 +17,13 @@ All the core RAG concepts: indexing, retrieval, and synthesis, can be extended i
 
 Check out our guides below:
 
-```{toctree}
----
-maxdepth: 1
----
-/examples/multi_modal/gpt4v_multi_modal_retrieval.ipynb
-Multi-modal retrieval with CLIP </examples/multi_modal/multi_modal_retrieval.ipynb>
-Image to Image Retrieval </examples/multi_modal/image_to_image_retrieval.ipynb>
-/examples/multi_modal/structured_image_retrieval.ipynb
-/examples/multi_modal/ChromaMultiModalDemo.ipynb
-/examples/multi_modal/multi_modal_pdf_tables.ipynb
-/examples/multi_modal/gemini.ipynb
-/examples/multi_modal/ollama_cookbook.ipynb
-```
+- [GPT-4V Multi Modal](../examples/multi_modal/gpt4v_multi_modal_retrieval.ipynb)
+- [Multi-modal retrieval with CLIP](../examples/multi_modal/multi_modal_retrieval.ipynb)
+- [Image to Image Retrieval](../examples/multi_modal/image_to_image_retrieval.ipynb)
+- [Structured Image Retrieval](../examples/multi_modal/structured_image_retrieval.ipynb)
+- [Chroma Multi-Modal](../examples/multi_modal/ChromaMultiModalDemo.ipynb)
+- [Gemini Multi-Modal](../examples/multi_modal/gemini.ipynb)
+- [Ollama Multi-Modal](../examples/multi_modal/ollama_cookbook.ipynb)
 
 ### Structured Outputs
 
@@ -37,12 +31,7 @@ You can generate a `structured` output with the new OpenAI GPT4V via LlamaIndex.
 
 Check out the guide below:
 
-```{toctree}
----
-maxdepth: 1
----
-/examples/multi_modal/multi_modal_pydantic.ipynb
-```
+- [Multi-Modal Pydantic Program](../examples/multi_modal/multi_modal_pydantic.ipynb)
 
 ### Retrieval-Augmented Image Captioning
 
@@ -50,24 +39,14 @@ Oftentimes understanding an image requires looking up information from a knowled
 
 Check out our guides below:
 
-```{toctree}
----
-maxdepth: 1
----
-/examples/multi_modal/llava_multi_modal_tesla_10q.ipynb
-```
+- [Llava + Testla 10Q](../examples/multi_modal/llava_multi_modal_tesla_10q.ipynb)
 
 ### Agents
 
 Here are some initial works demonstrating agentic capabilities with GPT-4V.
 
-```{toctree}
----
-maxdepth: 1
----
-/examples/multi_modal/mm_agent.ipynb
-/examples/multi_modal/gpt4v_experiments_cot.ipynb
-```
+- [Multi-Modal Agents](../examples/multi_modal/mm_agent.ipynb)
+- [GPT-4V Experiments](../examples/multi_modal/gpt4v_experiments_cot.ipynb)
 
 ## Evaluations and Comparisons
 
@@ -85,36 +64,19 @@ These notebooks show how to use different Multi-Modal LLM models for image under
 
 Check out our guides below:
 
-```{toctree}
----
-maxdepth: 1
----
-/examples/multi_modal/replicate_multi_modal.ipynb
-GPT4-V: </examples/multi_modal/openai_multi_modal.ipynb>
-```
-
-(multi-modal-pydantic-program)=
+- [Replicate Multi-Modal](../examples/multi_modal/replicate_multi_modal.ipynb)
+- [GPT4-V](../examples/multi_modal/openai_multi_modal.ipynb)
 
 ### Simple Evaluation of Multi-Modal RAG
 
 In this notebook guide, we'll demonstrate how to evaluate a Multi-Modal RAG system. As in the text-only case, we will consider the evaluation of Retrievers and Generators separately. As we alluded to in our blog on the topic of Evaluating Multi-Modal RAGs, our approach here involves the application of adapted versions of the usual techniques for evaluating both Retriever and Generator (used for the text-only case). These adapted versions are part of the llama-index library (i.e., evaluation module), and this notebook will walk you through how you can apply them to your evaluation use cases.
 
-```{toctree}
----
-maxdepth: 1
----
-/examples/evaluation/multi_modal/multi_modal_rag_evaluation.ipynb
-```
+- [Multi-Modal RAG Evaluation](../examples/evaluation/multi_modal/multi_modal_rag_evaluation.ipynb)
 
 ## Model Guides
 
 Here are notebook guides showing you how to interact with different multimodal model providers.
 
-```{toctree}
----
-maxdepth: 1
----
-/examples/multi_modal/openai_multi_modal.ipynb
-/examples/multi_modal/replicate_multi_modal.ipynb
-/examples/multi_modal/ollama_multi_modal.ipynb
-```
+- [OpenAI Multi-Modal](../examples/multi_modal/openai_multi_modal.ipynb)
+- [Replicate Multi-Modal](../examples/multi_modal/replicate_multi_modal.ipynb)
+- [Ollama Multi-Modal](../examples/multi_modal/ollama_cookbook.ipynb)
diff --git a/docs/use_cases/q_and_a/root.md b/docs/docs/use_cases/q_and_a/index.md
similarity index 58%
rename from docs/use_cases/q_and_a/root.md
rename to docs/docs/use_cases/q_and_a/index.md
index 61e76f6790db567554950d92de39c1c34af1450c..03e00ee4f4ea93c2e0b46161baf8caecf1495aa8 100644
--- a/docs/use_cases/q_and_a/root.md
+++ b/docs/docs/use_cases/q_and_a/index.md
@@ -9,36 +9,28 @@ Q&A has all sorts of sub-types, such as:
 ### What to do
 
 - **Semantic search**: finding data that matches not just your query terms, but your intent and the meaning behind your question. This is sometimes known as "top k" search.
-  - [Example of semantic search](semantic-search)
+  - [Example of semantic search](../../understanding/putting_it_all_together/q_and_a.md#semantic-search)
 - **Summarization**: condensing a large amount of data into a short summary relevant to your current question
-  - [Example of summarization](summarization)
+  - [Example of summarization](../../understanding/putting_it_all_together/q_and_a.md#summarization)
 
 ### Where to search
 
 - **Over documents**: LlamaIndex can pull in unstructured text, PDFs, Notion and Slack documents and more and index the data within them.
-  - [Example of search over documents](combine-multiple-sources)
-  - [Building a multi-document agent over the LlamaIndex docs](/examples/agent/multi_document_agents-v1.ipynb)
+  - [Example of search over documents](../../understanding/putting_it_all_together/q_and_a.md#multi-document-queries)
+  - [Building a multi-document agent over the LlamaIndex docs](../../examples/agent/multi_document_agents-v1.ipynb)
 - **Over structured data**: if your data already exists in a SQL database, as JSON or as any number of other structured formats, LlamaIndex can query the data in these sources.
-  - [Searching Pandas tables](/examples/query_engine/pandas_query_engine.ipynb)
-  - [Text to SQL](/examples/index_structs/struct_indices/SQLIndexDemo.ipynb)
+  - [Searching Pandas tables](../../examples/query_engine/pandas_query_engine.ipynb)
+  - [Text to SQL](../../examples/index_structs/struct_indices/SQLIndexDemo.ipynb)
 
 ### How to search
 
 - **Combine multiple sources**: is some of your data in Slack, some in PDFs, some in unstructured text? LlamaIndex can combine queries across an arbitrary number of sources and combine them.
-  - [Example of combining multiple sources](combine-multiple-sources)
+  - [Example of combining multiple sources](../../understanding/putting_it_all_together/q_and_a.md#multi-document-queries)
 - **Route across multiple sources**: given multiple data sources, your application can first pick the best source and then "route" the question to that source.
-  - [Example of routing across multiple sources](route-across-multiple-sources)
+  - [Example of routing across multiple sources](../../understanding/putting_it_all_together/q_and_a.md#routing-over-heterogeneous-data)
 - **Multi-document queries**: some questions have partial answers in multiple data sources which need to be questioned separately before they can be combined
-  - [Example of multi-document queries](multi-document-queries)
+  - [Example of multi-document queries](../../understanding/putting_it_all_together/q_and_a.md#multi-document-queries)
 
 ## Further examples
 
-For further examples of Q&A use cases, see our [Q&A section in Putting it All Together](/understanding/putting_it_all_together/q_and_a.md).
-
-```{toctree}
----
-maxdepth: 2
-hidden: true
----
-/use_cases/q_and_a/rag_cli.md
-```
+For further examples of Q&A use cases, see our [Q&A section in Putting it All Together](../../understanding/putting_it_all_together/q_and_a.md).
diff --git a/docs/use_cases/q_and_a/rag_cli.md b/docs/docs/use_cases/q_and_a/rag_cli.md
similarity index 94%
rename from docs/use_cases/q_and_a/rag_cli.md
rename to docs/docs/use_cases/q_and_a/rag_cli.md
index 06da5db3aaa3f95e6f297fa4ce0f7e3531ea593a..9e8fec25473a3a8acbf31c22c0724e70656b79eb 100644
--- a/docs/use_cases/q_and_a/rag_cli.md
+++ b/docs/docs/use_cases/q_and_a/rag_cli.md
@@ -14,7 +14,7 @@ To set-up the CLI tool, make sure you've installed the library:
 
 `$ pip install -U llama-index`
 
-You will also need to install [Chroma](/examples/vector_stores/ChromaIndexDemo.ipynb):
+You will also need to install [Chroma](../../examples/vector_stores/ChromaIndexDemo.ipynb):
 
 `$ pip install -U chromadb`
 
@@ -90,7 +90,7 @@ If you choose the option `Generate code, install dependencies, and run the app (
 
 ### Supported File Types
 
-Internally, the `rag` CLI tool uses the [SimpleDirectoryReader](/api/llama_index.readers.SimpleDirectoryReader.rst) to parse the raw files in your local filesystem into strings.
+Internally, the `rag` CLI tool uses the [SimpleDirectoryReader](../../module_guides/loading/simpledirectoryreader.md) to parse the raw files in your local filesystem into strings.
 
 This module has custom readers for a wide variety of file types. Some of those may require that you `pip install` another module that is needed for parsing that particular file type.
 
@@ -100,7 +100,7 @@ See the next section for information on how to add your own custom file readers
 
 ## Customization
 
-The `rag` CLI tool is highly customizable! The tool is powered by combining the [`IngestionPipeline`](/module_guides/loading/ingestion_pipeline/root.md) & [`QueryPipeline`](/module_guides/querying/pipeline/root.md) modules within the [`RagCLI`](https://github.com/run-llama/llama_index/blob/main/llama_index/command_line/rag.py) module.
+The `rag` CLI tool is highly customizable! The tool is powered by combining the [`IngestionPipeline`](../../module_guides/loading/ingestion_pipeline/index.md) & [`QueryPipeline`](../../module_guides/querying/pipeline/index.md) modules within the [`RagCLI`](https://github.com/run-llama/llama_index/blob/main/llama_index/command_line/rag.py) module.
 
 To create your own custom rag CLI tool, you can simply create a script that instantiates the `RagCLI` class with a `IngestionPipeline` & `QueryPipeline` that you've configured yourself. From there, you can simply run `rag_cli_instance.cli()` in your script to run the same ingestion and Q&A commands against your own choice of embedding models, LLMs, vector DBs, etc.
 
diff --git a/docs/docs/use_cases/querying_csvs.md b/docs/docs/use_cases/querying_csvs.md
new file mode 100644
index 0000000000000000000000000000000000000000..6fc068612c1f529e3e2b29f2be50094b30ab13ff
--- /dev/null
+++ b/docs/docs/use_cases/querying_csvs.md
@@ -0,0 +1,3 @@
+# Querying CSVs
+
+TODO
diff --git a/docs/docs/use_cases/tables_charts.md b/docs/docs/use_cases/tables_charts.md
new file mode 100644
index 0000000000000000000000000000000000000000..2b27999821cbc0546d25ec628a0a7a10f4d970b6
--- /dev/null
+++ b/docs/docs/use_cases/tables_charts.md
@@ -0,0 +1,3 @@
+# Parsing Tables and Charts
+
+TODO
diff --git a/docs/docs/use_cases/text_to_sql.md b/docs/docs/use_cases/text_to_sql.md
new file mode 100644
index 0000000000000000000000000000000000000000..7d021d3b23824ef25223b141405a6385e337a580
--- /dev/null
+++ b/docs/docs/use_cases/text_to_sql.md
@@ -0,0 +1,3 @@
+# Text to SQL
+
+TODO
diff --git a/docs/docs/vector_stores/faiss_index_0.png b/docs/docs/vector_stores/faiss_index_0.png
new file mode 100644
index 0000000000000000000000000000000000000000..a8aa17bf5c0dd80816aaa042c5251b99f838a38b
Binary files /dev/null and b/docs/docs/vector_stores/faiss_index_0.png differ
diff --git a/docs/docs/vector_stores/faiss_index_1.png b/docs/docs/vector_stores/faiss_index_1.png
new file mode 100644
index 0000000000000000000000000000000000000000..285bae5b88cf8ae768fba56d799eb97357fba33b
Binary files /dev/null and b/docs/docs/vector_stores/faiss_index_1.png differ
diff --git a/docs/docs/vector_stores/pinecone_index_0.png b/docs/docs/vector_stores/pinecone_index_0.png
new file mode 100644
index 0000000000000000000000000000000000000000..f86fd0bbb1ccd02283e12643380eb33fd1b45bef
Binary files /dev/null and b/docs/docs/vector_stores/pinecone_index_0.png differ
diff --git a/docs/docs/vector_stores/pinecone_reader.png b/docs/docs/vector_stores/pinecone_reader.png
new file mode 100644
index 0000000000000000000000000000000000000000..cedae4292122cef592ca5d5c9e2925a01ee99058
Binary files /dev/null and b/docs/docs/vector_stores/pinecone_reader.png differ
diff --git a/docs/docs/vector_stores/qdrant_index_0.png b/docs/docs/vector_stores/qdrant_index_0.png
new file mode 100644
index 0000000000000000000000000000000000000000..287a125ba076005c905449e31ce398b3b1f51fb4
Binary files /dev/null and b/docs/docs/vector_stores/qdrant_index_0.png differ
diff --git a/docs/docs/vector_stores/qdrant_reader.png b/docs/docs/vector_stores/qdrant_reader.png
new file mode 100644
index 0000000000000000000000000000000000000000..64b928c9e59c98563118ebed962f7dc84139854d
Binary files /dev/null and b/docs/docs/vector_stores/qdrant_reader.png differ
diff --git a/docs/docs/vector_stores/simple_index_0.png b/docs/docs/vector_stores/simple_index_0.png
new file mode 100644
index 0000000000000000000000000000000000000000..3318acefcda1a04e8aa4d5d5766bd0b3a5c9b5dd
Binary files /dev/null and b/docs/docs/vector_stores/simple_index_0.png differ
diff --git a/docs/docs/vector_stores/weaviate_index_0.png b/docs/docs/vector_stores/weaviate_index_0.png
new file mode 100644
index 0000000000000000000000000000000000000000..0a03dd1dcbc2e2b3f1669e68f65e18cdc5ab86f1
Binary files /dev/null and b/docs/docs/vector_stores/weaviate_index_0.png differ
diff --git a/docs/docs/vector_stores/weaviate_reader_0.png b/docs/docs/vector_stores/weaviate_reader_0.png
new file mode 100644
index 0000000000000000000000000000000000000000..a3129b8db5bb9c302b215d75b8b6fa4f01134e88
Binary files /dev/null and b/docs/docs/vector_stores/weaviate_reader_0.png differ
diff --git a/docs/docs/vector_stores/weaviate_reader_1.png b/docs/docs/vector_stores/weaviate_reader_1.png
new file mode 100644
index 0000000000000000000000000000000000000000..4313310b114500f549f815016254a34d4e1b24e7
Binary files /dev/null and b/docs/docs/vector_stores/weaviate_reader_1.png differ
diff --git a/docs/examples/agent/Chatbot_SEC.ipynb b/docs/examples/agent/Chatbot_SEC.ipynb
deleted file mode 100644
index a18046754f0ea612799668e83f4f3a9baf800980..0000000000000000000000000000000000000000
--- a/docs/examples/agent/Chatbot_SEC.ipynb
+++ /dev/null
@@ -1,2258 +0,0 @@
-{
- "cells": [
-  {
-   "attachments": {},
-   "cell_type": "markdown",
-   "id": "e8c3c7da",
-   "metadata": {},
-   "source": [
-    "<a href=\"https://colab.research.google.com/github/run-llama/llama_index/blob/main/docs/examples/agent/Chatbot_SEC.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
-   ]
-  },
-  {
-   "attachments": {},
-   "cell_type": "markdown",
-   "id": "ae56bcff",
-   "metadata": {},
-   "source": [
-    "# 💬🤖 How to Build a Chatbot\n",
-    "\n",
-    "LlamaIndex serves as a bridge between your data and Language Learning Models (LLMs), providing a toolkit that enables you to establish a query interface around your data for a variety of tasks, such as question-answering and summarization.\n",
-    "\n",
-    "In this tutorial, we'll walk you through building a context-augmented chatbot using a [Data Agent](https://gpt-index.readthedocs.io/en/stable/core_modules/agent_modules/agents/root.html). This agent, powered by LLMs, is capable of intelligently executing tasks over your data. The end result is a chatbot agent equipped with a robust set of data interface tools provided by LlamaIndex to answer queries about your data.\n",
-    "\n",
-    "**Note**: This tutorial builds upon initial work on creating a query interface over SEC 10-K filings - [check it out here](https://medium.com/@jerryjliu98/how-unstructured-and-llamaindex-can-help-bring-the-power-of-llms-to-your-own-data-3657d063e30d).\n",
-    "\n",
-    "### Context\n",
-    "\n",
-    "In this guide, we’ll build a \"10-K Chatbot\" that uses raw UBER 10-K HTML filings from Dropbox. Users can interact with the chatbot to ask questions related to the 10-K filings."
-   ]
-  },
-  {
-   "attachments": {},
-   "cell_type": "markdown",
-   "id": "03f3e1de",
-   "metadata": {},
-   "source": [
-    "### Preparation"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "35c20fbe",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "%pip install llama-index-readers-file\n",
-    "%pip install llama-index-embeddings-openai\n",
-    "%pip install llama-index-agent-openai\n",
-    "%pip install llama-index-llms-openai"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "1211059f",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "import os\n",
-    "\n",
-    "os.environ[\"OPENAI_API_KEY\"] = \"sk-...\"\n",
-    "\n",
-    "import nest_asyncio\n",
-    "\n",
-    "nest_asyncio.apply()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "CuHeyb224pI2",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# set text wrapping\n",
-    "from IPython.display import HTML, display\n",
-    "\n",
-    "\n",
-    "def set_css():\n",
-    "    display(\n",
-    "        HTML(\n",
-    "            \"\"\"\n",
-    "  <style>\n",
-    "    pre {\n",
-    "        white-space: pre-wrap;\n",
-    "    }\n",
-    "  </style>\n",
-    "  \"\"\"\n",
-    "        )\n",
-    "    )\n",
-    "\n",
-    "\n",
-    "get_ipython().events.register(\"pre_run_cell\", set_css)"
-   ]
-  },
-  {
-   "attachments": {},
-   "cell_type": "markdown",
-   "id": "218cc812",
-   "metadata": {},
-   "source": [
-    "### Ingest Data\n",
-    "\n",
-    "Let's first download the raw 10-k files, from 2019-2022."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "YC4R6nkCp91d",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# NOTE: the code examples assume you're operating within a Jupyter notebook.\n",
-    "# download files\n",
-    "!mkdir data\n",
-    "!wget \"https://www.dropbox.com/s/948jr9cfs7fgj99/UBER.zip?dl=1\" -O data/UBER.zip\n",
-    "!unzip data/UBER.zip -d data"
-   ]
-  },
-  {
-   "attachments": {},
-   "cell_type": "markdown",
-   "id": "a2200f83",
-   "metadata": {},
-   "source": [
-    "To parse the HTML files into formatted text, we use the [Unstructured](https://github.com/Unstructured-IO/unstructured) library. Thanks to [LlamaHub](https://llamahub.ai/), we can directly integrate with Unstructured, allowing conversion of any text into a Document format that LlamaIndex can ingest.\n",
-    "\n",
-    "First we install the necessary packages:"
-   ]
-  },
-  {
-   "attachments": {},
-   "cell_type": "markdown",
-   "id": "f55a00d7",
-   "metadata": {},
-   "source": [
-    "Then we can use the `UnstructuredReader` to parse the HTML files into a list of `Document` objects."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "5dcd0f94",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "from llama_index.readers.file import UnstructuredReader\n",
-    "from pathlib import Path\n",
-    "\n",
-    "years = [2022, 2021, 2020, 2019]\n",
-    "\n",
-    "loader = UnstructuredReader()\n",
-    "doc_set = {}\n",
-    "all_docs = []\n",
-    "for year in years:\n",
-    "    year_docs = loader.load_data(\n",
-    "        file=Path(f\"./data/UBER/UBER_{year}.html\"), split_documents=False\n",
-    "    )\n",
-    "    # insert year metadata into each year\n",
-    "    for d in year_docs:\n",
-    "        d.metadata = {\"year\": year}\n",
-    "    doc_set[year] = year_docs\n",
-    "    all_docs.extend(year_docs)"
-   ]
-  },
-  {
-   "attachments": {},
-   "cell_type": "markdown",
-   "id": "312d0cfe",
-   "metadata": {},
-   "source": [
-    "### Setting up Vector Indices for each year\n",
-    "\n",
-    "We first setup a vector index for each year. Each vector index allows us\n",
-    "to ask questions about the 10-K filing of a given year.\n",
-    "\n",
-    "We build each index and save it to disk."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "7c90fafc",
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/html": [
-       "\n",
-       "  <style>\n",
-       "    pre {\n",
-       "        white-space: pre-wrap;\n",
-       "    }\n",
-       "  </style>\n",
-       "  "
-      ],
-      "text/plain": [
-       "<IPython.core.display.HTML object>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    }
-   ],
-   "source": [
-    "# initialize simple vector indices\n",
-    "# NOTE: don't run this cell if the indices are already loaded!\n",
-    "from llama_index.core import VectorStoreIndex, StorageContext\n",
-    "from llama_index.embeddings.openai import OpenAIEmbedding\n",
-    "from llama_index.llms.openai import OpenAI\n",
-    "from llama_index.core import Settings\n",
-    "\n",
-    "Settings.chunk_size = 512\n",
-    "Settings.chunk_overlap = 64\n",
-    "Settings.llm = OpenAI(model=\"gpt-3.5-turbo\")\n",
-    "Settings.embed_model = OpenAIEmbedding(model=\"text-embedding-3-small\")\n",
-    "\n",
-    "index_set = {}\n",
-    "for year in years:\n",
-    "    storage_context = StorageContext.from_defaults()\n",
-    "    cur_index = VectorStoreIndex.from_documents(\n",
-    "        doc_set[year],\n",
-    "        storage_context=storage_context,\n",
-    "    )\n",
-    "    index_set[year] = cur_index\n",
-    "    storage_context.persist(persist_dir=f\"./storage/{year}\")"
-   ]
-  },
-  {
-   "attachments": {},
-   "cell_type": "markdown",
-   "id": "f0704f6b",
-   "metadata": {},
-   "source": [
-    "To load an index from disk, do the following"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "7100e1b5",
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/html": [
-       "\n",
-       "  <style>\n",
-       "    pre {\n",
-       "        white-space: pre-wrap;\n",
-       "    }\n",
-       "  </style>\n",
-       "  "
-      ],
-      "text/plain": [
-       "<IPython.core.display.HTML object>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    }
-   ],
-   "source": [
-    "# Load indices from disk\n",
-    "from llama_index.core import load_index_from_storage\n",
-    "\n",
-    "index_set = {}\n",
-    "for year in years:\n",
-    "    storage_context = StorageContext.from_defaults(\n",
-    "        persist_dir=f\"./storage/{year}\"\n",
-    "    )\n",
-    "    cur_index = load_index_from_storage(\n",
-    "        storage_context,\n",
-    "    )\n",
-    "    index_set[year] = cur_index"
-   ]
-  },
-  {
-   "attachments": {},
-   "cell_type": "markdown",
-   "id": "0aa3f903",
-   "metadata": {},
-   "source": [
-    "### Setting up a Sub Question Query Engine to Synthesize Answers Across 10-K Filings\n",
-    "\n",
-    "Since we have access to documents of 4 years, we may not only want to ask questions regarding the 10-K document of a given year, but ask questions that require analysis over all 10-K filings.\n",
-    "\n",
-    "To address this, we can use a [Sub Question Query Engine](https://gpt-index.readthedocs.io/en/stable/examples/query_engine/sub_question_query_engine.html). It decomposes a query into subqueries, each answered by an individual vector index, and synthesizes the results to answer the overall query.\n",
-    "\n",
-    "LlamaIndex provides some wrappers around indices (and query engines) so that they can be used by query engines and agents. First we define a `QueryEngineTool` for each vector index.\n",
-    "Each tool has a name and a description; these are what the LLM agent sees to decide which tool to choose."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "ce53419f",
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/html": [
-       "\n",
-       "  <style>\n",
-       "    pre {\n",
-       "        white-space: pre-wrap;\n",
-       "    }\n",
-       "  </style>\n",
-       "  "
-      ],
-      "text/plain": [
-       "<IPython.core.display.HTML object>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    }
-   ],
-   "source": [
-    "from llama_index.core.tools import QueryEngineTool, ToolMetadata\n",
-    "\n",
-    "individual_query_engine_tools = [\n",
-    "    QueryEngineTool(\n",
-    "        query_engine=index_set[year].as_query_engine(),\n",
-    "        metadata=ToolMetadata(\n",
-    "            name=f\"vector_index_{year}\",\n",
-    "            description=(\n",
-    "                \"useful for when you want to answer queries about the\"\n",
-    "                f\" {year} SEC 10-K for Uber\"\n",
-    "            ),\n",
-    "        ),\n",
-    "    )\n",
-    "    for year in years\n",
-    "]"
-   ]
-  },
-  {
-   "attachments": {},
-   "cell_type": "markdown",
-   "id": "6e8d2177",
-   "metadata": {},
-   "source": [
-    "Now we can create the Sub Question Query Engine, which will allow us to synthesize answers across the 10-K filings. We pass in the `individual_query_engine_tools` we defined above."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "9c6cee32",
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/html": [
-       "\n",
-       "  <style>\n",
-       "    pre {\n",
-       "        white-space: pre-wrap;\n",
-       "    }\n",
-       "  </style>\n",
-       "  "
-      ],
-      "text/plain": [
-       "<IPython.core.display.HTML object>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    }
-   ],
-   "source": [
-    "from llama_index.core.query_engine import SubQuestionQueryEngine\n",
-    "\n",
-    "query_engine = SubQuestionQueryEngine.from_defaults(\n",
-    "    query_engine_tools=individual_query_engine_tools,\n",
-    ")"
-   ]
-  },
-  {
-   "attachments": {},
-   "cell_type": "markdown",
-   "id": "de5362b6",
-   "metadata": {},
-   "source": [
-    "### Setting up the Chatbot Agent\n",
-    "\n",
-    "We use a LlamaIndex Data Agent to setup the outer chatbot agent, which has access to a set of Tools. Specifically, we will use an OpenAIAgent, that takes advantage of OpenAI API function calling. We want to use the separate Tools we defined previously for each index (corresponding to a given year), as well as a tool for the sub question query engine we defined above.\n",
-    "\n",
-    "First we define a `QueryEngineTool` for the sub question query engine:"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "f42e5a52",
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/html": [
-       "\n",
-       "  <style>\n",
-       "    pre {\n",
-       "        white-space: pre-wrap;\n",
-       "    }\n",
-       "  </style>\n",
-       "  "
-      ],
-      "text/plain": [
-       "<IPython.core.display.HTML object>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    }
-   ],
-   "source": [
-    "query_engine_tool = QueryEngineTool(\n",
-    "    query_engine=query_engine,\n",
-    "    metadata=ToolMetadata(\n",
-    "        name=\"sub_question_query_engine\",\n",
-    "        description=(\n",
-    "            \"useful for when you want to answer queries that require analyzing\"\n",
-    "            \" multiple SEC 10-K documents for Uber\"\n",
-    "        ),\n",
-    "    ),\n",
-    ")"
-   ]
-  },
-  {
-   "attachments": {},
-   "cell_type": "markdown",
-   "id": "fdcc922d",
-   "metadata": {},
-   "source": [
-    "Then, we combine the Tools we defined above into a single list of tools for the agent:"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "fad25dca",
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/html": [
-       "\n",
-       "  <style>\n",
-       "    pre {\n",
-       "        white-space: pre-wrap;\n",
-       "    }\n",
-       "  </style>\n",
-       "  "
-      ],
-      "text/plain": [
-       "<IPython.core.display.HTML object>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    }
-   ],
-   "source": [
-    "tools = individual_query_engine_tools + [query_engine_tool]"
-   ]
-  },
-  {
-   "attachments": {},
-   "cell_type": "markdown",
-   "id": "14219225",
-   "metadata": {},
-   "source": [
-    "Finally, we call `OpenAIAgent.from_tools` to create the agent, passing in the list of tools we defined above."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "bb01833c",
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/html": [
-       "\n",
-       "  <style>\n",
-       "    pre {\n",
-       "        white-space: pre-wrap;\n",
-       "    }\n",
-       "  </style>\n",
-       "  "
-      ],
-      "text/plain": [
-       "<IPython.core.display.HTML object>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    }
-   ],
-   "source": [
-    "from llama_index.agent.openai import OpenAIAgent\n",
-    "\n",
-    "agent = OpenAIAgent.from_tools(tools, verbose=True)"
-   ]
-  },
-  {
-   "attachments": {},
-   "cell_type": "markdown",
-   "id": "9e6112d4",
-   "metadata": {},
-   "source": [
-    "### Testing the Agent\n",
-    "\n",
-    "We can now test the agent with various queries.\n",
-    "\n",
-    "If we test it with a simple \"hello\" query, the agent does not use any Tools."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "269e6700",
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/html": [
-       "\n",
-       "  <style>\n",
-       "    pre {\n",
-       "        white-space: pre-wrap;\n",
-       "    }\n",
-       "  </style>\n",
-       "  "
-      ],
-      "text/plain": [
-       "<IPython.core.display.HTML object>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    },
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Added user message to memory: hi, i am bob\n",
-      "Hello Bob! How can I assist you today?\n"
-     ]
-    }
-   ],
-   "source": [
-    "response = agent.chat(\"hi, i am bob\")\n",
-    "print(str(response))"
-   ]
-  },
-  {
-   "attachments": {},
-   "cell_type": "markdown",
-   "id": "2fe5fb92",
-   "metadata": {},
-   "source": [
-    "If we test it with a query regarding the 10-k of a given year, the agent will use\n",
-    "the relevant vector index Tool."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "bb8226e6",
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/html": [
-       "\n",
-       "  <style>\n",
-       "    pre {\n",
-       "        white-space: pre-wrap;\n",
-       "    }\n",
-       "  </style>\n",
-       "  "
-      ],
-      "text/plain": [
-       "<IPython.core.display.HTML object>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    },
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Added user message to memory: What were some of the biggest risk factors in 2020 for Uber?\n",
-      "=== Calling Function ===\n",
-      "Calling function: vector_index_2020 with args: {\n",
-      "  \"input\": \"biggest risk factors\"\n",
-      "}\n",
-      "Got output: The biggest risk factors mentioned in the context are:\n",
-      "\n",
-      "1. The adverse impact of the COVID-19 pandemic and actions taken to mitigate it on the business.\n",
-      "2. The potential reclassification of drivers as employees, workers, or quasi-employees instead of independent contractors.\n",
-      "3. Intense competition in the mobility, delivery, and logistics industries.\n",
-      "4. The need to lower fares or service fees and offer driver incentives and consumer discounts to remain competitive.\n",
-      "5. Significant losses incurred and the uncertainty of achieving profitability.\n",
-      "6. Difficulty in attracting and maintaining a critical mass of platform users.\n",
-      "7. Operational, compliance, and cultural challenges.\n",
-      "8. Negative media coverage and reputation issues.\n",
-      "9. Inability to optimize organizational structure or manage growth effectively.\n",
-      "10. Safety incidents that harm the ability to attract and retain platform users.\n",
-      "11. Risks associated with substantial investments in new offerings and technologies.\n",
-      "12. Potential fines or enforcement measures due to challenges faced.\n",
-      "13. Uncertainty and potential long-term financial impact of the COVID-19 pandemic, including changes in user behavior and demand for mobility services.\n",
-      "14. Potential adverse impact from business partners and third-party vendors affected by the pandemic.\n",
-      "15. Volatility in financial markets and its effect on stock price and access to capital markets.\n",
-      "\n",
-      "These are the biggest risk factors mentioned in the given context.\n",
-      "========================\n",
-      "\n",
-      "The biggest risk factors for Uber in 2020 were:\n",
-      "\n",
-      "1. The adverse impact of the COVID-19 pandemic and actions taken to mitigate it on the business.\n",
-      "2. The potential reclassification of drivers as employees, workers, or quasi-employees instead of independent contractors.\n",
-      "3. Intense competition in the mobility, delivery, and logistics industries.\n",
-      "4. The need to lower fares or service fees and offer driver incentives and consumer discounts to remain competitive.\n",
-      "5. Significant losses incurred and the uncertainty of achieving profitability.\n",
-      "6. Difficulty in attracting and maintaining a critical mass of platform users.\n",
-      "7. Operational, compliance, and cultural challenges.\n",
-      "8. Negative media coverage and reputation issues.\n",
-      "9. Inability to optimize organizational structure or manage growth effectively.\n",
-      "10. Safety incidents that harm the ability to attract and retain platform users.\n",
-      "11. Risks associated with substantial investments in new offerings and technologies.\n",
-      "12. Potential fines or enforcement measures due to challenges faced.\n",
-      "13. Uncertainty and potential long-term financial impact of the COVID-19 pandemic, including changes in user behavior and demand for mobility services.\n",
-      "14. Potential adverse impact from business partners and third-party vendors affected by the pandemic.\n",
-      "15. Volatility in financial markets and its effect on stock price and access to capital markets.\n",
-      "\n",
-      "These risk factors highlight the challenges and uncertainties faced by Uber in 2020.\n"
-     ]
-    }
-   ],
-   "source": [
-    "response = agent.chat(\n",
-    "    \"What were some of the biggest risk factors in 2020 for Uber?\"\n",
-    ")\n",
-    "print(str(response))"
-   ]
-  },
-  {
-   "attachments": {},
-   "cell_type": "markdown",
-   "id": "78ac181f",
-   "metadata": {},
-   "source": [
-    "Finally, if we test it with a query to compare/contrast risk factors across years, the agent will use the Sub Question Query Engine Tool."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "72e475bf",
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/html": [
-       "\n",
-       "  <style>\n",
-       "    pre {\n",
-       "        white-space: pre-wrap;\n",
-       "    }\n",
-       "  </style>\n",
-       "  "
-      ],
-      "text/plain": [
-       "<IPython.core.display.HTML object>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    },
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Added user message to memory: Compare/contrast the risk factors described in the Uber 10-K across years. Give answer in bullet points.\n",
-      "=== Calling Function ===\n",
-      "Calling function: sub_question_query_engine with args: {\n",
-      "  \"input\": \"Compare/contrast the risk factors described in the Uber 10-K across years\"\n",
-      "}\n",
-      "Generated 4 sub questions.\n",
-      "\u001b[1;3;38;2;237;90;200m[vector_index_2022] Q: What are the risk factors described in the 2022 SEC 10-K for Uber?\n",
-      "\u001b[0m\u001b[1;3;38;2;90;149;237m[vector_index_2021] Q: What are the risk factors described in the 2021 SEC 10-K for Uber?\n",
-      "\u001b[0m\u001b[1;3;38;2;11;159;203m[vector_index_2020] Q: What are the risk factors described in the 2020 SEC 10-K for Uber?\n",
-      "\u001b[0m\u001b[1;3;38;2;155;135;227m[vector_index_2019] Q: What are the risk factors described in the 2019 SEC 10-K for Uber?\n",
-      "\u001b[0m\u001b[1;3;38;2;237;90;200m[vector_index_2022] A: The risk factors described in the 2022 SEC 10-K for Uber are not provided in the given context information.\n",
-      "\u001b[0m\u001b[1;3;38;2;90;149;237m[vector_index_2021] A: The risk factors described in the 2021 SEC 10-K for Uber are not provided in the given context information.\n",
-      "\u001b[0m\u001b[1;3;38;2;155;135;227m[vector_index_2019] A: The risk factors described in the 2019 SEC 10-K for Uber include potential infringement of intellectual property, the need to protect proprietary information, dependence on rapid technological advances, seasonality in revenue generation, fluctuations in usage of the platform, seasonal increases in revenue for certain quarters, and the potential impact of employee actions.\n",
-      "\u001b[0m\u001b[1;3;38;2;11;159;203m[vector_index_2020] A: The risk factors described in the 2020 SEC 10-K for Uber include the potential adverse effects on their business, financial condition, and results of operations. These risks could cause a decline in the trading price of their common stock and harm their business prospects. Additionally, there may be risks and uncertainties not currently known to Uber or that they do not believe are material. For a more detailed discussion of these risk factors, please refer to the \"Risk Factors\" section in Uber's Annual Report on Form 10-K.\n",
-      "\u001b[0mGot output: The risk factors described in the Uber 10-K vary across different years. In the 2020 SEC 10-K, the risk factors include potential adverse effects on their business, financial condition, and results of operations. However, the 2019 SEC 10-K includes additional risk factors such as potential infringement of intellectual property, the need to protect proprietary information, dependence on rapid technological advances, seasonality in revenue generation, fluctuations in usage of the platform, seasonal increases in revenue for certain quarters, and the potential impact of employee actions. It is important to note that the specific risk factors may change from year to year based on the evolving business environment and circumstances.\n",
-      "========================\n",
-      "\n",
-      "=== Calling Function ===\n",
-      "Calling function: vector_index_2022 with args: {\n",
-      "  \"input\": \"risk factors\"\n",
-      "}\n",
-      "Got output: Some of the risk factors mentioned in the context include the potential failure to meet regulatory requirements related to climate change, the impact of contagious diseases and pandemics on the business, the occurrence of catastrophic events, the uncertainty surrounding future pandemics or disease outbreaks, and the competitive nature of the mobility, delivery, and logistics industries. Additionally, the classification of drivers as employees instead of independent contractors, the need to lower fares or service fees to remain competitive, and the company's history of significant losses and anticipated increase in operating expenses are also mentioned as risk factors.\n",
-      "========================\n",
-      "\n",
-      "=== Calling Function ===\n",
-      "Calling function: vector_index_2021 with args: {\n",
-      "  \"input\": \"risk factors\"\n",
-      "}\n",
-      "Got output: The COVID-19 pandemic and the impact of actions to mitigate the pandemic have adversely affected and may continue to adversely affect parts of our business. Our business would be adversely affected if Drivers were classified as employees, workers or quasi-employees instead of independent contractors. The mobility, delivery, and logistics industries are highly competitive, with well-established and low-cost alternatives that have been available for decades, low barriers to entry, low switching costs, and well-capitalized competitors in nearly every major geographic region. To remain competitive in certain markets, we have in the past lowered, and may continue to lower, fares or service fees, and we have in the past offered, and may continue to offer, significant Driver incentives and consumer discounts and promotions. We have incurred significant losses since inception, including in the United States and other major markets. We expect our operating expenses to increase significantly in the foreseeable future, and we may not achieve or maintain profitability. If we are unable to attract or maintain a critical mass of Drivers, consumers, merchants, shippers, and carriers, whether as a result of competition or other factors, our platform will become less appealing to platform users. Maintaining and enhancing our brand and reputation is critical to our business prospects. We have previously received significant media coverage and negative publicity regarding our brand and reputation, and while we have taken significant steps to rehabilitate our brand and reputation, failure to maintain and enhance our brand and reputation will cause our business to suffer. Our historical workplace culture and forward-leaning approach created operational, compliance, and cultural challenges and our efforts to address these challenges may not be successful. If we are unable to optimize our organizational structure or effectively manage our growth, our financial performance and future prospects will be adversely affected. Platform users may engage in, or be subject to, criminal, violent, inappropriate, or dangerous activity that results in major safety incidents, which may harm our ability to attract and retain Drivers, consumers, merchants, shippers, and carriers. We are making substantial investments in new offerings and technologies, and may increase such investments in the future. These new ventures are inherently risky, and we may never realize any expected benefits from them.\n",
-      "========================\n",
-      "\n",
-      "=== Calling Function ===\n",
-      "Calling function: vector_index_2020 with args: {\n",
-      "  \"input\": \"risk factors\"\n",
-      "}\n",
-      "Got output: The risk factors mentioned in the context include the adverse impact of the COVID-19 pandemic, potential reclassification of drivers as employees, intense competition in the mobility, delivery, and logistics industries, the need to lower fares and offer incentives to remain competitive, significant losses and increased operating expenses, the importance of attracting and maintaining platform users, operational and cultural challenges, negative media coverage affecting brand reputation, difficulties in managing growth and organizational structure, safety incidents, risks associated with new ventures and investments, legal uncertainties, challenges in international operations, currency fluctuations, tax consequences, financial reporting burdens, political and economic instability, public health concerns, and limited influence over minority-owned affiliates. These risk factors could have an adverse effect on the business, financial condition, operating results, and prospects of the company.\n",
-      "========================\n",
-      "\n",
-      "=== Calling Function ===\n",
-      "Calling function: vector_index_2019 with args: {\n",
-      "  \"input\": \"risk factors\"\n",
-      "}\n",
-      "Got output: The personal mobility, meal delivery, and logistics industries are highly competitive, with well-established and low-cost alternatives that have been available for decades, low barriers to entry, low switching costs, and well-capitalized competitors in nearly every major geographic region. If we are unable to compete effectively in these industries, our business and financial prospects would be adversely impacted.\n",
-      "========================\n",
-      "\n",
-      "Here is a comparison of the risk factors described in the Uber 10-K across years:\n",
-      "\n",
-      "2022:\n",
-      "- Potential failure to meet regulatory requirements related to climate change\n",
-      "- Impact of contagious diseases and pandemics on the business\n",
-      "- Occurrence of catastrophic events\n",
-      "- Uncertainty surrounding future pandemics or disease outbreaks\n",
-      "- Competitive nature of the mobility, delivery, and logistics industries\n",
-      "- Classification of drivers as employees instead of independent contractors\n",
-      "- Need to lower fares or service fees to remain competitive\n",
-      "- History of significant losses and anticipated increase in operating expenses\n",
-      "\n",
-      "2021:\n",
-      "- Adverse impact of the COVID-19 pandemic and actions to mitigate it\n",
-      "- Potential reclassification of drivers as employees instead of independent contractors\n",
-      "- Intense competition in the mobility, delivery, and logistics industries\n",
-      "- Need to lower fares or service fees and offer driver incentives and consumer discounts\n",
-      "- Significant losses incurred and uncertainty of achieving profitability\n",
-      "- Difficulty in attracting and maintaining a critical mass of platform users\n",
-      "- Operational, compliance, and cultural challenges\n",
-      "- Negative media coverage and reputation issues\n",
-      "- Inability to optimize organizational structure or manage growth effectively\n",
-      "- Safety incidents that harm the ability to attract and retain platform users\n",
-      "- Risks associated with substantial investments in new offerings and technologies\n",
-      "\n",
-      "2020:\n",
-      "- Adverse impact of the COVID-19 pandemic and actions taken to mitigate it\n",
-      "- Potential reclassification of drivers as employees, workers, or quasi-employees instead of independent contractors\n",
-      "- Intense competition in the mobility, delivery, and logistics industries\n",
-      "- Need to lower fares or service fees and offer driver incentives and consumer discounts\n",
-      "- Significant losses incurred and uncertainty of achieving profitability\n",
-      "- Difficulty in attracting and maintaining a critical mass of platform users\n",
-      "- Operational, compliance, and cultural challenges\n",
-      "- Negative media coverage and reputation issues\n",
-      "- Inability to optimize organizational structure or manage growth effectively\n",
-      "- Safety incidents that harm the ability to attract and retain platform users\n",
-      "- Risks associated with substantial investments in new offerings and technologies\n",
-      "- Potential fines or enforcement measures due to challenges faced\n",
-      "- Uncertainty and potential long-term financial impact of the COVID-19 pandemic\n",
-      "- Potential adverse impact from business partners and third-party vendors affected by the pandemic\n",
-      "- Volatility in financial markets and its effect on stock price and access to capital markets\n",
-      "\n",
-      "2019:\n",
-      "- Highly competitive personal mobility, meal delivery, and logistics industries\n",
-      "- Potential inability to compete effectively in these industries\n",
-      "\n",
-      "These bullet points highlight the similarities and differences in the risk factors described in the Uber 10-K across years.\n"
-     ]
-    }
-   ],
-   "source": [
-    "cross_query_str = (\n",
-    "    \"Compare/contrast the risk factors described in the Uber 10-K across\"\n",
-    "    \" years. Give answer in bullet points.\"\n",
-    ")\n",
-    "\n",
-    "response = agent.chat(cross_query_str)\n",
-    "print(str(response))"
-   ]
-  },
-  {
-   "attachments": {},
-   "cell_type": "markdown",
-   "id": "1153ee23",
-   "metadata": {},
-   "source": [
-    "### Setting up the Chatbot Loop\n",
-    "\n",
-    "Now that we have the chatbot setup, it only takes a few more steps to setup a basic interactive loop to chat with our SEC-augmented chatbot!"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "5fa14fa6",
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/html": [
-       "\n",
-       "  <style>\n",
-       "    pre {\n",
-       "        white-space: pre-wrap;\n",
-       "    }\n",
-       "  </style>\n",
-       "  "
-      ],
-      "text/plain": [
-       "<IPython.core.display.HTML object>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    },
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Agent: In 2022, Uber is facing several legal proceedings. Here are some of them:\n",
-      "\n",
-      "1. California: The state Attorney General and city attorneys filed a complaint against Uber and Lyft, alleging that drivers are misclassified as independent contractors. A preliminary injunction was issued but stayed pending appeal. The Court of Appeal affirmed the lower court's ruling, and Uber filed a petition for review with the California Supreme Court. However, the Supreme Court declined the petition for review. The lawsuit is ongoing, focusing on claims by the California Attorney General for periods prior to the enactment of Proposition 22.\n",
-      "\n",
-      "2. Massachusetts: The Attorney General of Massachusetts filed a complaint against Uber, alleging that drivers are employees entitled to wage and labor law protections. Uber's motion to dismiss the complaint was denied, and a summary judgment motion is pending.\n",
-      "\n",
-      "3. New York: Uber is facing allegations of misclassification and employment violations by the state Attorney General. The resolution of this matter is uncertain.\n",
-      "\n",
-      "4. Switzerland: Several administrative bodies in Switzerland have issued rulings classifying Uber drivers as employees for social security or labor purposes. Uber is challenging these rulings before the Social Security and Administrative Tribunals.\n",
-      "\n",
-      "These are some of the legal proceedings against Uber in 2022. The outcomes and potential losses in these cases are uncertain.\n"
-     ]
-    }
-   ],
-   "source": [
-    "agent = OpenAIAgent.from_tools(tools)  # verbose=False by default\n",
-    "\n",
-    "while True:\n",
-    "    text_input = input(\"User: \")\n",
-    "    if text_input == \"exit\":\n",
-    "        break\n",
-    "    response = agent.chat(text_input)\n",
-    "    print(f\"Agent: {response}\")\n",
-    "\n",
-    "# User: What were some of the legal proceedings against Uber in 2022?"
-   ]
-  }
- ],
- "metadata": {
-  "colab": {
-   "provenance": []
-  },
-  "kernelspec": {
-   "display_name": "Python 3 (ipykernel)",
-   "language": "python",
-   "name": "python3"
-  },
-  "language_info": {
-   "codemirror_mode": {
-    "name": "ipython",
-    "version": 3
-   },
-   "file_extension": ".py",
-   "mimetype": "text/x-python",
-   "name": "python",
-   "nbconvert_exporter": "python",
-   "pygments_lexer": "ipython3"
-  },
-  "widgets": {
-   "application/vnd.jupyter.widget-state+json": {
-    "0a8d7bc06ed646b78956101c5c62fb1f": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "FloatProgressModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "FloatProgressModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "ProgressView",
-      "bar_style": "success",
-      "description": "",
-      "description_tooltip": null,
-      "layout": "IPY_MODEL_112ef61e952444369d6c0dce1d1098a8",
-      "max": 456318,
-      "min": 0,
-      "orientation": "horizontal",
-      "style": "IPY_MODEL_afe741aff3f54ae6a89b5965888599f4",
-      "value": 456318
-     }
-    },
-    "0cccb700fc264051abc0b7458716054f": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "DescriptionStyleModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "DescriptionStyleModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "StyleView",
-      "description_width": ""
-     }
-    },
-    "0cd2bf060b4c4daeaf9156705ae409ab": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "HBoxModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "HBoxModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "HBoxView",
-      "box_style": "",
-      "children": [
-       "IPY_MODEL_3c4ce2ec8ae54042864d1d0261355166",
-       "IPY_MODEL_2e27352e29354001b53bc4d07bd4c1ed",
-       "IPY_MODEL_709f853d0ae846e7945c74ff83cae52e"
-      ],
-      "layout": "IPY_MODEL_54a3bafa2af54475abe57e37e2399a45"
-     }
-    },
-    "0dc1dea99b774b74a84c9c02b6335b94": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "HTMLModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "HTMLModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "HTMLView",
-      "description": "",
-      "description_tooltip": null,
-      "layout": "IPY_MODEL_3b4a5130401a44daa116828b9fa8d17b",
-      "placeholder": "​",
-      "style": "IPY_MODEL_21efd9c072db42bf89ad5dbd96b52a01",
-      "value": "Downloading (…)lve/main/config.json: 100%"
-     }
-    },
-    "10420e2dba3244f48c8fcd7d35904e41": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "112ef61e952444369d6c0dce1d1098a8": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "1a259e1a45bc4043b81243d033b79752": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "HBoxModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "HBoxModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "HBoxView",
-      "box_style": "",
-      "children": [
-       "IPY_MODEL_f0963a05a29d4e6f8a2ab48fc8a26a1d",
-       "IPY_MODEL_0a8d7bc06ed646b78956101c5c62fb1f",
-       "IPY_MODEL_ef339a504f984cc2ac07c8252aa2f6d5"
-      ],
-      "layout": "IPY_MODEL_3d3c2d54cdf44a06a99c35d0e1b33b0a"
-     }
-    },
-    "21efd9c072db42bf89ad5dbd96b52a01": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "DescriptionStyleModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "DescriptionStyleModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "StyleView",
-      "description_width": ""
-     }
-    },
-    "2d7895836c814084be531103d0218650": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "ProgressStyleModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "ProgressStyleModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "StyleView",
-      "bar_color": null,
-      "description_width": ""
-     }
-    },
-    "2e27352e29354001b53bc4d07bd4c1ed": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "FloatProgressModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "FloatProgressModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "ProgressView",
-      "bar_style": "success",
-      "description": "",
-      "description_tooltip": null,
-      "layout": "IPY_MODEL_792a299872704c10af8061175db96031",
-      "max": 1355256,
-      "min": 0,
-      "orientation": "horizontal",
-      "style": "IPY_MODEL_2d7895836c814084be531103d0218650",
-      "value": 1355256
-     }
-    },
-    "37cf19bcc68d41d7bc6b411cd273a88c": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "HTMLModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "HTMLModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "HTMLView",
-      "description": "",
-      "description_tooltip": null,
-      "layout": "IPY_MODEL_8e1f2102db184538a35ed9c8498d5bbc",
-      "placeholder": "​",
-      "style": "IPY_MODEL_0cccb700fc264051abc0b7458716054f",
-      "value": " 1.04M/1.04M [00:00&lt;00:00, 3.35MB/s]"
-     }
-    },
-    "387d0ca6bf2c4341804cfa43a71b6451": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "3b4a5130401a44daa116828b9fa8d17b": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "3c4ce2ec8ae54042864d1d0261355166": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "HTMLModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "HTMLModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "HTMLView",
-      "description": "",
-      "description_tooltip": null,
-      "layout": "IPY_MODEL_94343417f60a4f9d9a745dfa2c967893",
-      "placeholder": "​",
-      "style": "IPY_MODEL_f6331afe201d49319b76e528e01a9b4b",
-      "value": "Downloading (…)/main/tokenizer.json: 100%"
-     }
-    },
-    "3d3c2d54cdf44a06a99c35d0e1b33b0a": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "3e45628539864cd2b1297c2be1d35c98": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "DescriptionStyleModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "DescriptionStyleModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "StyleView",
-      "description_width": ""
-     }
-    },
-    "4539f47e9e4c444e9f610dea60db5eb0": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "DescriptionStyleModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "DescriptionStyleModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "StyleView",
-      "description_width": ""
-     }
-    },
-    "548c125bc716475ba6708fa80f5b1b61": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "FloatProgressModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "FloatProgressModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "ProgressView",
-      "bar_style": "success",
-      "description": "",
-      "description_tooltip": null,
-      "layout": "IPY_MODEL_387d0ca6bf2c4341804cfa43a71b6451",
-      "max": 1042301,
-      "min": 0,
-      "orientation": "horizontal",
-      "style": "IPY_MODEL_b1c406aebffa49f48c3457a9482a47a3",
-      "value": 1042301
-     }
-    },
-    "54a3bafa2af54475abe57e37e2399a45": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "5edb09d55e7b45c881bbf6a38de92f60": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "FloatProgressModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "FloatProgressModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "ProgressView",
-      "bar_style": "success",
-      "description": "",
-      "description_tooltip": null,
-      "layout": "IPY_MODEL_d75f60b7f0b94b3d88046ac990446ad4",
-      "max": 665,
-      "min": 0,
-      "orientation": "horizontal",
-      "style": "IPY_MODEL_609d29b907424f049de6ef0b86a6541d",
-      "value": 665
-     }
-    },
-    "609d29b907424f049de6ef0b86a6541d": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "ProgressStyleModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "ProgressStyleModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "StyleView",
-      "bar_color": null,
-      "description_width": ""
-     }
-    },
-    "6dc9a8ca9270413893e28e3a3807dd51": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "709f853d0ae846e7945c74ff83cae52e": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "HTMLModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "HTMLModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "HTMLView",
-      "description": "",
-      "description_tooltip": null,
-      "layout": "IPY_MODEL_10420e2dba3244f48c8fcd7d35904e41",
-      "placeholder": "​",
-      "style": "IPY_MODEL_d7b1b50d3f6843be90e00d3352139b2f",
-      "value": " 1.36M/1.36M [00:00&lt;00:00, 3.65MB/s]"
-     }
-    },
-    "755797e4682642399c367962ba737504": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "HTMLModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "HTMLModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "HTMLView",
-      "description": "",
-      "description_tooltip": null,
-      "layout": "IPY_MODEL_eb486eb0dc2f44eabcac46a18b711ff1",
-      "placeholder": "​",
-      "style": "IPY_MODEL_3e45628539864cd2b1297c2be1d35c98",
-      "value": "Downloading (…)olve/main/vocab.json: 100%"
-     }
-    },
-    "792a299872704c10af8061175db96031": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "7bd8740ee12a486fbb3d3ae0a2c493b8": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "HTMLModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "HTMLModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "HTMLView",
-      "description": "",
-      "description_tooltip": null,
-      "layout": "IPY_MODEL_6dc9a8ca9270413893e28e3a3807dd51",
-      "placeholder": "​",
-      "style": "IPY_MODEL_4539f47e9e4c444e9f610dea60db5eb0",
-      "value": " 665/665 [00:00&lt;00:00, 18.8kB/s]"
-     }
-    },
-    "7e96275c58434a04a49e56598b12656a": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "8e1f2102db184538a35ed9c8498d5bbc": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "94343417f60a4f9d9a745dfa2c967893": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "9bf6e3e259cd4bc0bd4c714c725d0782": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "DescriptionStyleModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "DescriptionStyleModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "StyleView",
-      "description_width": ""
-     }
-    },
-    "a292f2af029c4340813e63370bf73f12": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "HBoxModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "HBoxModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "HBoxView",
-      "box_style": "",
-      "children": [
-       "IPY_MODEL_755797e4682642399c367962ba737504",
-       "IPY_MODEL_548c125bc716475ba6708fa80f5b1b61",
-       "IPY_MODEL_37cf19bcc68d41d7bc6b411cd273a88c"
-      ],
-      "layout": "IPY_MODEL_ebc4716ea8d849c58c43c26f5caf18fe"
-     }
-    },
-    "a8bae11fb1aa40348e611a1592e0ff0a": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "afe741aff3f54ae6a89b5965888599f4": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "ProgressStyleModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "ProgressStyleModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "StyleView",
-      "bar_color": null,
-      "description_width": ""
-     }
-    },
-    "b1c406aebffa49f48c3457a9482a47a3": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "ProgressStyleModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "ProgressStyleModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "StyleView",
-      "bar_color": null,
-      "description_width": ""
-     }
-    },
-    "b2653a474569425ebb546f93241a465e": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "DescriptionStyleModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "DescriptionStyleModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "StyleView",
-      "description_width": ""
-     }
-    },
-    "bbdfb7b736f546fea9f2a56a815a8e8f": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "HBoxModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "HBoxModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "HBoxView",
-      "box_style": "",
-      "children": [
-       "IPY_MODEL_0dc1dea99b774b74a84c9c02b6335b94",
-       "IPY_MODEL_5edb09d55e7b45c881bbf6a38de92f60",
-       "IPY_MODEL_7bd8740ee12a486fbb3d3ae0a2c493b8"
-      ],
-      "layout": "IPY_MODEL_fa9eff66d6084f0a970408b620afa686"
-     }
-    },
-    "d75f60b7f0b94b3d88046ac990446ad4": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "d7b1b50d3f6843be90e00d3352139b2f": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "DescriptionStyleModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "DescriptionStyleModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "StyleView",
-      "description_width": ""
-     }
-    },
-    "eb486eb0dc2f44eabcac46a18b711ff1": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "ebc4716ea8d849c58c43c26f5caf18fe": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "ef339a504f984cc2ac07c8252aa2f6d5": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "HTMLModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "HTMLModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "HTMLView",
-      "description": "",
-      "description_tooltip": null,
-      "layout": "IPY_MODEL_a8bae11fb1aa40348e611a1592e0ff0a",
-      "placeholder": "​",
-      "style": "IPY_MODEL_9bf6e3e259cd4bc0bd4c714c725d0782",
-      "value": " 456k/456k [00:00&lt;00:00, 1.84MB/s]"
-     }
-    },
-    "f0963a05a29d4e6f8a2ab48fc8a26a1d": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "HTMLModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "HTMLModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "HTMLView",
-      "description": "",
-      "description_tooltip": null,
-      "layout": "IPY_MODEL_7e96275c58434a04a49e56598b12656a",
-      "placeholder": "​",
-      "style": "IPY_MODEL_b2653a474569425ebb546f93241a465e",
-      "value": "Downloading (…)olve/main/merges.txt: 100%"
-     }
-    },
-    "f6331afe201d49319b76e528e01a9b4b": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "DescriptionStyleModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "DescriptionStyleModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "StyleView",
-      "description_width": ""
-     }
-    },
-    "fa9eff66d6084f0a970408b620afa686": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    }
-   }
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 5
-}
diff --git a/docs/examples/data_connectors/README.md b/docs/examples/data_connectors/README.md
deleted file mode 100644
index 158649505903a08be2fef0726eee911914a37db2..0000000000000000000000000000000000000000
--- a/docs/examples/data_connectors/README.md
+++ /dev/null
@@ -1,3 +0,0 @@
-## Data Connector Examples
-
-Each of these notebooks showcase our readers which can read data from a variety of data sources.
diff --git a/docs/examples/multi_modal/multi_modal_pdf_tables.ipynb b/docs/examples/multi_modal/multi_modal_pdf_tables.ipynb
deleted file mode 100644
index 5b164b554f78ed396a3ff3706bf274ccba5a285b..0000000000000000000000000000000000000000
--- a/docs/examples/multi_modal/multi_modal_pdf_tables.ipynb
+++ /dev/null
@@ -1,2756 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "<a href=\"https://colab.research.google.com/github/run-llama/llama_index/blob/main/docs/examples/multi_modal/multi_modal_pdf_tables.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "# Multi-Modal on PDF's with tables."
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "\n",
-    "One common challenge with RAG (`Retrieval-Augmented Generation`) involves handling PDFs that contain tables. Parsing tables in various formats can be quite complex.\n",
-    "\n",
-    "However, Microsoft's newly released model, [`Table Transformer`](https://huggingface.co/microsoft/table-transformer-detection), offers a promising solution for detecting tables within images.\n",
-    "\n",
-    "In this notebook, we will demonstrate how to leverage the `Table Transformer` model in conjunction with GPT4-V to yield better results for images containing tables.\n",
-    "\n",
-    "The experiment is divided into the following parts and we compared those 4 options for extracting table information from PDFs:\n",
-    "\n",
-    "1. Retrieving relevant images (PDF pages) and sending them to GPT4-V to respond to queries.\n",
-    "2. Regarding every PDF page as an image, let GPT4-V do the image reasoning for each page. Build Text Vector Store index for the image reasonings. Query the answer against the `Image Reasoning Vectore Store`.\n",
-    "3. Using `Table Transformer` to crop the table information from the retrieved images and then sending these cropped images to GPT4-V for query responses.\n",
-    "4. Applying OCR on cropped table images and send the data to GPT4/ GPT-3.5 to answer the query."
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "#### Setup"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "%pip install llama-index-llms-openai\n",
-    "%pip install llama-index-multi-modal-llms-openai\n",
-    "%pip install llama-index-vector-stores-qdrant"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "!pip install llama-index qdrant_client pyMuPDF tools frontend git+https://github.com/openai/CLIP.git easyocr"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "import matplotlib.pyplot as plt\n",
-    "import matplotlib.patches as patches\n",
-    "from matplotlib.patches import Patch\n",
-    "import io\n",
-    "from PIL import Image, ImageDraw\n",
-    "import numpy as np\n",
-    "import csv\n",
-    "import pandas as pd\n",
-    "\n",
-    "from torchvision import transforms\n",
-    "\n",
-    "from transformers import AutoModelForObjectDetection\n",
-    "import torch\n",
-    "import openai\n",
-    "import os\n",
-    "import fitz\n",
-    "\n",
-    "device = \"cuda\" if torch.cuda.is_available() else \"cpu\"\n",
-    "\n",
-    "OPENAI_API_TOKEN = \"sk-<your-openai-api-token>\"\n",
-    "openai.api_key = OPENAI_API_TOKEN"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "Download Llama2 paper for the experiments."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "!wget --user-agent \"Mozilla\" \"https://arxiv.org/pdf/2307.09288.pdf\" -O \"llama2.pdf\""
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "Here we convert each of the Llama2 paper pdf page to images for indexing."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "pdf_file = \"llama2.pdf\"\n",
-    "\n",
-    "# Split the base name and extension\n",
-    "output_directory_path, _ = os.path.splitext(pdf_file)\n",
-    "\n",
-    "if not os.path.exists(output_directory_path):\n",
-    "    os.makedirs(output_directory_path)\n",
-    "\n",
-    "# Open the PDF file\n",
-    "pdf_document = fitz.open(pdf_file)\n",
-    "\n",
-    "# Iterate through each page and convert to an image\n",
-    "for page_number in range(pdf_document.page_count):\n",
-    "    # Get the page\n",
-    "    page = pdf_document[page_number]\n",
-    "\n",
-    "    # Convert the page to an image\n",
-    "    pix = page.get_pixmap()\n",
-    "\n",
-    "    # Create a Pillow Image object from the pixmap\n",
-    "    image = Image.frombytes(\"RGB\", [pix.width, pix.height], pix.samples)\n",
-    "\n",
-    "    # Save the image\n",
-    "    image.save(f\"./{output_directory_path}/page_{page_number + 1}.png\")\n",
-    "\n",
-    "# Close the PDF file\n",
-    "pdf_document.close()"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "Display the images."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "image/png": "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",
-      "text/plain": [
-       "<Figure size 1600x900 with 3 Axes>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    }
-   ],
-   "source": [
-    "from PIL import Image\n",
-    "import matplotlib.pyplot as plt\n",
-    "import os\n",
-    "\n",
-    "image_paths = []\n",
-    "for img_path in os.listdir(\"./llama2\"):\n",
-    "    image_paths.append(str(os.path.join(\"./llama2\", img_path)))\n",
-    "\n",
-    "\n",
-    "def plot_images(image_paths):\n",
-    "    images_shown = 0\n",
-    "    plt.figure(figsize=(16, 9))\n",
-    "    for img_path in image_paths:\n",
-    "        if os.path.isfile(img_path):\n",
-    "            image = Image.open(img_path)\n",
-    "\n",
-    "            plt.subplot(3, 3, images_shown + 1)\n",
-    "            plt.imshow(image)\n",
-    "            plt.xticks([])\n",
-    "            plt.yticks([])\n",
-    "\n",
-    "            images_shown += 1\n",
-    "            if images_shown >= 9:\n",
-    "                break\n",
-    "\n",
-    "\n",
-    "plot_images(image_paths[9:12])"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## Experiment-1: Retrieving relevant images (PDF pages) and sending them to GPT4-V to respond to queries."
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "We will now index the images with `qdrant` vector store using our `MultiModalVectorStoreIndex` abstractions."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "import qdrant_client\n",
-    "from llama_index.core import SimpleDirectoryReader\n",
-    "from llama_index.vector_stores.qdrant import QdrantVectorStore\n",
-    "from llama_index.core import VectorStoreIndex, StorageContext\n",
-    "from llama_index.core.indices import MultiModalVectorStoreIndex\n",
-    "from llama_index.core.schema import ImageDocument\n",
-    "\n",
-    "from llama_index.core.response.notebook_utils import display_source_node\n",
-    "from llama_index.core.schema import ImageNode"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "from llama_index.multi_modal_llms.openai import OpenAIMultiModal\n",
-    "\n",
-    "openai_mm_llm = OpenAIMultiModal(\n",
-    "    model=\"gpt-4-vision-preview\", api_key=OPENAI_API_TOKEN, max_new_tokens=1500\n",
-    ")"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "Build the Multi-Modal retriever."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# Read the images\n",
-    "documents_images = SimpleDirectoryReader(\"./llama2/\").load_data()\n",
-    "\n",
-    "# Create a local Qdrant vector store\n",
-    "client = qdrant_client.QdrantClient(path=\"qdrant_index\")\n",
-    "\n",
-    "text_store = QdrantVectorStore(\n",
-    "    client=client, collection_name=\"text_collection\"\n",
-    ")\n",
-    "image_store = QdrantVectorStore(\n",
-    "    client=client, collection_name=\"image_collection\"\n",
-    ")\n",
-    "storage_context = StorageContext.from_defaults(\n",
-    "    vector_store=text_store, image_store=image_store\n",
-    ")\n",
-    "\n",
-    "# Create the MultiModal index\n",
-    "index = MultiModalVectorStoreIndex.from_documents(\n",
-    "    documents_images,\n",
-    "    storage_context=storage_context,\n",
-    ")\n",
-    "\n",
-    "retriever_engine = index.as_retriever(image_similarity_top_k=2)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "from llama_index.core.indices.multi_modal.retriever import (\n",
-    "    MultiModalVectorIndexRetriever,\n",
-    ")\n",
-    "\n",
-    "query = \"Compare llama2 with llama1?\"\n",
-    "assert isinstance(retriever_engine, MultiModalVectorIndexRetriever)\n",
-    "# retrieve for the query using text to image retrieval\n",
-    "retrieval_results = retriever_engine.text_to_image_retrieve(query)"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "Check the retrieved results from Experiment 1"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "image/png": "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",
-      "text/plain": [
-       "<Figure size 1600x900 with 2 Axes>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    }
-   ],
-   "source": [
-    "retrieved_images = []\n",
-    "for res_node in retrieval_results:\n",
-    "    if isinstance(res_node.node, ImageNode):\n",
-    "        retrieved_images.append(res_node.node.metadata[\"file_path\"])\n",
-    "    else:\n",
-    "        display_source_node(res_node, source_length=200)\n",
-    "\n",
-    "plot_images(retrieved_images)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "['llama2/page_50.png', 'llama2/page_50.png']"
-      ]
-     },
-     "execution_count": null,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "retrieved_images"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "Now let's send the retrieved images to GPT4-V for image reasoning"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "image_documents = [\n",
-    "    ImageDocument(image_path=image_path) for image_path in retrieved_images\n",
-    "]"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "I'm sorry, but I am unable to compare fictional entities like \"llama2\" with \"llama1\" since in the images provided, there are no images or descriptions of llamas to make such a comparison. The images you've shared contain tables of data reflecting the performance of various models on different datasets and tasks related to machine learning and natural language processing. If you have specific data or images of llamas you would like to discuss or compare, please provide them, and I will help as best as I can.\n"
-     ]
-    }
-   ],
-   "source": [
-    "response = openai_mm_llm.complete(\n",
-    "    prompt=\"Compare llama2 with llama1?\",\n",
-    "    image_documents=image_documents,\n",
-    ")\n",
-    "\n",
-    "print(response)"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "### Observation:\n",
-    "\n",
-    "As you can see even though there is answer in the images, it is unable to give correct answer."
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## Experiment-2: Parse each pdf page as an image and get table date directly from GPT4-V. Index tables data and then do text retrieval\n",
-    "\n",
-    "Steps:\n",
-    "- Extract and separate each PDF page as an image document\n",
-    "- Let GPT4V identify table and extract table information from each PDF page\n",
-    "- Index GPT4V understandings for each page into `Image Reasoning Vector Store`\n",
-    "- Retrieve answer from this `Image Reasoning Vector Store`"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "### Load each pdf page as a image document"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "from llama_index.multi_modal_llms.openai import OpenAIMultiModal\n",
-    "from llama_index.core import SimpleDirectoryReader\n",
-    "\n",
-    "# put your local directore here\n",
-    "documents_images_v2 = SimpleDirectoryReader(\"./llama2/\").load_data()"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "### Select one Image for Showcase the GPT4-V Table Reasoning Results"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "<matplotlib.image.AxesImage at 0x2a2885650>"
-      ]
-     },
-     "execution_count": null,
-     "metadata": {},
-     "output_type": "execute_result"
-    },
-    {
-     "data": {
-      "image/png": "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6NGjtLS0sGXLFpF+Lom2bt68WQScV1RUMDExQX9/Px0dHWRkZIhsKJvNRkNDAzfccAMHDhwgPT2d4eFhAgICePTRR0VbG41GKioqsNvtDA0NkZqait1u5/Dhw3z729+moaFBJBaEhoZSW1srJC2am5vR6XT09fVdlUxPV1eXaAOlUklvby8BAQHU1dWxefNm6uvrqaqqIjs7m1WrVpGSkoLH4xHM9JKnsquri5GREQYGBvjmN7/JwMAALS0tZGdn09TUREBAAKOjo2zZsuWCMvT19VFRUcHDDz/M0NCQ4OmS2qClpYU///nPbN68mdbWVuLj48UH+/HHH0ev11NdXU1DQwPZ2dlotVrsdjtf+tKX+Pjjj4mJiWHt2rXieTqdTrD8JyUlceedd9La2orVaqWpqYkHHnhAkBQeOXKE7u5uUlJS6Ojo4Mknn0Qul1NcXIyfnx8TExMsWLCA4eFhxsbGGB4eZsuWLXR3dzM1NUV3dzerVq2ioqKCzMxMBgcHKSwspK2tDV9fX8LCwkhKSqKxsZH6+npCQkK45557eP/99/H392d4eJg777yTV199laeeegq9Xi/S3qVs04GBAbRaraDdcDgcTExMIJPJuP/++5HL5WJx5HA4GBoawmQyiXR8Pz8/sagZHBzkzjvvFPfs6+sTiScA3d3djI2N0d3dzebNm/H19UWn0zE2NoZWq6WwsJCdO3fyxBNP0NXVJca22+1GoVAwNDTEggULOHz4sODL8ng8fOUrX2FwcJCGhgb0ej3d3d0z+q/dbhf9WqIy6e7uZmhoCIvFwj333CPoRrq6uoiLixM0BlarldraWgwGA42NjajValasWMHJkycZHR1l7ty5xMbGotFoCAsLo6mpSTDr63Q6br/9drZv305qair5+fm88sor5OTkCPmV++67j2PHjpGZmcnQ0BB33HGHMGAHBwfp6enh7NmzpKenk5SURElJCffeey8tLS14PB4WLlxIbW2t6L/5+flUVVVx8803i/uYzWZaW1uprKzE4XDw6KOPisXL4cOH6enp4fbbbxdeJqfTyfHjxwkMDKS3t5dFixaRm5uLx3OeWb6mpob58+dz/Pjxi35HvLg6eLf2rkNkZ2dTW1sriBD9/f0F67SkbO7j40NycrKgDWhra+Ott97CbrejUqnIyMjA7XaTmZnJfffdx5tvvomvry9R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8+bNqNVqYfOXDpH4+HgGBwd5/fXXKSgoEGYaybeioaEBm83G6dOnxe0zMTGRtLQ0IYwEAgFeeeUVioqKyM3NJT09nX379vH73/+eJUuWkJuby9q1a/nNb37D5OQkRUVFpKam0tDQwJ49e/B6vQwMDHD99ddz4MABSktLMZvNPProo8JfoKenB5VKRX9/P319fXznO9/hsccemyJIyWQydu7cidlsJjs7m0WLFmG320lKSuJLX/oSjzzyCDt27MBkMrF161ZxWN5555089NBDPProoygUCvx+v9ionnnmGZYsWUJmZiZmsxm5XE56errwH/ve977Hli1bSE5Opqmpifb2dgYGBrDZbDidTs6fP4/b7ebs2bNMTEywfv16li1bxrZt2/j2t7/N5s2bycrKEsz+AF/60pd46KGHOHHiBOPj49x4441otVr27NkjnEGlsZH8nWbPni3GQ6FQ4PV62bdvH3a7ncjISNasWYPX6+V73/seCxcuZMGCBSxbtgyAf//3f2fFihUkJiZyxx13cPToUerr61myZAkrV67kW9/6Fr/61a9YtWoVmZmZGI1GXnvtNXG4WiwWNm/ezDPPPENtbS2LFi2ir6+PiooKioqKCAQCWCwW3G630IBIh8/+/fspLCyktLSU48ePk5iYyJYtW4TAZbVaOXHiBMnJyRQVFTFr1iwmJyd5+eWXsVqtqNVqzp8/z8DAAN3d3dx3333867/+K1u3bmXhwoWkp6djNpvZs2cP9913HwsXLuTUqVMkJSVN8fEIBoOYzWbhKG42m+nq6qK0tBSfz0dFRQUajQar1cqqVauEiUMSzhcvXizalpeXxxNPPEFWVhapqak8/fTT4oBqa2ujsbFRaDxUKhVWq5VTp07R09NDY2MjtbW1wEVHeanvqqqqaG1t5dixY5SXl3P99dfT2dnJxMQEd999t9BOORwOzp8/j1wuJxgMEggE2LJlC0qlkv7+fjZv3kxxcTG/+MUvWLx4sTiEa2triYqKoqOjg0cffVSYgO677z4efvhhPB4PAwMDxMbGUl9fz/DwMKdOnSInJ0doeDQaDQ0NDfT393Py5EmUSiU1NTWsX7+ea6+9VghT5eXljI+Pk5ycTEFBAR0dHRw4cICUlBSsViuDg4PCYfv666/n8OHDPP/886SlpbF69WpiY2M5cOAAy5cvJz8/H6/Xy7x5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yy384z/+o+hnqV8k1vi2tjbBpRMdHS34kaS2K5VKBgcHsdvt+P1+oqKimDt3LmlpadTU1JCfn08gEODNN99k48aNAFP6LpzRW8q1lZyczPHjx3nwwQdFotfpyUdNJhNLlixhy5YtfPvb30aj0dDR0YHT6RTPSJDaLaW6CIVCgoU6fCxbW1tF7q5AICCSD09OTjIxMcHIyAher5e0tDTmzZvHrbfeys6dO7n55pt57bXXyMvL45VXXhHfDQaDYs5I35XL5WK+wUWN1M9+9jMee+wxWlpaeOGFF2hsbBRmWokzTeIUSk9PZ8WKFdx3331s3LgRtVqNz+cjGAyyevVqmpub6ejoICkpacr6CZ/v0hqQ6iD1q9/vJzExkYKCArZv386Xv/xlvvGNb/Daa69x7733ikuIRHwqaT6HhoZEn4WzakuO/OFrTvqe1Dc//OEPefzxxwF44IEHgItazpmUHTOYwd82ZgSpzyDOnTvHnj17RJ655cuXEwwGefbZZ3nvvffIzMxk586dzJ49m1OnTvHOO+9QX1/PV7/6Vc6dO8fevXspLy/HbrdjtVrp6OhArVbT0NCA3W7HbreTmprK3Llz2bt3L/v372d8fByj0cj777/P5OQkTqeT1tZWZDIZ7e3t2O12kZS3oKCA5ORk5HI5b731Fu+++66ou0wmE4k2DQYD27dvFyk9br/9dt5++23efvttjh07NoV3Zt68ebz55puC9by8vJwjR47Q39/Pddddx9atWwkGgzz33HMcP36c/v5+8c3FixdTXl5OdXU1Q0NDjI+PEwgEBNngDTfcwM9+9jOOHDlCS0uLeK+jowOZTMbY2Bi7du2io6ODkpISNm3ahMlkEgzQPT09+Hw+dDodhYWFVFdXU1VVxY033sjs2bNJTk5m/fr1JCQkcNttt5GZmYlcLsflctHX18fIyAh2u12UYzKZGB0dpauri7q6Otrb23n66acpLy8XfRITE4NKpaKyspKdO3fy4osv8u6771JcXExBQQHR0dH86U9/oqKigrq6OiIjIxkYGBAkgh0dHdjtdpHeRqFQYDabGRkZISkpifz8fF588UUOHjyIx+NBJpORkpJCS0sLr732GllZWTQ2NnLLLbewf/9+Mcfef/99ampqiIuLY/v27QBCELdardTX1xMXF0djYyNarRa1Ws3w8DBwMVpm9+7d2O12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",
-      "text/plain": [
-       "<Figure size 1600x900 with 1 Axes>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    }
-   ],
-   "source": [
-    "image = Image.open(documents_images_v2[15].image_path).convert(\"RGB\")\n",
-    "\n",
-    "plt.figure(figsize=(16, 9))\n",
-    "plt.imshow(image)"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "### Using this one Image of PDF file for GPT4-V understanding as an Example"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "I'm sorry, but I am unable to directly extract and convert the table data from images into JSON format. However, I can provide you with a summary of the image content.\n",
-      "\n",
-      "The image appears to be a page from an academic paper or a report. It includes a table titled \"Table 11: Benchmark performance for the TruthfulQA, for both Gen 1 and Gen 2 models along with humans.\" The table displays performance metrics for different models (such as Falcon, Owl, etc.) and humans on the TruthfulQA dataset. For each model and for humans, the table lists scores on the metrics of MFT, BFP, TBP, and Overclaim. Below the table, there's text that begins with discussing the approach to safety fine-tuning, including safety categories, annotation guidelines, and adverse outcome predictions. Although the rest of the text and table are out of view in the image, the visible section indicates a focus on benchmarks and safety in AI model development.\n",
-      "\n",
-      "Due to the limitations on my capabilities, I can't provide the exact data contained in the table as JSON. However, if you need assistance with crafting a general JSON structure for such data or have other questions related to the content, I'd be happy to help!\n"
-     ]
-    }
-   ],
-   "source": [
-    "openai_mm_llm = OpenAIMultiModal(\n",
-    "    model=\"gpt-4-vision-preview\", api_key=OPENAI_API_TOKEN, max_new_tokens=1500\n",
-    ")\n",
-    "\n",
-    "image_prompt = \"\"\"\n",
-    "    Please load the table data and output in the json format from the image.\n",
-    "    Please try your best to extract the table data from the image.\n",
-    "    If you can't extract the table data, please summarize image and return the summary.\n",
-    "\"\"\"\n",
-    "response = openai_mm_llm.complete(\n",
-    "    prompt=image_prompt,\n",
-    "    image_documents=[documents_images_v2[15]],\n",
-    ")\n",
-    "\n",
-    "print(response)"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "### Reuse the same prompt for all the pages in the PDF file"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "image_results = {}\n",
-    "for img_doc in documents_images_v2:\n",
-    "    try:\n",
-    "        image_table_result = openai_mm_llm.complete(\n",
-    "            prompt=image_prompt,\n",
-    "            image_documents=[img_doc],\n",
-    "        )\n",
-    "    except Exception as e:\n",
-    "        print(\n",
-    "            f\"Error understanding for image {img_doc.image_path} from GPT4V API\"\n",
-    "        )\n",
-    "        continue\n",
-    "    # image_results.append((image_document.image_path, image_table_result))\n",
-    "    image_results[img_doc.image_path] = image_table_result"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "### Build Text-Only Vector Store by Indexing the Image Understandings from GPT4-V"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "from llama_index.core import Document\n",
-    "\n",
-    "text_docs = [\n",
-    "    Document(\n",
-    "        text=str(image_results[image_path]),\n",
-    "        metadata={\"image_path\": image_path},\n",
-    "    )\n",
-    "    for image_path in image_results\n",
-    "]"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "from llama_index.core import VectorStoreIndex\n",
-    "from llama_index.vector_stores.qdrant import QdrantVectorStore\n",
-    "from llama_index.core import SimpleDirectoryReader, StorageContext\n",
-    "\n",
-    "import qdrant_client\n",
-    "from llama_index.core import SimpleDirectoryReader\n",
-    "\n",
-    "\n",
-    "# Create a local Qdrant vector store\n",
-    "client = qdrant_client.QdrantClient(path=\"qdrant_mm_db_llama_v3\")\n",
-    "\n",
-    "llama_text_store = QdrantVectorStore(\n",
-    "    client=client, collection_name=\"text_collection\"\n",
-    ")\n",
-    "\n",
-    "storage_context = StorageContext.from_defaults(vector_store=llama_text_store)\n",
-    "\n",
-    "# Create the Text Vector index\n",
-    "index = VectorStoreIndex.from_documents(\n",
-    "    text_docs,\n",
-    "    storage_context=storage_context,\n",
-    ")"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "### Build Top k retrieval for Vector Store Index"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "MAX_TOKENS = 50\n",
-    "retriever_engine = index.as_retriever(\n",
-    "    similarity_top_k=3,\n",
-    ")\n",
-    "# retrieve more information from the GPT4V response\n",
-    "retrieval_results = retriever_engine.retrieve(\"Compare llama2 with llama1?\")"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/markdown": [
-       "**Node ID:** cafdea5b-9179-403f-ab36-8e12ca8106fa<br>**Similarity:** 0.8008945623390522<br>**Text:** I'm unable to directly extract the data from images into JSON format. However, I can describe the image for you and summarize the information presented in it.\n",
-       "\n",
-       "The image appears to be from an academic paper or a technical report. It contains a chart titled \"Figure 8: Safety human evaluation results for LLama 7-SHOT compared to other open-source and closed-source models.\" The chart depicts the comparison of safety ratings across multiple language models, including different versions of LLama, based on multi-turn prompts. The categories assessed are Sensitive topics, Unsafe links, Malicious compliance, Hate Speech, and Misinformation.\n",
-       "\n",
-       "The chart is a graph with the vertical axis labeled \"Safety Fail Rate (%)\" ranging from 0 to 60, and the horizontal axis listing the language models being compared. The models include LLama (7-shot), LLama (0-shot), GPT-3.5 (0-shot), Gopher (0-shot), Chinchilla (0-shot), GPT-4 (0-shot), Anthropic (0-shot), Google (0-shot), and Meta OPT-175B (0-shot). Ea...<br>"
-      ],
-      "text/plain": [
-       "<IPython.core.display.Markdown object>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    },
-    {
-     "data": {
-      "text/markdown": [
-       "**Node ID:** b07c28ac-cc14-48bb-98a9-c4b6427fa6bc<br>**Similarity:** 0.7960059474425674<br>**Text:** Unfortunately, I'm unable to directly extract text from images or convert image-based data into JSON format. However, I can certainly help summarize the content of the image presented to me.\n",
-       "\n",
-       "The image shows a page of a document, and at the bottom there is a table titled \"Table 36. Qualitative example for the impact of safety data scaling. Llama -> C-Llama test not to generate offensive or problematic content.\" The table has five columns labeled \"Data %,\" \"Safety Response,\" \"Safety Score,\" \"Helpful Response,\" and \"M-HM Score.\" The data percentages in the table range from 1% to 25%, and it appears to be comparing safety responses with safety scores and helpful responses with another set of scores (presumably meant to indicate the degree of help or relevance).\n",
-       "\n",
-       "The content at the top of the page contains a warning about profanity, likely indicating that the document discusses or includes examples of strong language. This suggests that the document may be related to a study or evaluati...<br>"
-      ],
-      "text/plain": [
-       "<IPython.core.display.Markdown object>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    },
-    {
-     "data": {
-      "text/markdown": [
-       "**Node ID:** 7bff0d28-58b5-4e4a-b811-56d39c0d84d5<br>**Similarity:** 0.7958723648755144<br>**Text:** I cannot directly extract the table data from the image you've uploaded into JSON format. However, I can summarize the content in the image for you.\n",
-       "\n",
-       "The image shows a page from an academic or technical document discussing evaluation results for a model named \"Llama 🦙-C/C++\" compared to other open- and close-source models across ~400 hypothesis prompts with three raters per prompt. The page includes a figure (Figure 12) with a graph that compares win rates of different models, and there is a significant amount of text explaining the results and the context of the study.\n",
-       "\n",
-       "Key points from the text:\n",
-       "\n",
-       "- The \"Llama 🦙-C/C++\" model is compared with ChatGPT \"Llama 🦙-C++\" 7B model and GPT-3.5.\n",
-       "- The model demonstrates a win rate of 36% and a tie rate of 31%, relative to ChatGPT \"Llama 🦙-C++\" 7B model's performance.\n",
-       "- There are discussions on various topics such as advantages, the importance of statistical significance, token overlap, raters' calibrations, and control for hypothesis prompt qu...<br>"
-      ],
-      "text/plain": [
-       "<IPython.core.display.Markdown object>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    }
-   ],
-   "source": [
-    "from llama_index.core.response.notebook_utils import display_source_node\n",
-    "\n",
-    "retrieved_image = []\n",
-    "for res_node in retrieval_results:\n",
-    "    display_source_node(res_node, source_length=1000)"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "### Perform query engine on the index and answer the question"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "Response(response='The provided context information does not contain any direct comparison between llama2 and llama1. Therefore, it is not possible to compare llama2 with llama1 based on the given context.', source_nodes=[NodeWithScore(node=TextNode(id_='cafdea5b-9179-403f-ab36-8e12ca8106fa', embedding=None, metadata={'image_path': 'llama2/page_4.png'}, excluded_embed_metadata_keys=[], excluded_llm_metadata_keys=[], relationships={<NodeRelationship.SOURCE: '1'>: RelatedNodeInfo(node_id='0ed4cf04-9175-4f42-bef2-106ed97b5b76', node_type=<ObjectType.DOCUMENT: '4'>, metadata={'image_path': 'llama2/page_4.png'}, hash='6080d632ead5ef6a1b1c1a8ae8f62140b7b46d70eb3857dadcdcfc910f55e207'), <NodeRelationship.PREVIOUS: '2'>: RelatedNodeInfo(node_id='23b5580c-7053-4707-bc0b-ee53382a8397', node_type=<ObjectType.TEXT: '1'>, metadata={'image_path': 'llama2/page_39.png'}, hash='abb4c7ab0844ea5c9a402ed47ffb322079ccd391b63b4bc18df10006909f0859'), <NodeRelationship.NEXT: '3'>: RelatedNodeInfo(node_id='50fe098d-f6ac-47b7-9d53-a707f889cdc9', node_type=<ObjectType.TEXT: '1'>, metadata={}, hash='24c0d3cb6ac7046bd8ffd4ac1d859191db2ba23a7abe4d65f4cfc81fb47ca751')}, hash='6080d632ead5ef6a1b1c1a8ae8f62140b7b46d70eb3857dadcdcfc910f55e207', text='I\\'m unable to directly extract the data from images into JSON format. However, I can describe the image for you and summarize the information presented in it.\\n\\nThe image appears to be from an academic paper or a technical report. It contains a chart titled \"Figure 8: Safety human evaluation results for LLama 7-SHOT compared to other open-source and closed-source models.\" The chart depicts the comparison of safety ratings across multiple language models, including different versions of LLama, based on multi-turn prompts. The categories assessed are Sensitive topics, Unsafe links, Malicious compliance, Hate Speech, and Misinformation.\\n\\nThe chart is a graph with the vertical axis labeled \"Safety Fail Rate (%)\" ranging from 0 to 60, and the horizontal axis listing the language models being compared. The models include LLama (7-shot), LLama (0-shot), GPT-3.5 (0-shot), Gopher (0-shot), Chinchilla (0-shot), GPT-4 (0-shot), Anthropic (0-shot), Google (0-shot), and Meta OPT-175B (0-shot). Each category shows different fail rates for each model, represented as vertical bars. The LLama models generally show lower fail rates compared to other models in most categories, indicating better performance in those safety evaluations.\\n\\nThe safety evaluations are performed using content standards likely to be biased towards the LLama 2-shot model. \\n\\nBelow the figure, there is a footnote that explains additional details about the comparisons and references to other sections of the document for further information. The text on the page discusses the release of the LLama models to the general public for research and commercial use and some performance specifications of these models.\\n\\nWithout extracting the specific data points, this description summarizes the overall content and purpose of the image.', start_char_idx=0, end_char_idx=1807, text_template='{metadata_str}\\n\\n{content}', metadata_template='{key}: {value}', metadata_seperator='\\n'), score=0.8008945623390522), NodeWithScore(node=TextNode(id_='b07c28ac-cc14-48bb-98a9-c4b6427fa6bc', embedding=None, metadata={'image_path': 'llama2/page_61.png'}, excluded_embed_metadata_keys=[], excluded_llm_metadata_keys=[], relationships={<NodeRelationship.SOURCE: '1'>: RelatedNodeInfo(node_id='020f44eb-9386-44f3-b802-424164fe16f4', node_type=<ObjectType.DOCUMENT: '4'>, metadata={'image_path': 'llama2/page_61.png'}, hash='c176e55fa0329dfbdb549e630aae649b0a3614a2994c8aef710b0370cc65d969'), <NodeRelationship.PREVIOUS: '2'>: RelatedNodeInfo(node_id='a96f0d31-13ee-4132-8fcd-546db7cfb859', node_type=<ObjectType.TEXT: '1'>, metadata={'image_path': 'llama2/page_60.png'}, hash='86c890891e2522e5d036b59ddc62cadcb957f187ef75a76b633ebf0296ce3359'), <NodeRelationship.NEXT: '3'>: RelatedNodeInfo(node_id='00f0bcd0-190c-4a17-a9d3-9601892ce25a', node_type=<ObjectType.TEXT: '1'>, metadata={}, hash='65f945c837328277d94d1f53561c90d550e355696edb1176293fc0b9f5c70fc8')}, hash='c176e55fa0329dfbdb549e630aae649b0a3614a2994c8aef710b0370cc65d969', text='Unfortunately, I\\'m unable to directly extract text from images or convert image-based data into JSON format. However, I can certainly help summarize the content of the image presented to me.\\n\\nThe image shows a page of a document, and at the bottom there is a table titled \"Table 36. Qualitative example for the impact of safety data scaling. Llama -> C-Llama test not to generate offensive or problematic content.\" The table has five columns labeled \"Data %,\" \"Safety Response,\" \"Safety Score,\" \"Helpful Response,\" and \"M-HM Score.\" The data percentages in the table range from 1% to 25%, and it appears to be comparing safety responses with safety scores and helpful responses with another set of scores (presumably meant to indicate the degree of help or relevance).\\n\\nThe content at the top of the page contains a warning about profanity, likely indicating that the document discusses or includes examples of strong language. This suggests that the document may be related to a study or evaluation of language models and their responses to certain prompts, particularly in the context of safety and helpfulness.\\n\\nI hope this summary is helpful. If you need more detailed information about the contents of the table, you might consider using optical character recognition (OCR) software to extract the text.', start_char_idx=0, end_char_idx=1308, text_template='{metadata_str}\\n\\n{content}', metadata_template='{key}: {value}', metadata_seperator='\\n'), score=0.7960059474425674)], metadata={'cafdea5b-9179-403f-ab36-8e12ca8106fa': {'image_path': 'llama2/page_4.png'}, 'b07c28ac-cc14-48bb-98a9-c4b6427fa6bc': {'image_path': 'llama2/page_61.png'}})"
-      ]
-     },
-     "execution_count": null,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "query_engine = index.as_query_engine()\n",
-    "query_engine.query(\"Compare llama2 with llama1?\")"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "Observation:\n",
-    "\n",
-    "* GPT4V is not stable to identify table and extract table content from image espcially when the image is mixed with tables, texts, and images. It is common in `PDF` format.\n",
-    "* By splitting PDF files into single images and let GPT4V understand/summarize each PDF page as an single image, then build RAG based on PDF image to text index. This method *is not performing well* for this task."
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## Experiment-3: Let's use microsoft `Table Transformer` to crop tables from the images and see if it gives the correct answer."
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "Thanks to [Neils](https://twitter.com/NielsRogge). We have modified the utils from the [repository](https://huggingface.co/spaces/nielsr/tatr-demo) for our task."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "application/vnd.jupyter.widget-view+json": {
-       "model_id": "8ddaa3cb0c1247e3a37e15d45755a5d6",
-       "version_major": 2,
-       "version_minor": 0
-      },
-      "text/plain": [
-       "config.json:   0%|          | 0.00/76.5k [00:00<?, ?B/s]"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    },
-    {
-     "data": {
-      "application/vnd.jupyter.widget-view+json": {
-       "model_id": "3391f9324dd54e2d9805ff576794cad6",
-       "version_major": 2,
-       "version_minor": 0
-      },
-      "text/plain": [
-       "model.safetensors:   0%|          | 0.00/115M [00:00<?, ?B/s]"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    },
-    {
-     "data": {
-      "application/vnd.jupyter.widget-view+json": {
-       "model_id": "480b4cdb29604774b96387e896e0baea",
-       "version_major": 2,
-       "version_minor": 0
-      },
-      "text/plain": [
-       "config.json:   0%|          | 0.00/76.8k [00:00<?, ?B/s]"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    },
-    {
-     "data": {
-      "application/vnd.jupyter.widget-view+json": {
-       "model_id": "4c3bde6e760e4e29bb9953994ced0846",
-       "version_major": 2,
-       "version_minor": 0
-      },
-      "text/plain": [
-       "model.safetensors:   0%|          | 0.00/115M [00:00<?, ?B/s]"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    }
-   ],
-   "source": [
-    "class MaxResize(object):\n",
-    "    def __init__(self, max_size=800):\n",
-    "        self.max_size = max_size\n",
-    "\n",
-    "    def __call__(self, image):\n",
-    "        width, height = image.size\n",
-    "        current_max_size = max(width, height)\n",
-    "        scale = self.max_size / current_max_size\n",
-    "        resized_image = image.resize(\n",
-    "            (int(round(scale * width)), int(round(scale * height)))\n",
-    "        )\n",
-    "\n",
-    "        return resized_image\n",
-    "\n",
-    "\n",
-    "detection_transform = transforms.Compose(\n",
-    "    [\n",
-    "        MaxResize(800),\n",
-    "        transforms.ToTensor(),\n",
-    "        transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]),\n",
-    "    ]\n",
-    ")\n",
-    "\n",
-    "structure_transform = transforms.Compose(\n",
-    "    [\n",
-    "        MaxResize(1000),\n",
-    "        transforms.ToTensor(),\n",
-    "        transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]),\n",
-    "    ]\n",
-    ")\n",
-    "\n",
-    "# load table detection model\n",
-    "# processor = TableTransformerImageProcessor(max_size=800)\n",
-    "model = AutoModelForObjectDetection.from_pretrained(\n",
-    "    \"microsoft/table-transformer-detection\", revision=\"no_timm\"\n",
-    ").to(device)\n",
-    "\n",
-    "# load table structure recognition model\n",
-    "# structure_processor = TableTransformerImageProcessor(max_size=1000)\n",
-    "structure_model = AutoModelForObjectDetection.from_pretrained(\n",
-    "    \"microsoft/table-transformer-structure-recognition-v1.1-all\"\n",
-    ").to(device)\n",
-    "\n",
-    "\n",
-    "# for output bounding box post-processing\n",
-    "def box_cxcywh_to_xyxy(x):\n",
-    "    x_c, y_c, w, h = x.unbind(-1)\n",
-    "    b = [(x_c - 0.5 * w), (y_c - 0.5 * h), (x_c + 0.5 * w), (y_c + 0.5 * h)]\n",
-    "    return torch.stack(b, dim=1)\n",
-    "\n",
-    "\n",
-    "def rescale_bboxes(out_bbox, size):\n",
-    "    width, height = size\n",
-    "    boxes = box_cxcywh_to_xyxy(out_bbox)\n",
-    "    boxes = boxes * torch.tensor(\n",
-    "        [width, height, width, height], dtype=torch.float32\n",
-    "    )\n",
-    "    return boxes\n",
-    "\n",
-    "\n",
-    "def outputs_to_objects(outputs, img_size, id2label):\n",
-    "    m = outputs.logits.softmax(-1).max(-1)\n",
-    "    pred_labels = list(m.indices.detach().cpu().numpy())[0]\n",
-    "    pred_scores = list(m.values.detach().cpu().numpy())[0]\n",
-    "    pred_bboxes = outputs[\"pred_boxes\"].detach().cpu()[0]\n",
-    "    pred_bboxes = [\n",
-    "        elem.tolist() for elem in rescale_bboxes(pred_bboxes, img_size)\n",
-    "    ]\n",
-    "\n",
-    "    objects = []\n",
-    "    for label, score, bbox in zip(pred_labels, pred_scores, pred_bboxes):\n",
-    "        class_label = id2label[int(label)]\n",
-    "        if not class_label == \"no object\":\n",
-    "            objects.append(\n",
-    "                {\n",
-    "                    \"label\": class_label,\n",
-    "                    \"score\": float(score),\n",
-    "                    \"bbox\": [float(elem) for elem in bbox],\n",
-    "                }\n",
-    "            )\n",
-    "\n",
-    "    return objects\n",
-    "\n",
-    "\n",
-    "def detect_and_crop_save_table(\n",
-    "    file_path, cropped_table_directory=\"./table_images/\"\n",
-    "):\n",
-    "    image = Image.open(file_path)\n",
-    "\n",
-    "    filename, _ = os.path.splitext(file_path.split(\"/\")[-1])\n",
-    "\n",
-    "    if not os.path.exists(cropped_table_directory):\n",
-    "        os.makedirs(cropped_table_directory)\n",
-    "\n",
-    "    # prepare image for the model\n",
-    "    # pixel_values = processor(image, return_tensors=\"pt\").pixel_values\n",
-    "    pixel_values = detection_transform(image).unsqueeze(0).to(device)\n",
-    "\n",
-    "    # forward pass\n",
-    "    with torch.no_grad():\n",
-    "        outputs = model(pixel_values)\n",
-    "\n",
-    "    # postprocess to get detected tables\n",
-    "    id2label = model.config.id2label\n",
-    "    id2label[len(model.config.id2label)] = \"no object\"\n",
-    "    detected_tables = outputs_to_objects(outputs, image.size, id2label)\n",
-    "\n",
-    "    print(f\"number of tables detected {len(detected_tables)}\")\n",
-    "\n",
-    "    for idx in range(len(detected_tables)):\n",
-    "        #   # crop detected table out of image\n",
-    "        cropped_table = image.crop(detected_tables[idx][\"bbox\"])\n",
-    "        cropped_table.save(f\"./{cropped_table_directory}/{filename}_{idx}.png\")\n",
-    "\n",
-    "\n",
-    "def plot_images(image_paths):\n",
-    "    images_shown = 0\n",
-    "    plt.figure(figsize=(16, 9))\n",
-    "    for img_path in image_paths:\n",
-    "        if os.path.isfile(img_path):\n",
-    "            image = Image.open(img_path)\n",
-    "\n",
-    "            plt.subplot(2, 3, images_shown + 1)\n",
-    "            plt.imshow(image)\n",
-    "            plt.xticks([])\n",
-    "            plt.yticks([])\n",
-    "\n",
-    "            images_shown += 1\n",
-    "            if images_shown >= 9:\n",
-    "                break"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "Crop the tables"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "number of tables detected 3\n",
-      "number of tables detected 2\n"
-     ]
-    }
-   ],
-   "source": [
-    "for file_path in retrieved_images:\n",
-    "    detect_and_crop_save_table(file_path)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# Read the cropped tables\n",
-    "image_documents = SimpleDirectoryReader(\"./table_images/\").load_data()"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "Generate response for the query."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "The tables you have provided seem to show the performance of different language models on various natural language processing tasks. The models appear to be evaluated on different datasets, such as SQuAD (Stanford Question Answering Dataset), QUAC (Question Answering in Context), Natural Questions, TriviaQA, Commonsense Reasoning, and several others. The evaluation metrics are EM (Exact Match) and F1 score, which are common metrics for assessing the precision and recall of the predicted answers in question-answering tasks.\n",
-      "\n",
-      "Comparing LLaMA 1 with LLaMA 2:\n",
-      "\n",
-      "1. SQuAD (Exact Match): LLaMA 2 seems to consistently outperform LLaMA 1 across different shots (0-shot, 1-shot, 4-shot, 5-shot) and model sizes (7B, 13B, 65B, 70B), indicating better accuracy in answering questions in this context.\n",
-      "\n",
-      "2. QUAC (F1): Similar to the SQuAD dataset, LLaMA 2 generally achieves higher F1 scores than LLaMA 1, suggesting that LLaMA 2 has better performance in generating answers that closely match the expected responses.\n",
-      "\n",
-      "3. Other datasets and tasks: Although the tables are cut-off, and we cannot see all the datasets, the same trend appears in what is visible — LLaMA 2 performs better than LLaMA 1 in most cases.\n",
-      "\n",
-      "4. AGI Eval: In the AGI Evaluation, LLaMA 2 has a higher score again, indicating more effective general intelligence capabilities according to this particular benchmark.\n",
-      "\n",
-      "5. MMLU (3-shot), TriviaQA (1-shot), and others: LLaMA 2 outperforms LLaMA 1 in these datasets as well.\n",
-      "\n",
-      "In summary, based on the data shown in the tables, LLaMA 2 seems to be an improved model over LLaMA 1, producing more accurate and precise answers across a range of natural language understanding tasks and datasets. This suggests advancements or optimizations in model architecture, pre-training, or fine-tuning procedures that result in improved performance for the LLaMA 2 model.\n"
-     ]
-    }
-   ],
-   "source": [
-    "response = openai_mm_llm.complete(\n",
-    "    prompt=\"Compare llama2 with llama1?\",\n",
-    "    image_documents=image_documents,\n",
-    ")\n",
-    "\n",
-    "print(response)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "import glob\n",
-    "\n",
-    "table_images_paths = glob.glob(\"./table_images/*.png\")"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "image/png": "iVBORw0KGgoAAAANSUhEUgAABOwAAAI9CAYAAACJ9+c1AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOydd3Rc1bm3n+lFM6Pee7GKJdtyk23cjStgwFTTA6GElkoaKaQQbrjkS0hCSAIJJZRAcAghLoBxr3KRiyzJVu+9zYxG0+d8f3jNiWTLXTbmsp+1WEZz2nv22afs336LQpIkCYFAIBAIBAKBQCAQCAQCgUBwWaD8rA0QCAQCgUAgEAgEAoFAIBAIBP9FCHYCgUAgEAgEAoFAIBAIBALBZYQQ7AQCgUAgEAgEAoFAIBAIBILLCCHYCQQCgUAgEAgEAoFAIBAIBJcRQrATCAQCgUAgEAgEAoFAIBAILiOEYCcQCAQCgUAgEAgEAoFAIBBcRgjBTiAQCAQCgUAgEAgEAoFAILiMEIKdQCAQCAQCgUAgEAgEAoFAcBmh/qwNEAgEAoFAIBAIBALB+REIBGhtbcVsNqNQKD5rcwQCgUBwGiRJwm63k5CQgFJ5eh86IdgJBAKBQCAQCAQCweeU1tZWkpOTP2szBAKBQHAONDU1kZSUdNp1hGAnEAgEAoFAIBAIBJ9TzGYzcHzwZ7FYPmNrBJ9n1q5dy8GDB4mIiOCee+5Br9fT3NyMyWTi3XffpaKigh/+8IdERUXJ3py1tbVs3ryZv//973z88cd85zvfIScnhxkzZlBQUCDv+7XXXmPq1Knk5+cTCASw2+384x//YNu2bUybNo2FCxeSk5Mjr3/nnXcyadIkHnjgAbmP9/b28swzz2AymbjpppuG7b+rq4vS0lJqamq47777UCqVDA4O8pOf/AS3283vfvc7JEni2LFjxMbG4na7OXLkCO+//z4dHR288sormM1mXC4XTU1NrFmzhl/+8peUlZURHR2NJEm0t7fz7rvvsnz5clJSUtBoNJfoynx+GBwc5LXXXqOqqoonn3yS6OhoeVlNTQ2bN2/m3Xff5aOPPuK9996jpqaGgoICrr32Wnm9devWERcXR2pqKmFhYdjtdt599122b9/O9OnTufLKK8nOzsbr9bJy5UoeeughpkyZQmRkpLyPpqYmoqKiMBgMw+zbsGEDg4ODpKSkMH78ePx+P3/84x+x2WwUFRWRnZ2NTqfD6XTy1a9+leeff57MzEwAfD4fzc3NrFq1iltvvfW8J0psNhvJyclyvz4dQrATCAQCgUAgEAgEgs8pQeHEYrEIwU5wQaSmpnLs2DHa2trYvn07BoOBpKQkPB4Pdrsdr9crixdBsrOz6erqorq6Gr1ej1arxWg0Yjabh/XHob+53W4qKysZN24cKpUKm81GZWUlU6dOldfXaDTo9XosFossbFgsFhISEnA4HFit1mH7r6mpwe/3k56eTnh4OABqtRq1Wk1/fz+tra0oFAp6e3vJycnB6/WSmJjItGnTeP311+nq6iIyMhKr1crg4CATJ05EpVINOw+/3092djYNDQ3k5ORgNBov2rX4vGK327HZbCP2lZycHDo6OuS+YjQa0el0GI3GYdcyJCREbne9Xk9lZSXjx49HpVJht9upqqpi0qRJdHR00NzcTEZGBmlpacNSAuTn549o39GjR5kyZQo5OTlYLBa8Xi9WqxWv14skSZjNZpKSkujs7EStVmMymYbZFh4ezq9//Wu5b1xIGoKz2VYUnRAIBAKBQCAQCAQCgeALTmFhIQUFBTgcDn7729/yzDPP8Ne//pWysjIcDgcqlQpJkoZtExTV/H4/TqfzpOVBguKEJEk4nU42bdpEQUEBc+fOxWazUVxcjMfjOaONer0etVqN3+8f9ntzczMOh4O0tLRhv/t8PlpbW9myZQtbt26lvLwcl8sFgFarJTY2lhkzZrB+/Xq6urpoaGigsbGRGTNmjHjsrKwsKioq8Hq9Z7T1i0hvby8ulwu1Wn3avuJyuU7ZV4b+7nQ62bx5M+PGjWPevHn09/ezZ88e2RNSr9efMQ/cUOrr6zEYDERERADHRViVSkVERAQxMTGEhYWdcR+SJBEIBE5p/2giPOwEAoFAIBAIBAKBQCD4gqPX67nhhhu48cYb8fv9tLe3s3DhQvLz8+nt7aWjowOPx4NWq5UFOK/Xi9frJSoqitDQUFQqFfBf0SX4r0ajQalUEggEGBgY4PDhw6xevRqlUklTUxN+v58jR44wadKkU9onSRIdHR2YTCays7OHLXM4HCgUCmJiYob9rtVqycvL46GHHkKSJEpKSjCZTAwODgJgMBh49NFHueWWWxg/frzsIajT6U46vlarJTExkZ6eHgKBwHm28v9tIiMj8fl8tLe34/V60Wg0w/qKz+cjOjpa7isjeZn5/X7UarXsfXno0CHCwsJQKpU0NzcDUFFRQUJCgizUBrc5ExqNBq1WKx9bq9USFxeHwWAgLi6OsLAwfD7fGc8xEAjg8/nQarXn0Upnj/CwEwgEAoFAIBAIBAKB4AtOSUkJra2tACiVSuLj45kxYwaFhYUUFhZiMpl4++23h21TU1NDQ0MDP/7xj1EoFERERNDX10d3d/ew9QYHB/H5fDQ1NbFz506efPJJvvSlL3HPPffwzW9+kyuuuILXXnvttPZt27YNjUZDdnY2WVlZw5aZTCYA2tvbT7uPwsJCamtr5fVUKhXZ2dkUFBTwu9/9jpqaGhYtWjTitm63W86Ndi5eXV8k4uLiyMvLIyQk5KS+Ul1dTVNTEz/84Q+B48LXSH2lra0NgJ6eHnbv3n1SX5k2bRpvvPEGiYmJzJkzh3/961/s3LnzrOzz+Xx4vd4LEly7u7tRqVSXJIeh8LATCAQCgUAgEAgEAoHgC05nZye7du1Co9GQk5NDU1MTV1xxBUlJSSxfvpyYmBjWrVuH0+mkoKAAu92Oy+UiMjJSzj+3bNky3njjDd58803Ky8uxWCw0NzczefJkAoEAO3bs4D//+Q9ZWVmo1WqUSiU6nQ6r1cpHH33E9u3b5Rxi+/bt47333sNgMOB0OrFarVx99dXk5uaeJJilpqbi9XqpqalhypQpAOzZs4eGhgacTifvv/8+kiTR1tZGdHQ0Ho+H7u5u7HY7M2fO5I477mDHjh3ExcXh9/vZu3cvLpeLLVu2MG/ePKKjo3G5XBw9elT2xBOcjFKpZMmSJVgsFj7++GMGBwcZN24cNpsNl8tFVFSUfH0mTZrEhg0b2LZtGz09PSQnJ9PR0UFERITsWbd27VoyMzOH9ZX+/n4++ugjbr75Zp588kk++OAD3n33XT799FPGjh2LVqvF4XAwZ84cEhMTh3neZWVl4XA46OrqIjo6GqvVSllZGVqtlpycHOLi4rDb7XzyySc0Nzezf/9+TCYT8fHx8j5O5Rl4MRCCnUAgEAgEAoFAIBAIBF9wsrKy0Ov1uN1udDodGRkZREZGEh4eTmRkJCqVCqVSSUdHB2+++SbR0dFkZ2eTmZkpV+jMzs5m2bJldHd3YzKZMBgMREZGMnbsWDQaDX6/H4VCQWxsrCx6xMXFMW/ePMLDw4mJicFkMvHlL38ZnU5HamoqKpUKn8+HJEnk5ubKRSWGEhT5ysvL8fl8qFQq4uPjue222/D5fKSmphIIBORz8fl8DAwMyGGNkydPJiwsjLi4OPR6PUlJSTz99NNkZmai1+uRJAmXy0VzczPz5s0TFWJPQ2JiIldccQUqlYqOjg7+9re/ERMTQ05OzrC+Eh4ezlVXXUVzczMqlYqQkBAiIiJITk7GYrGg0+lQq9XD+kp8fDzz588nKiqKmJgYkpKScDqddHZ24vf7MZlMssBmMplOEtamT59OR0cHjY2NxMTEoNPpuPrqq1EqlSQnJ6PRaDAajeTl5fHVr36V7OxsudKsz+ejqqqKwsLCCy44cbYopEuRKU8gEAgEAoFAIBAIBKOOzWYjNDT0pKqZAsH54PF4cDqdOBwOoqOjUavVw4QJr9fLxo0beeONN0hKSpIFu4SEBDIzM1EoFEiShMPhwG63AxATEzOsYIVCoSAQCKBUKuX/lyRJznF3ohASXHYmgeTIkSPs2bOHefPmkZ6ePmxfwUIBSqUSpVI5rGBAcJ2gmBi0Y+i/druduro6tm3bxqOPPnrJPKw+z3g8HjZt2iT3lZycHDIyMkhMTCQjIwOFQoFCocDpdMremjExMcO8F8/UV4K/B4ue9Pb2YjabCQ0NHTFs2WazsWnTJrRaLTNmzCA0NBRJkpAkSbYn+PeJ/XFgYIB169aRmZlJbm6uHIZ9rpzLM1sIdgKBQCAQCAQCgUDwOUUIdoJLSSAQwGq1EhISQnl5OQcOHKCqqgqDwcB3vvOdYQUpLjVOp5PW1lY2bNjA/fffP6p55kpLS6moqGD27NnExcUJwe4sGNpXysrKOHDgANXV1RiNRr7zne8MK0hxKamoqKCzsxODwUBRUdFZbeN2u+ns7GT16tV8+ctfvqCQaCHYCQQCgUAgEAgEAsEXACHYCS41p5MQPmshy+Px0NzcTHp6+qja0t/fz8DAAImJiZ/5OX6euBz7iiRJ2O12rFYrycnJZ7VN0HsvNjb2gnPYncszW+SwEwgEAoFAIBAIBAKBQHBWXM6ClUajITU1ddT3a7FYLlnesv9LXI7tpVAoMJlMhISEnPU2er2e+Pj4S34+QrATCAQCgUAgEAgEgs85u3btkpOjCwQCgeDyQ6lU4vf7z3p9IdgJBAKBQCAQCAQCweccl8t1WXqzCAQCgeA4JxY8ORNCsBMIBAKBQCAQCASCzzmJiYnnFOIlEAgEgkuLQqHA7Xaf9fpCsBMIBAKBQCAQCASCzznZ2dmi6IRAIBBc5thstrNed/TqHAsEAoFAIBAIBAKBQCAQCASCC0YIdgKBQCAQCAQCgUAgOAlJkujs7DxjknSXy0V3d/clsmo4kiTh9XoJBALnlBvqcsPr9TIwMIDT6fzcnYfX66Wzs/NzZzdAIBCgs7OTQCDwWZtyTgT7fW9v7zkVMbgcCNre19eHx+P5rM05JyRJYmBggMHBQbxe70U/ngiJFQgEAoFAIBAIBILPOX/84x+Ji4tj3LhxTJo0adiynTt3cujQIVQqFStWrCAyMhKl8vS+G06nk2PHjvHrX/+aX//610RFRY24Xn19PcXFxZSUlPDss8+O2vmcCa/XS09PD5988gmRkZH09fVhMBhIS0ujsLCQhoYGUlNTUSqVl6QYhyRJuN1uiouL8Xq9SJJEaGgoRUVFZ9zWarWyd+9etm7dyu233052dvY52exyudBoNKhUqvO2fXBwkJKSEpqbm4mMjGTx4sVntW13dzcHDhzgrbfe4tVXXz2nY/p8PgBUKtUZ++PZUF5ezv79+1m0aBGxsbFnbMOOjg62b9/OoUOHePLJJ9Hr9Wd9rAtt8yAvvfQSNTU1BAIBlEolU6dO5ZprrjmtLT6fj66uLt555x0SEhJYunQpoaGhZ31Mt9uNUqlEo9FckO1NTU10dnYyODhIfX09y5YtIywsDLX61DKT3+/H4XDw17/+lbi4OObMmUNiYuJZHzN4b2m12vO2OxAI0NHRQXl5OcXFxXzve987q/7n9/vp6uri17/+NcuWLWPcuHGnfC6OhM/nk/v82SI87AQCgUAgEAgEAoHgc051dTWffvopxcXFwwaFDoeDAwcOsHHjRiorK89ZvNq0adNpk6QrlUq6u7vZuXPnedt+PnR3d7N3716sVitarRatVovD4aCnpwe/309TU5M8uL8U+Hw+9uzZg9PpRKFQ0NjYyJ49exgcHDwrG/r6+jhy5Aj9/f3ndMyDBw9SWVnJ4ODgBVgPXV1d2Gw2jhw5wqFDh856O4VCwcDAAFu3bj3ntv7kk0/o6OgYFU+lnp4eDh8+zNatW3E4HGe1TSAQYGBggOLi4rP2UpMkiUAgwLp162hqaroQkwFobW3FbrdjMBjQ6XSnFbuG4vf7aW5upra29qzbL2j7tm3bKCsruxCzcbvd1NbWUlNTg1KppK+vj927dzMwMHDa7RQKBZIkybaf7bWC4/d8aWkp5eXlF2S7w+HAbrfT0dHBmjVrzqnfKhQKDh8+TEdHBy6X66y3q6+vp6ysjMbGxnOyVXjYCQQCgeALRyAQoLW1FbPZfElm3QUCgUBwfkiShN1uJyEhYVQ8cP4vk5qaypYtWygtLaW3t5eYmBgAmpubaW5uxul0kpCQQGRkJHB80Or3++XBarBghd/vx+1243a7iY6Oxmg0yu9Kv9+Pz+fD6/XidruxWCwkJyeTnp5+wZ5G50pLSwvr169nxYoVzJ49G5VKRXV1NTabDZfLRWtrKy6XC7Vajcvlwu12o1Kp8Pv9KBQKQkJCUCqVeL1efD4fbreb0NBQVCrVeX0buN1u/v73v/O9732P+Ph4enp6OHjwIJ2dnaSmpg5bNxAI4HQ6ZZHIaDQSHx9PQkKC7D2l1WoxGo2yJ5HH48HlchEIBNBoNOh0OrxeLx988AFxcXGYTCb0ev15e0319vaSlpbGnj176OvrG3GdoODjcrnwer1oNBosFgsZGRmYzWZcLhcOhwOtVoter0en08nee36/n0AggEqlwmg0IkkSv/3tb/n2t7+NTqcjPDz8rMWqE/H7/TQ0NFBVVUVXV9eIz4pgGGbwP61Wi8lkYuLEibz99tvY7XacTidarRaDwSDbMjAwgCRJSJKEUqnEZDLh8Xj47W9/y+OPP05cXBxarfa8n08FBQVERUXJXrHBfnmi7W63W/bQ0mg0mM1mCgoKaG9vp7+/H4VCgUajGba9w+EYFipusVjweDy8/vrrFBQUkJ2djV6vR6FQnHOf7+3tpa6uDkmSmDp1Klqtlpdeeom8vDzCwsKGretyueRnh0KhwGg0Mm7cODo6OrDb7fT09KBUKrFYLCiVymF9TKFQoFKpCAkJoba2lk8//RStVkt2djZGo/G82tzhcKBWq0lISDijQO50OvH5fEiShEKhICYmhtTUVNRqNXa7ne7ubvk+gOMiusfjkScLjEYjGo2GPXv2UF9fT2pqKvPnzz9rW4VgJxAIBIIvHK2trSQnJ3/WZggEAoHgLGlqaiIpKemzNuOyJiwsjMLCQgBWr17NvffeC8C2bdswGo1MmzZNXtfn87F582a6u7sJBAL4fD7uvvtuNBoNbW1tHD58mCNHjjAwMIDL5ZIFC6vVSkNDA42NjRw5coQ777yT+Pj4z+J0CQQCOBwOdu3axeTJkzEYDGRkZOBwOKisrOTAgQPMnj0bpVLJ/v37OXjwINHR0bS3t6PX67n66qsxm800NDTQ1NREWVkZd999N3Fxceclevn9fg4dOkR4eDharZaoqChiY2OpqKgYJtgFc2Dt2LGD/v5+fD4fM2fOlPfR0tLCv/71LxITE7nyyispKCggEAhQWVkpexSmp6dTUFBATEwMzc3NuFwuysvL0Wg05/V9o1AomDRpEt3d3ej1+lN6bPl8PqxWK8XFxbS0tJCUlERubq58PUpKSvjwww/JycmhqKhItn3r1q309vbS19dHXFwcc+fORa/Xy16FISEhZGRkEBcXd862A9jtdtxuNxqNhtDQ0BHFJ5/PR21tLQ0NDVRXV5OTk8OYMWOA49dk7dq11NbWMmbMGGbNmkVGRgZer5fVq1fLIp/JZOL666+nq6sLl8vF4cOHSU5OJj8/n5CQkPOy3e/3U1FRQWtrK2FhYSeFIgfvvQMHDtDd3U1zczOpqalynwkKxYFAgPT0dK666ioiIyPx+Xxs3LiRvr4+AoEAgUCAu+66i56eHgYHB6mpqaG4uJipU6eel+0HDhzA5/ORkJCARqOhoKCA8vLyYZ6eQaGwtLSU7u5u2tra0Gg03HrrrcBxEXrt2rVy+Phtt91GdHQ0NpuNXbt20dDQgFqtJjY2lquuuoqOjg66u7vx+Xzs3r2bBQsWnFebB/tZULwfiaDt+/fvp7OzE5fLhVar5cYbbwSOe/utXbuWnp4e0tPTue+++1AqlbS0tFBZWUltbS1Op5N58+aRl5dHT08PTU1N+P1+oqOjz9pWIdgJBAKB4AuH2WwGjg8AgzNigs+OmpoannnmGbKysnj00Udlz8fXXnuNAwcO8J3vfIeEhIRhH1XBGXu1Wo1Opzuv47a3t/Pzn/+coqIibr75ZhwOB//+97/l/ZeVlTFhwgRuvfVWDAbDeXlcSJKE3+/H6XRiMpmwWq309PSQmZl5XjYLLoyBgQG+8pWvUFRUxPr168nNzSUuLg6Px8P3v/99eT2n00lDQwM5OTkjXne3201PTw96vZ6IiIiTljudTt5//30GBwdRqVTU1dWhVqt5/PHHCQ8Pl/fpdDp58MEH+dvf/jbicSRJwmazsXr1ambOnMmOHTtYtWoVTzzxBNOnT6e4uJimpiZuvvlm9u7dy8aNG5k9ezZJSUmYzWY+/vhjdu3axWOPPUZOTo683yNHjjBmzBi0Wi2vvfYaV155JcnJyZelx7HNZiM5OVl+bgtOz5IlS6irq+O1117jzjvvpLe3F6PRSEhIyLDwrZ///OeMGzeOmTNnys/bn//85yxdupR9+/aRmZnJ448/TlNTE6+99hpwPN/X7t27KS0t5fvf/z4+n49XX32Vq6+++jM519zcXO6//37+93//l8mTJ2OxWFi0aBHXXHMNubm57Nixg3vuuQelUkl6ejqpqakYjUaWL1/Oc889h9vtZt++fVRXV/PEE0/g8/n4y1/+wooVK2Th81wI3q/Bgb5er8dgMJwUIhjMnVVXV8eDDz7Irl275HxlXq+X+vp6fvjDH/Lkk0+iVqsJBALo9XqefPJJ3nnnHXw+H7/97W95/fXX+elPf4rH4yE8PJyYmBhMJtMFt+vpaG1tZdWqVSxatIiFCxdSVlYme3AFRa3HHnuMp59+mrq6OuLj4ykuLmb37t08/vjjdHV1sX79eh588EF+85vf4PP5iIqKIioq6rwFLzgetl1YWEhBQQEVFRUjrmO1WnnmmWf485//zIQJE2Qx2u/3U11dzbRp0ygoKOCTTz7hD3/4A7/4xS/4yU9+wpw5c5g6dSqVlZV8/PHHlJeXc91116FUKomMjCQqKuq8v0PguKeox+PB7Xbz8ssvs2fPHp544gn5WgYF3ldeeYVf/OIXpKSkyN6skiRx6NAhfvGLX1BVVcWRI0d4++23efzxx/npT3/KxIkTmTNnDl6vlzfeeIOf/exnXHvttQQCAUJDQ4mNjT2nvH1D6enpkT0V4Xh/93g8JxXvcLlcvPHGGzz00ENkZ2fT3d0tv2vKysp48MEH0Wg0bN26lVdeeYVvf/vbPPbYY9xyyy3cfffd9Pb28qUvfQmNRkNLSwuBQICwsDASEhLOt8nPmj179nDs2DEmT55MfHw8R48elZe1trYyb948jEYjv/rVr8jLyyMtLY0//elPjBkzhvvuu4/u7m5mzpzJW2+9RX9/PyqVisjISNn7+WwQgp1AIBAIvnAEPxQsFosQ7C4DJk6cyPTp03n77bfJz8/n5ptvRqvVctdddxESEiILDcGZUJVKhcfj4bbbbuPFF18kMjJSTtasUCjw+/1yOEggEJCvdzBvSjCsJTs7m8LCQmJjY9HpdDz77LPccsstFBUVoVKp8Pl83HTTTYSFhXHrrbeiVqtRqVSyCBcMlwnuE47ncgr+HQxh2bhxI0eOHOHJJ5/EbrczMDCAxWKRQ4uC9igUCvlDN7i/oR/lQ49xOQornwdCQkL47ne/y4wZMygpKeGGG25g4cKF7N69G6PRKIfiBAfewXxCCoVi2LVVq9W0tbWh0+kwm80nXccXXniBgoICFi5cKIfs/PSnP+VXv/oVv/rVr9DpdCgUCj788ENqamqorq5m8uTJJ9nrdrvZv38/aWlpjB8/HpVKxd69e8nOzmZwcJCNGzfidDq54447iI6OZvHixUycOJFjx45hsVhYsGABLS0tmEwmTCaTHNJjs9lQq9VYLBYeeeQRfvSjH/Gzn/0MjUZz2faty9Wuy41gMYnk5GRWr15Nd3c3s2bNorKycljep08//ZTZs2cTGxuLz+djxowZ/M///A9er5fs7GxSUlLQ6/UkJCTIExaVlZWUlZXR1NTE+vXrGRwcJDIyEoPB8Jmca0hICBMmTOD555/H5XJRVVXF2rVreffdd/n5z38u22WxWNBqtdTW1vK73/2OO++8k/Hjx1NSUkJFRQVtbW18+umnOJ1OIiMjz1vAgP8+uwH5ea7RaPjmN7+J0+kkKSmJcePGERoayjvvvMP+/fspKiqSxQedTseUKVMwm81MmjQJl8tFaWkparWapKQk1Go1er2e+Ph46uvraWxsJCoqiqSkJBISEkb1myb4vHvyySexWq3DjvPYY49RWFjI7NmzmTx5MgqFAq1Wy5QpU9Dr9aSkpKBQKKipqeGTTz6hqKgIvV5PRkYG0dHR1NfXYzabMRgMZGZmEh8ff17hjYFAgIqKCvbt20djYyNNTU3U1NTw/vvvM2/ePN599136+/tJSkpi/PjxJCcnc+ONN5KTk8OCBQsoKCjA7XaTkpJCQkICOp2OnTt3UllZic/nY926ddxzzz1YLBZSUlLIycnh1Vdf5etf/zohISGkpqaSlJR0QeHgd999N5Ik4XK5SElJ4aWXXuLTTz/l4MGDtLW1ER0dzR133EFnZycPP/wwGRkZzJ49m7i4OBQKBePGjSMiIoL8/HxsNht79+4FYP369SxcuJDo6GjcbjfTpk3j2Wef5eGHHyY0NJT4+HgyMjLO23adTofdbpfDViVJwmw2869//Yv33nuPnp4ewsPDeeqpp+ju7uZHP/oRCQkJTJkyhYKCAgDy8vKIjY0lPDyc/v5+Vq1aRVtbG319fSgUCgwGAyEhIcycOZOdO3eSn59PXFwcFouF9PT0827zU7FhwwZ27dpFc3MzBoOBBx54gA0bNrB27VoyMzOZOnWqvG5ubi5paWkoFAomT57M0aNHaWtrQ6VSERYWJnt7ZmRk0NLSgkqlIi4ujuTk5HPyJBWCnUAgEAgEgs8cs9nMn//8Z77yla+Qnp7OtGnThuVU2bx5M+vXr8disfDd734Xh8NBZ2cnxcXFNDc3s2vXLhYuXEhMTAwffvgh2dnZREVFyaFgKpWKiRMnyh/1S5YsYfr06fLx9+7dK8+WBz9e1Wo1d911F2+88QYhISGUl5fz/e9/nwMHDvDGG2/wu9/9Dp/Px86dO2ltbcVms3Hvvfdy7NgxGhsbaWlpYfbs2TQ3N9PY2Minn35KX1+fnMenoaGBkpISuru7ycjIYMyYMWzZsgWVSkV7ezuBQIBbb72VpKQkdu7cSXt7O263mxtuuOG887Z80VGpVMycOXOYwBvMp/PUU08xb948du7cycKFCzl48CDJycls3LiRkJAQ5s+fz9GjR7Hb7cTExFBRUUFRURGtra1s3bqVw4cPs3z5crKysti9ezfLly8fdp2+/OUvM3XqVJ555hl0Op0c+vbkk0/ywgsv8Morr5wkSg0ODvKvf/2L3/3ud8Dx+yQ5OZny8nLGjBmDTqfDYDBw6NAhvF4vKpWKjo4O9u7dy6xZs+TjBwIB9u3bR3NzM+np6ezevZucnBxCQ0PRaDRkZWWxc+dO5s6de+kuhmDUCYrJaWlpzJo1i3fffZcpU6YQFhZ20jPD7XbT19fH4OAgRqORsLAw9Ho9TqeT3t5e2StMkiQ8Ho8sSGu1WsxmM1lZWaSnp8shceeaSH00GBwcpKuri4yMDAAiIiIoLS2lvb1dntwJ/ltfX8/u3btxuVwsW7ZMzt2n1WqxWCzDzud8wzIVCgVms1n2qA7m4MrKypLDTENDQ+Uqmg8//DBWq5X9+/eTnZ0NHJ+QCeYgCwkJwe12y9VIOzo6kCQJlUqFTqcjJCQEk8mERqORi26Mdh5BhULBlVdeidvtxmg0YjKZUCqV3HfffQwMDHDo0CEMBoPsoWsymVAoFOh0OjkvoNvtpru7G7/fj8lkwmg0otPp5HezVqu9oGqrer2ecePGodFo6O3tla9pRESEbLvFYpG9yTIyMujo6KC2thZJkkhLS0On08k5A4N5DuG/3tRJSUnodDpCQ0Pl3HzB8zzfaqWSJNHV1UVYWBharRa73U5cXBxxcXFkZGQQGhrKwMAARqNRDhcdGBigrq6O2tpa2UvLaDSiVqsxGAxotVrZkzZ4jzudzpNsD1aIvRBxOhheHgy5tVqtpKSkMHHiRMxmM4ODg+j1egKBADfeeCNWq5XW1lYaGhpkL0iDwSDnYzQajbhcLhQKBZ2dnXL+PaVSSVhYGC6XC51Oh0ajkbcZbdLT09FoNFitVrl9Vq5cSU9PD+3t7WzdulX2KA62NyDf70ajkb6+PgYGBobl3jObzfI9EbxfzxaRuVUgEAgEAsFlQVZWFr/4xS/41re+RWNjo+ypEEyy/IMf/IB169ZRXl5Of38/kiSRlJREamoqHR0dtLe3y4ms6+vrMRqNVFVVcfToUTIzM5EkiaKiIuLj49m1axe9vb3ysdva2uQPw6EkJSXR09PDlClT+PDDD/H7/UycOJE1a9YA8O6771JVVcX1119PRUUFH330EX/4wx+YOXMmCxYswOFw4HA4CAsLIzs7m/DwcHbs2EFzczOffvopRqORZcuWsXHjRnbu3InD4eDw4cMsXryYgYEBtm3bRnFxMUeOHGHGjBkkJSWJxPujjEKhID09nZ07d1JaWsqkSZOIjY3lwIED6HQ6kpKS2LdvHzExMcTExBAbG0tiYiJWq5Xm5mb6+/uZMWMG+fn57Nixg5KSEnm/Q71tgsnkbTYbcDyEa9q0aSxfvpwtW7bQ0dExzK6hXppBIc9sNpOamsr+/ftxOBwUFRURFRXFvn375AFYeno6jY2N1NfXA8c9Uzdv3syxY8eYN28e48ePp7S0VL6HACZNmkRxcfElq6YpuDh0dXXR1dWF0WhkypQp1NTUkJycjFqtxuFwyDnEBgcHKSgooL6+npqaGvr6+uR+nJubS3t7O4cPH6aiooLa2lp8Ph99fX2y2BRMqG4wGIiLiyMQCNDf34/T6aSvr++S9aPe3l727dtHZWUlra2t9Pb2kpCQQF5eHna7XZ7YaW9vp7i4mO3bt8vCS1lZGXq9ntDQ0GHnEx8ff94egyqVigkTJlBRUUFzc7NcfCElJYUlS5awfPly5syZQ2xsLC6Xi6KiIoqKihgcHMRqtTIwMIDNZqOrq0tuQ4fDgc/nIzo6Ws6B1dnZiVKplJ9FwTx8HR0d510pNvisaW9vp6enB6vVKocuBsOMFyxYQFZWFjabjUWLFjF27FhcLhednZ1yoY+uri5Z7AoWoMjJyaGiokK+FgqFgsLCQln8ra2tpb29HY/Hc852KxQKIiMjKSoqIi0tjZCQEHkSJiIigoULF7J8+XLmzp1LSkoKXq+XhQsXkpycTCAQkO+ZwcFBBgYG5Ak1t9uN3W5nwoQJHDp0iJaWFvr6+vB6vUyfPl0WF1taWmhrazvvPt/a2kptbS11dXXyMebNm8eYMWOYP3++bLtWqyUuLo5Zs2YRExODx+PBarXS29tLf3+/XIzE7/fjcDjke7ympka+x202GzNmzJDFou7uburr64d58J8LQZG2o6NDDvOePHkyRUVFLFiwQO4zTqeTmJgYioqKSE9Px+v1YrPZ6OnpkZ8bwXZ3OBwoFArCw8Pp6uqitrYWm82G1+tl3LhxhIeH43K5aG9vp6Wl5bzaHP4bZtzR0YHT6aSxsRG3201aWhpz5sxh+fLlLFmyhN7eXnJzcykqKiI1NZXu7m65wmxPT49c4VaSJLnQT/A+amlpkX9LTEwkIiICj8dDfX39sO/PMyG++AQCgUAgEFw2LFmyhJtvvplvfvObsqAgSZIcshQTE0NXVxeJiYmYTCby8/MJDw+Xw/2CXglwPAwpNTWVZcuWccUVV6BWqzly5AgdHR1yhb4gMTExdHZ2ytXggvT09MjhJkGCM9lwPLF7a2srH3/8MXl5eZjNZhITE1m6dCkvv/wyOp2OjIwM4uPjSU9PR6/Xo1Kp5KqN8fHxJCUlYTAY6OjoQKVSUVBQQGJiIlOmTKG/v5+QkBC2bt3KQw89xL59++RqZYLRITgLHhkZyY033sjy5ctRq9WyF0haWhoGg4FNmzbhdruZPHkyOp1Ont1XKBSUlJTIg1aLxYLVaqW/v39YLp++vj6Sk5MJDw8nEAiwdu1ampqa+OCDD5gyZQovv/zySddVkqRhOalMJhPJycls376dpqYmFi9eTFxcHIcOHaK/v5/4+Hi0Wq3sQQHQ0NDA22+/TWZmJmazWb5HhnrzJSUlnbIqpODzQzAccGBggPT0dAoLC5k/fz5KpVL2EAkmbb/jjjtob2/n0KFD1NXV0djYyL333sv111+P3+9n165dfPjhhxQXFxMbG0tTUxORkZHExsbS1tbG+++/z44dO2RBIPj8CgoAlwKr1cqBAwdYt24d+/fv55NPPiEiIoK5c+fS2dkJQFVVFaWlpRw8eJCWlhZyc3PZvXs3W7ZswWKxEBUVRUtLC++//z47d+6kpqZGHoSfKzqdjpUrV7J161ZKSkrwer2kpqZisViG3W9Wq5Xy8nI2bdqE0+mkqKiIyMhIWeCqra0lEAhgMBjkgh/5+flER0ezZ88eysvLMRqNFBYWymGa+/fvp6Kigp6envNuT4fDwZEjR+RnWWVl5Unr9PX1sWXLFo4cOYLP52Pq1KnEx8fT0dGBVqulqqoKn89HSEgIXq+Xvr4+rr32WlpbW6msrOTgwYMolUruuOMOFAoFBQUFbN++ndLS0vMSGxUKBWFhYWRkZMjeXHBczD2xHzqdTv79739TV1eHUqkkNzeXjIwMqqurAejs7MTj8aDT6VCpVLS1tXHvvfdy6NAhKioq5L5x1113odVqCQ8P58iRIxw6dOg8Wvu/7blr1y62bNlCSUkJLS0trFy5cpjnW1AQ//DDD2lqaiI0NJTMzEwSEhJobW2lp6eHgYEBedLR4/HQ29vLXXfdRVNTE4cPH6a2tpaWlhbuvfdeQkJCCAsLo6WlhR07dpy37ZmZmYSHh2Oz2SgtLaW4uJirrrpq2PdSML3E2rVrqa6uRqPRkJmZSVpaGm1tbfT09MiCXDAVidfrZfny5fT19bFt2zZZmLvyyivJysrC5/NRXV3NgQMHztt2SZLo7u7m2LFjaDQadu/ejc1mOyn/Xk1NDdu2baO2thaLxcIVV1yBy+XC5XLR1NQ0LHS3s7OTvLw8kpOTsdls7Nmzh9raWqZOnUp6ejpZWVkA8u9ni0ISX3wCgUAg+IJhs9kIDQ3FarWKHHaXAT6fjz/+8Y/ceuutREdHI0kSDz74IEqlkilTppCVlcXbb7/Nb3/7W773ve9x9dVXM3/+fJYtW8brr79OaGgov//970lMTGTBggW88847WCwWFi5cyD//+U8mT55MXl4e//nPf7BYLISEhNDU1MRVV13FqlWrSExMZP78+Xz729/myiuvZPny5ZjNZvx+Py+88AJLliwhPz+fwsJCNm3ahFarJS8vj7q6On7605+Sk5PDzTffjEKhQK1WU1lZSXh4OO+99x52u53c3Fyqqqr4xje+wY4dO3j//fe59957WbVqFTNmzGDJkiW89NJLREZG4nQ6USgUXHfddezatYva2lqmT58ue718+9vf5ne/+x2pqanC0+48CYb43XrrrXz5y1/m6quvxmq1ct999/Hcc8+RkZFBXV0dTz/9ND/96U+xWCysXr2aAwcOcPvttzNp0iSam5t57733SE5O5tixY+Tk5BAfH8+2bdu48cYb+etf/4rBYODee+8lNjZWFugAli9fTkVFBfv37+e+++4DjotqCxcuZN++fcMqHPb29vL973+fP/3pT/Jve/fu5Qc/+AEPPfQQN954I4cOHeK3v/0t48aN4/HHHwfgRz/6EVOmTCE7O5u33nqLsLAwjh49yqOPPkpBQQFf/vKX+frXv87kyZNRqVQUFxezc+dOvva1r112/Uo8r89MsI36+vrkoj0KhQKPx4NWqx0mXAzNhelwOORBarCwTzCXptPpxO12ywIzMGy/LS0txMTEyKG2wfyIQ3M5Xgr8fj/d3d04nU7i4uJkIT0oXgS9vYamWBiay1ShUOB2u2ltbZXP50LugaBAEQw1Dg0NHXE9j8dDa2srERERw0T5oG3BfKlBgm1bV1eHxWLBbDYPE3XsdjsGg0HOrXo+dgf/C7ZTIBA4aX+BQACv10tjYyMpKSlyNd0Tr/9Q4SMoIjU3NxMaGirnFAwyMDAwKiGOPp9PPl7QnqHXPRAIMDg4SGdnJ4mJieh0Orl6qkqlkvvMiTlj7XY7/f39GAwGOUdk8Hg+n08OjT1fhhZvGKmIERxv3+B6wfD1oXYGz/PEPuNwOLBarQDEx8fLtvv9fnny70JzNjocDrq7u0lMTJRzvp7qHI1GI2az+axsD4bzBnO/BXG73QQCgQsOAQ9e+2B/HZomYyitra2o1WpMJhMGg0G2c+g2J9re39+P1WolLCxs2Dvd4/HIhTnO9r0mctgJBAKBQCD4TGlubqa8vJyDBw8yb948tFotv/nNb7jhhhuYPXs2kZGRtLa28s9//hOHw0FNTQ1XXnklkyZN4g9/+AOPP/44Y8eO5eWXX6azs1MOWQgmoI6KipJnNvft2yeHdNXV1WG1WnE6ncyZM4cf//jH/OEPf6ClpYXk5GT6+vqYP38++fn5aDQaxo4dy7PPPktOTg5paWns2bOHu+++m6997Wt4vV7MZjPTp0/n5ZdfZsWKFcTExDBv3jzsdjvvv/8+GzZsoLW1lcHBQTlZemlpKSEhIYwZM4akpCQ++ugj+vv75cFBd3c3JSUllJWVkZmZyZIlS4iOjr7sRJXPG5WVldhsNg4cOMCsWbNoamrC5XKxb98+4uPjaWlpwW63U1FRwZIlS8jKyuLYsWOkpaUhSRIdHR00NjbKlUuLi4uJi4ujo6ODgYEBvvWtb/H888/L1eJcLhfx8fGyOPib3/yGxYsXy/Y4HA4iIyP561//yje+8Q35416pVBIaGorT6ZSFkfDwcLm4BEBGRgaLFi1CpVKhVqupq6ujv7+f1tZWnE4nnZ2dsuj8wgsvcOedd+JyuThw4AATJkxAqVSyf/9+ZsyYIQo7fM4JFkcJEhRFhl7Xof8fEhIi96sT1zEajfKyE583Wq1WTrZ+4n4vdR9SKpVER0efdOygzSMN6E+0MehJOxq2KxQKWVA73f40Go1cmOFUto20LJho/8Rlo1Ed9kSx4lRtp9VqyczMPO31H6nPpKenj9gmF1IddihD7R3pOAqFgpCQkGHXOuhhPdTmE9vBbDbL7Xti+4xGzsCIiIhhQunp1htqw0ji0ol/n+oeD+ajHA2Cxzid/See49nYHh4eTlhY2En7Gi27h177013HoFh4Yh8/XX87UagLEsy/Z7fbz95O4WEnEAgEgi8awmPj8iJY/fVEzwyn04nH48FischJt4Oz30HvA4fDgclkkmfOhyZWP/EDOJjfZajHQPC4wYGu3+/ntdde47333mPOnDksWbKEjIwMwsLCkCRJFtuC3gNKpRKfz0dra6ucX25wcJD+/n4SExPl43o8HtkTYaiXRzBsMjw8XD6nkT7cu7q6MBgMcsJvwfkTrM47dFY9WE14qKdFsG8EE5AHAgH5GgarwgbX8fl8qFSqkwZ8Gzdu5LnnniM/P5/ly5eTm5srFzbx+/3yB/9Qb6Ch/dPj8bBv3z76+vpYunSpvJ3P5xvm0eH1euUE+kM9W4LnEfzP6/WiVCrlc1apVPT19fGnP/2J73znO+ftnXMxEc/rMyPaSCAQCD4/nMszWwh2AoFAIPjCIQY3glMRDFXw+Xzs2bOHbdu2kZuby4oVK0ZtVlfwxcFut6PT6Th8+DBbtmxBkiQefvjhM3ojDGVgYID169cza9Ys2ZNoNHnnnXeYM2cO8fHxl6WHnXhenxnRRgKBQPD5QQh2AoFAIBCcBjG4OT+Cnkknhl191gQ9nILeT5cLl6tdIxH0GBuN8B6Xy4VOpxsV8Wc07RpNgnmxLoVdkiTh9XqxWq2nFezO9/5sbW0lLi7ukt7TwfY7m1xn4nl9ZoJt1NzcLNpIIBAILnMGBgZISEgQOewEAoFAIBCcnu7ubiRJwul0kpSUNGJeEfhvYuEjR44wZswYIiMjz7jvoWGj54LP55Pz0GVkZJx2QB9MxHz48GEWLFhwVvs/X7s6Oztpa2uTw1YLCgpOKcYFAgG6u7upqKhg7ty5Z9z30FDY8xG6vF4v3d3dw3LtBAIB6urqSExMPG1SaafTSWNjIwqFguzs7DMey+/3n1ZoOXToEFOnTj1puSRJcoJ4ON7+MTExpzxOMM+g3+9n7NixZ7TrxMT4Z0uw/wfDjk9nExz/0G5oaMBkMpGamnrG/Z+pvU6Fz+ejrKxMDhU/nV3B/tbV1UVcXNxZ3Z9BuxISEs7JruC2VqsVSZKIiIiQw22Dyc2joqJOua3H4+Ho0aOEhYURHx//uRC0Py9UVVUNSwsgEAgEgsuLYCqVs0UIdgKBQCAQfEHp7e1lw4YNhIeHs2PHDu6//36SkpJGXFeSJNra2vjhD3/Is88+e0ZBwG63093dTWho6Cmrnp2Kzs5OtmzZwrp16/jrX/962gG93++ntLSUb3zjGxw6dOiM+7ZarfT29p4ymfHpWL16NTt37pQ9nl544YVTVkTz+/2UlJTws5/9jJ07d55x3y0tLfj9fuLj48859Nbn83H48GHq6+sZN24c2dnZSJJEZ2cnP/rRj3j66afJyMg45fZdXV288847mEwmvvWtb532WJIkcejQIbKysk45K3zo0CGmTJky4rZlZWXU1NQAUF9fz2OPPXbK8x0YGGDVqlU4nU6efvrp09oFUF5eTnx8POHh4eckjgUCAY4ePcrq1auJj4/ngQceOO36TU1N/O1vfyM/P5+77777tOtKksTevXspLCw850p8DoeDH/zgB8TGxqLT6Vi6dCnXXnvtiOv6/X52797Nrl27uOGGG854f0qSxO7duykqKjpnwczv99PY2MjRo0cxm83MmDEDpVJJV1cX//nPfzCbzdx+++2n3N5ut/OHP/yBuXPncu21157x+P39/edk3xeZpqamC6r4KBAIBIKLSzCP7NkiBDuBQCAQCL6gfPLJJxgMBubNm0dtbS1r167lgQceGFYUobu7G6/XC0BiYiIZGRkMDAxQUVFBaGgo8fHxBAIBbDYbNpsNtVpNREQEFRUVfPrpp1xxxRVMnz79nAaRNpuNSZMm8corr5y0LBhm2tfXh8vlwmw2M27cOCwWC11dXfT09BAbG0t4eDg+nw+bzYbdbkej0RAREcHhw4fZsWMHc+bMYfLkycMS958Jr9fLs88+i8PhIDw8HJPJNKytfD4fvb29uN1uzGYzBQUFmEwmOjs76evrIzY2lrCwMNxuN319fXg8HvR6PeHh4axZs4bBwUFuvfVWYmJizin5/759+9i5cydf+cpXMBgMsqBYXFxMa2vrSWGbgUAAh8OBw+HA7/djsVgYO3YsR48epba2Fo1GQ0xMDFqtlv7+fhwOB4FAgMjISJRKJb/85S959NFHmT59Olqt9qzFsUAgwIsvvsgvf/lLVCoVX/va12hsbJQr+EqShMvlkgtxhIaGkpmZSXl5OY2NjQQCAWJiYjAajdhsNgYGBvB4PERGRmIwGPjVr37FypUrmTFjBhaL5ZxEO6/XS3JyMr29vSct8/v9OBwOBgYGZE+3zMxM7HY7NTU1GI1GoqKiUKvV9PT04HK5ZFsDgQA/+MEP+M1vfkNubi4ajeas7dJqtVxzzTUsX74crVZ7kgjn8Xiw2+04nU70ej2pqanU19fT1dVFVVUVUVFRhIaGEggE6OrqwuPxoNPpiIqKwuPx8O1vf5vXXnuN9PT0UwrPJxLc19q1a5k7dy75+fkoFApcLhcNDQ3U1dWRmZl50nZ2u13ubxEREWRmZqJUKqmpqcFisZCUlIRarcbn89He3k4gEECv1xMTE8P+/fvPqr0EsGTJEhESKxAIBJc551IlVgh2AoFAIBB8QSkuLuaOO+5ApVKRk5PDhx9+SDC1rSRJ9Pb2smXLFqKjo+nu7mbZsmUEAgFqa2spKyvD7XZz991343a72bVrF3q9nv7+fqKiopAkiY6ODtra2rBareck2OXm5tLR0XHK5UeOHJEFL5PJRG5uLm63m0OHDlFWVkZoaCh33HEH7e3t7N27F51OR19fH4mJidhsNjo6OmhpaSE7O/ucBDu9Xs+BAwc4evQooaGh3HLLLfL2kiQNs8tisZCSkoLT6eTgwYOUl5cTExPDihUrqKqqoqqqCpVKxeDgIGPHjsVqtdLd3U17ezuhoaFnLdhJksQvfvELvvOd77Br1y4iIyOZMGECNTU1REdHjyhcDQwMsGPHDsxmMzabjdzcXHw+H21tbezcuRObzSYXODh8+DB+v5+Ojg5SUlJITk7G5XJx7Ngxxo4dS2Rk5DkJdhUVFYSHh+NwOEhLS6O2tlYW7AYHBykvL8dqtRIIBEhOTpZF4z179tDQ0MDs2bPJzs5m3759eDwe+vr60Ov1TJ06FavVSmNjI2PGjMFkMp11fjmVSsXEiROpqqoacXlvby8HDhxAq9Xi8/nIzMzE4/HQ3NzMli1b8Pl8XHnllajVakpLS9FoNNTX15Ofn09sbCwej4eysjJSU1PPyZstGOa6YcMGnE4nixYtkj0lgx6vpaWlKBQKwsLCMJlMOBwOjh07xrFjx0hPT2fOnDnU1NTQ0dGBUqmkrq6OxYsXo1Kp8Hq9lJaWEh8fL4dRnwmfz8fevXupqamhqKiIHTt2MGHCBPr7++nr65P70lAGBwc5cuQINpsNt9vN5MmTAWhvb8dut9Pe3s7KlSvJyMhg69atDA4OolarOXr0KCtXrqS1tfWs2+yLjl6vFx52AoFAcJnj8XjOet3LJ2O0QCAQCASCS4rD4ZDFFoPBQCAQoLS0lE2bNrF9+3bq6+vZtm0bPp9PDluUJAmdTsf1119PQ0MDe/fupaSkhCNHjrB06VJCQ0P55z//SVdXF2azmYSEBMxm8wXZKUkS27dvZ9OmTRw+fJjdu3dTUVFBSEiILDAqFApSUlKYN28eH3/8MR0dHezdu5fq6mqWLFmCRqPhgw8+oKenB4vFQmJiIiEhIedkR1ZWFjqdjoSEBJ599lmOHj3Kpk2b2LRpE42NjezevZtjx44Ns0upVJKens706dP59NNPqa6uZuvWrRiNRubMmUNTUxNr1qzB7/cTFRVFXFzcOYmIQS+v3t5etm/fzlNPPUVHRwfr1q3DbDYzMDBAbW0tbW1t8nWtqqpi8+bN9PX1ERISIlfFNZlMzJs3D4/HQ3FxMRs2bKCxsZFp06aRnJzM6tWraWhoQKPRkJqaOszD8GwZHBwEjl8vnU5HT08PmzZtYseOHVRXV7N3715aWlrQ6/VyG+r1eqZNm4ZSqeTQoUPs3r2bsrIysrKymDlzJn//+9+prq4GIDk5+ZxExJEIBAJ0dnayadMmdu3aRXl5Odu3b2dgYACDwYDf78fj8RAVFcXChQtpbGykvLycDz74AIfDwYwZM4iNjeXvf/873d3daDQaMjIyMBgM52SHSqUiOTmZhIQEjhw5wmuvvUZVVRWbNm1i//79VFVVsWvXLrxeL1qtFkmScLvd5OTkMGXKFEpLS6muruaNN94gKiqKJUuW0NjYyCeffILT6USr1ZKZmXlOAo/b7Wbnzp2YzWZ27drFX/7yF7Zu3cqhQ4dwOp10dnbS3d1NdXU1xcXFbNmyhdLSUg4ePCh7ewZDgQKBAFdffTUej4d9+/bR39/Pc889x/Tp01m6dCkHDx5k3bp159RmAoFAIBD8X0J42AkEAoFA8AUlKiqKvr4+JEnCZrORmppKXV0ddXV1aLVarrrqKsxmMxs2bECSJGbPno1arSYnJweTyURmZiZ1dXUEAgFUKhUqlUrODRcMoYyOjr7gJOjBvGkul4v09HTGjx/P+++/T0dHB3FxceTl5aHX68nOzqaxsZHIyEhaWlpobm5GpVLJYbpB4TAqKoqoqKhzElD8fj8TJkwgJCQEhULBm2++SU9PDwcOHEChUBASEkJBQQH//ve/aWtrIykpidTUVAwGA2PGjCEQCBAWFkZDQwONjY0UFBQQFhZGaGgoXV1dWCwWQkJCiIyMPKdwWLvdjk6n45prruHaa69l7NixNDU1EQgEOHjwIFarlbKyMsLDwykpKcFgMDB+/HjGjBnD5s2biY6O5oorrkCv1xMbG0tSUhImk4nBwUH6+vrQaDRoNBoyMzNxu90YjUaMRiPJycnnLEAB6HQ63G43kiQxODiIxWKhpKQEk8nExIkTSUpKYvv27TQ2NsqFK6KiokhOTiYmJobBwUGOHTuG0+lEo9GQkpKC3+/HYDCg1+tJTEzEbDZfUMXTQCBAX18fJSUlhIaGMmbMGOLi4ti8eTOJiYlMnz4dk8mEXq8nJSUFjUYjF8gIXr+8vDzee+89wsLCMBgMpKamnlNuQkmS8Hg83HPPPbjdbgKBAB988AFNTU0cOHCAuLg4eZ/btm1j3LhxpKamyvdcQkICGzdupKuri87OTrnARH5+vmynTqcjLS3tnLz+JEnCbrdzzTXXyKHuu3fvJi4uDq1WS319PRqNhurqatrb27FareTn52OxWCgvL6eiooLExEQCgQDp6elYLBby8vLo6emht7dX9gQEmDRpEg0NDYwfP/6cr+EXlYaGBiIiIjCZTISGhg5b1tfXJ4dhxcbGYrfb6e/vR6vVYjAY8Hq9+P1+oqOj6e3tlZ/rDocDvV6PWq1GkiQMBsM55//8LGloaJDvITg+WWCxWFAqlTgcDlQqFQaDAbfbjVqtJjo6+pyewWdDIBCgpaWFwcFBuYiM0WgkMTERu92Ox+NBkiTUajVGo3HYpE0w9L2rqws4fg9GR0djNpvPaXLnQvH7/QwODuL1ejEYDBgMBrq6uhgYGJD7RURExLA0CYFAAI/Hg81mQ6VSye/KS2k3HG9Dt9ste78Hc24GJ5CMRiPR0dEnFQcKThr19/fLk0zn8967UNudTic+n4+IiAi8Xi+9vb3yhKvFYhk2SRV8d9TW1g47F51OR2Rk5CUJmXe5XNhsNhwOBwCRkZGYzWb8fj9OpxOXyyW3dVhY2LD3dfAdEwgE5HvSYrFcsuJEbrcbh8MhF1WKjIzEZDLR399Pf3+/nCIGwGQyyd7twXQR/f39wyaSNRoN6enpFzSJKAQ7gUAgEAi+oFxxxRUcPHiQMWPGUFVVJed1UygUSJLEjh07uOWWW3A6nfzmN7+hv7+f3t5eWltbycrKwu/343K5SE1N5eDBg9TU1MiiWmpqKs3NzVRXV5OSknLWIXdw/GOvurpaDnHMyMjg0UcfBY5/zH344Yc88sgjHDt2jDVr1siDhvb2duB4PrKBgQFiYmLYsWMHNTU1eL1eMjIySE5OZs+ePdTW1p6Tl50kSWzcuJH8/HwGBgaYMGECRUVFzJ8/H4VCQSAQYPXq1XzlK1+hoqKCDRs2UFRUxMDAAJ2dncDxD2+v10tERASHDh0iPT0dk8lEdHQ0drud5uZmGhsb5ZxiZ0NkZCSJiYmyh9mUKVPIyMggJiaG2tpaAMLCwsjMzGTChAnA8cFHT08PhYWF7N69m/r6eqxWKzabjcHBQQKBAHa7naSkJKqqqigvLycQCDB+/Hji4uKA42HJaWlpGAyGs/4QVSqVzJw5k61bt5KWloZarWbevHlcffXVwPHQU6vVyt13382ePXuorq5GpVLR29uLzWaTbU9KSqKkpITq6mrZrpiYGMLDwzl48CCJiYmEh4eftWgXDP9ubGykr68Pm81GTk4OOTk5wPHQTYfDwfjx4zl48CD19fV0dnYSFhYm56vr7+8nIyODmpoaqqur6enpYcaMGYSHhyNJEgcPHmTBggVnncPO7/dz9OhRtFotarUah8PBjTfeyIIFC1iwYIEsEM6dO5fu7m7a2tpob2+no6MDm81GbGwsg4OD+P1+wsPDOXbsGMnJyTidTqZOnSp7gZaUlDBnzhx5MH0mNBoNkyZNorKykoyMDAKBADNmzGDs2LHU1dVx9OhR1Go148ePZ+nSpQDU1dURFhbG2LFjZe/b/v5+Wltb5bCg7u5utFotMTEx7Nmzh0mTJuF2u5kzZ448+BGcmZ/+9KckJiZy5ZVXsnz58mGD+I8++oiPP/4YrVbLk08+ySeffMI//vEPUlNTKSwspKOjg+7ubh599FHeeecd7HY74eHhbN++nby8PBISEnC5XEyYMIEbb7zxMz7Ts0OSJH784x9TXV0tTxQoFAquueYazGYz27ZtIzQ0lAkTJlBbW4vFYuGJJ54458I1Z8Lj8fD0009z+PBhOZVDYWEhv/71r9m6dSttbW24XC6io6OZMGECeXl58rZdXV18/PHH/Pa3v0Wj0eDz+XjkkUdYuHDhaYsJjRbB+89ms3HgwAHa2tooKChg/PjxvPvuu2zevBmfz0dBQQF33nmn/NyE4x7VDQ0NfPLJJ4SGhqJQKJg1axZZWVmj2r6nIxAI0NHRQWVlJU1NTSxduhSj0chf/vIXSkpK8Pv9TJo0iW984xsjRgN4PB4++eQTtFotOTk5Z1WxfLTw+/00Nzdz5MgR+vv7ue2222hububtt99mz549KBQKFi9ezEMPPSQ/w/1+P62trdx0003o9XoUCgU+n4+MjAwefvhhFi1adNHtrqmp4aOPPqK4uBilUsntt9/O0qVL6e/v59ChQ1RUVMge+rfeeqv8HSFJEoFAgG3btsnfgVFRUVx11VXEx8dfdLvheAGwbdu2sXbtWrxeL3fffTfz58/n3//+N++99x6dnZ0olUq8Xi9z5szhxhtvZO7cuXg8Hl577TU++OADvF6vLMAnJibyz3/+84JsEoKdQCAQCARfUGbPno3NZqO7u5u0tLSTPFk0Gg3Nzc2kpaVx3333odfrmTt3LhaLBa1Wy4QJE3A4HIwbNw6n00lbWxsRERHMnz+fyMhIbDabPMA4F/x+P4FAgOuuuw6n0zni8s7OTpKTk7nrrrtQKBTceOONuFwuQkNDmTt3LhEREYwZMwav1yt74o0ZM0YOE1WpVPj9/rO2Sa1WEwgEaG1txe/3s3LlStnbDo4Pavx+P11dXaSlpXHbbbehVqu59tprcblchIeHM2vWLFJTU0lNTeXo0aN0dXWRn59PYmIi7e3taDQanE7nOQkUer2exx57TP6IfPDBB4mMjCQiIgK73c5NN91EYmLiMAEw6N0mSZLsLXbs2DESExPx+/0UFBTQ2dnJ2LFjCQ0NlT1sFi9eTFJSEkuXLkWpVJ7zdVWpVHzpS1+ivLwcm83GlVdeeZJg6na7GRwcZNKkScBxscxiseD1esnLy8NisZCbm4vRaCQQCNDb28tNN91EfHw81113HR0dHcNmwM+GYMGQ1NRUEhMTT8otE/QsiYqKYubMmWi1WlQqFaGhofj9fqZNm4ZWqyUpKYnDhw/LxVeuu+46oqKiuP7663E6nbKHz9mgUCgwGAw0NzdjMpmIj48/qfKu1+uVhdWggB70bDUajRQVFZGUlMSdd95Ja2sr3d3dZGVlMWXKFEwmEzfddBN2u/2c+luwWu22bduwWq1kZmYyc+ZMNBqNPPDV6XTDwmxVKhU2mw2TycSSJUtISEigr69Pbsfc3FzUajVms5knnniCnp4eenp6GD9+PLNnz6alpeWs7fuiU1BQwMaNG3G73SxatEj2BmppaeHgwYM0NTVx1VVXkZqayq233soHH3xAXl4ejz76KIODgzz00EP85z//Ydq0aeTn58uVnZctW8b8+fOpq6sbde+zi80VV1zBz3/+cxITE2lra+PDDz9k8eLFKBQKKioqyMrK4mtf+5qcV/P222/HZDKdc7Xu06FUKsnLy+O5556Tn13BvKF//vOf+fOf/0xkZCTr16/n6aef5q233pK3DQQCFBQU8Kc//YmioiJ8Pt+w0PJLgd1u5y9/+Qu5ubnccMMN6PV6PB4PHo+HZ555ho6ODtasWcNTTz3FO++8I2+3b98+PvroIx566CFSU1P55je/SUpKyjlNSl0ox44dY9++fZjNZu6++24UCgWbNm1i1qxZrFy5kpaWFp5//nleffVVvvKVrwzz/nO5XPzkJz/h7rvvJi0t7YKjBc6VDRs20NvbS3JyMtdccw0KhYItW7awdOlS7r//fmpqarjtttuYNm0aBQUF8nPXZDLx9a9/nbvvvhu1Ws3atWtpbW1l3rx5l8TusrIyZs+ezQMPPEBVVRX33HMPc+bM4Y033iA8PJybbrqJ8PBw7r33Xq6++mpZWPT7/fT09PDJJ5/wwx/+kIKCAoqLi/njH//Iz372s0tie21tLTExMbz66qs0NjZy2223kZubS2ZmJg8//LA8wfjyyy8zefJkuciSQqHAbDazbt06udhYTU3NqLy/Pl9PXIFAIBAIBKNGsHCC3W5n4sSJKBQKWYBSKBQUFRXR39+P0WgkLy8PSZJ45JFH5OVz586V17/99ttxOBwYjUZ5oHPVVVcBnPOHudFoZObMmcyaNWtEkeO6666jv79f9oKQJInvf//7svfEypUrZRtvvfVWnE4nBoNBtmv58uXnZdfy5cvp7++XQziGeggolUquvfZarFYrYWFhsl3BQa9CoeCWW26R1w8m5w8JCUGlUhETE0NeXh5KpfKsiyUEWbp0KVarVQ6nCpKXlzfs+EHCwsJYsWKFHB4kSRLZ2dnyOjNmzJC3SU9PZ3BwEJ1Oh06nQ6FQcNttt+H3+8+6smgQhUJBXl4e6enp+Hy+k7wZwsPDWbRokVz9V6FQMH78ePkYERERFBYWolAo5GrFWq0WnU6HUqlkyZIluN3uc6pcG7QrISGB22+/HeAkASs+Pp6rrrqKQCCAyWRCkiTZA0ahULBs2TK5vTIyMhgcHMRoNMredPfff/85t5dKpSI/P5+0tDSUSuVJwqZWqyU3N1f2VNTpdEiSJN/HADfccINsV9DbLtjfAB5++OFztkupVBIfH8+KFStwOByEhoaiVCqRJIn09HQyMjJOar+UlBS5EI1er5fzOgbbb+LEifJ1XbhwoRxil5eXh0KhOKk6ruDUhIeHM2HCBLRaLatXr+bmm28GYMuWLRiNRqZNmyZf66FelcHn2eDgILm5uUyePJmYmBgaGxtRKpXy8jFjxnxm53a+LFu2jJiYGHw+Hw6HA6fTSWpqKm1tbQCyh+yuXbu46qqriI6Ovijhdzqdjt27d+N2u0lISCAtLY2amho0Gg1KpRKtVovb7aa5uVkOYQ++RzweD93d3axatYrc3FyysrIuqXj0zDPPsGDBAvLz8+Xnh1Kp5I477pDD/idPnkxTU9Ow7bRaLV6vl5dffplHHnmEpKQkwsPDz/kddz4Eq6W/9NJLLFiwgDlz5sjPu3HjxsnfKoFAgClTppx0zbu6uti4cSNZWVlybtlL5RUIx4WjI0eOEB8fT2Fhofz7smXLMJlMchh3Xl7esHeeUqnEYrGwbNkyNBoNFRUVaLVa8vLyLplIunTpUjQajfzMX7hwIRqNBqPRSEVFBTabjRUrVjBmzBhZrIPjHpm7du2SUzUkJydTVlZGeXn5JbEb/vv9o9FoUKvVLFiwALPZLD9DFAoFdrudgYEBoqOj5dQDGo2Gq6++Wi54VVdXR1lZGXfccccF2yQEO4FAIBAIvsCo1WrCw8NHXKZQKIYtO/FjdejfGo3mpLxG5/txOFQ4PPHDXqFQoFKphg3ih4qMJ9ql1WpP8pQ4X7tOPO5IdkVERJyVXSMNti5kkHhivqqgPSceN/j30GqSQ9v7RNs1Gs1J+w4O4M+HoOfYqZYFhcET7Tjx76CH24mcT26kE8//xGMG802dav2h24zU3863vZRK5WkLtqjV6mGh5iMNJoO/jRT6fb52KRSKk87zRLH/RE7s76d7llxokZovMiqViqKiIjo7O1mzZg0rVqxgYGCAQCCAwWAY8dlns9k4duwYNTU1TJs2jYkTJxIVFTXi82g0vc4uFbGxsWg0GsrLy+XUD0GR2u12y8WTamtrZYEpmL9vNLHZbNhsNmpqati9ezcxMTEsWbKE+vp69uzZQ2hoKGVlZXg8npOeRy6Xi9bWVjQaDc8//zy33347hYWFREdHj6qNJxIMUdy1axexsbFUVVUxMDBAUlISt912G5GRkahUKnp6eujv75e9j4JkZGQwd+5cXnrpJb73ve+dJC5dbBoaGmhubqakpIS2tjaam5tZunQpkyZNkvtyMMfe1VdfPez+6OvrY/PmzaSnp/PWW29htVqZPHkyS5YsuSSC44EDB2htbZVTQtTU1PDVr36VqKgouWK52+0mOjp6mBd9MG9aTEyMnI4hNjZWngC5FJjNZhobGzl8+DDFxcVytfo5c+bgcDjYtGkTBw4coKCgYNjkp8/no729HaPRKH+nqFQqOdfgpcBoNNLd3U1xcTEbN24kJCRk2LvY7Xazdu1arrjiCrn/w/F2j4uLQ6VSyfdJsDjXhSKqxAoEAoFAIBAIRo2UlJRL6okgEAj+S2ZmJikpKXR0dFBTU0N5eTlxcXFnrJ6sUqmYN28eSUlJl7wowMUiOAlgt9tpaWmhr6/vpBxkwXWSk5PlqtvBnJmjhVKpJDs7m+TkZFJSUujv72fz5s3ExsYyadIkWUxyuVwneXAbjUZiYmJITk4mKyuLrq4uysrK5NyoF5NgAYD+/n40Gg1arZbu7m5Wr14th+b29PTQ3d0t5ygdSiAQkD3alEolra2ttLW1jXr7nsr22tpa9Ho9Op0On89Hd3c369atk0OKOzo66OjoIDExkZycnGETGA6Hg7KyMpKTk1Gr1ZSVlXH48GG5+MfFJugZFxYWhtvtprKykpKSEjnqoKuri+rqambNmkVYWNgw4UipVKLRaKisrMTr9RIeHn7Rxd2hDPX20+v1tLe309bWJqeWGDNmDJIk0djYSGdnJ263G/ivV2SQYMTBpRBIT7Q9WCClo6ODtrY2uTBMV1cXNTU15OXlnTSRF+xnFRUVeDweWSS90O8h4WEnEAgEAoFAIBg1pkyZIgQ7geAzwmw2k5aWRlZWFmvWrMHn83Hrrbfi9/vp6Og4aX2LxTKsyMr/NSRJorKyEpvNRkxMzDBvU51OR3p6OvPnz8fj8fDiiy9SUlIiF64ZDQKBAJIkcf311wPHn4+Dg4McPXoUk8nEj3/8Yw4cOIBSqSQ1NVVeP0hoaCihoaGMHz8eSZIoLS3F4XDQ398/Kvadyfbe3l6MRiOzZs2isLCQnTt38sgjj8h5OauqqnC5XGRnZ5Oamgr8N63AsWPH2LZtG9/61reQJImHHnqIsrIyUlNTL0m10vb2dhISEpg7dy7jxo3jyJEjfP3rX+cHP/gBXq+X8vJyOjs7ueaaa2TP76DtHo+Hnp4eli5dSmhoKIODg7hcLmpqauTiSxeTjo4O8vPzmTlzJgkJCRiNRrZv386sWbPw+XzU1NRQVVXF/fffLwuNQ/uNz+djzZo1TJ8+nZSUlItu79Dj+3w+kpKSSE1NZdasWSxbtoyqqiq2b99Obm4u3/3ud3G5XNx8881UVlYSGhoqe16GhITIlVaDIcyXoq8E7ff5fISHh7NgwQLmzZvHggULqKyslD11g2HKwfQSQyvCwvE+FywelpaWNip2CcFOIBAIBF9Y3nrrrVOG5wkEAoHgs2ekwjOCkQmKPWPGjOH666/n4Ycf5sEHHxwxHHbo4P7EPJcjLT/VepczwUH/P/7xD3Jzc7n22muHLQv+GwgECAQCDA4OnlP18LPB4/HQ1tZGQkKCXJwlIiJCLraSnJxMUlISb7/9NpIkyRXRXS4XOp2O7u5ufD4fiYmJsq3Bqr0XG6VSSWRkJE6nE7/fL+f2ioqKkr3OWltbSUtLo7CwUM6953K50Gq12O122tvbiYiIQKFQcMUVVxATE3NOBZ8uhJiYGPbv34/H40Gr1RIRESF7j27atAmVSsXEiRNloVShUODxeGQPtejoaKxWK2azmdDQUHQ63SXLAxcdHY3P58PpdKJWq4mKiqK+vp5AIMCnn36K3+/nzjvvRK/Xy3056J2mVCppaWnh8OHDrFix4pJ61/l8PmprawkLCyMmJgY4Xs0+NzeXdevW4XK5iIqKwuPxMH/+fLmAVdBjMyMjg3/+8594vV6sVisKheKSTSb4fD5aWlpQKBSkpKQgSRKRkZGMGTOG0NBQDh06xN/+9jdeffVVOWWAz+cjEAjIIdYvvvgiM2bMGJZ38EIRgp1AIBAIvrDk5eWNSn4JgUAgEFwcBgYGPmsTPjds3boVhULB4sWLyc/Pp6CgQC7CU15ezs6dOwkJCaGuro6tW7dSV1dHdHQ0e/fupaioaNi+urq6OHz4MGVlZXz88cfk5eWRmJj4uctj99prr2EwGEhKShpme2VlJc3NzXR2dvLrX/+a2tparr76ahYuXDhq3nVwPNRYq9XyxBNPMHv2bHp6eoiKiuKJJ55AkiQOHz7M9u3bSU5OZvr06SQlJREIBLjnnnv48pe/TF9fHz09PURERDAwMEBYWBgzZsy4JCKMQqHAYrFw7bXXcvjwYaqrq3G5XFx33XW0tbXx5S9/GZVKhVqtxu/3o1AoeOedd7j77rv54Q9/SFxcHJmZmbz00kskJyfj8/nIzc29JAKMQqHgyiuv5KOPPqKyspK+vj6OHTvGj3/8Yz766COee+45rFYrISEh+P1+QkND+de//sXDDz/MtGnTWLlyJY899hh//etfmTlzJl1dXeTm5p5Urfticdddd/Hmm2+ybds2+vr62LJlC9/61rd44YUX2Lp1K93d3Tz33HP4fD4WLFjAVVddxc6dO9HpdNx333185zvf4c4777zkRXvUajWvv/46Op2OrKws3G43d955J/Hx8UyePJmOjg5effVVoqOj0el0TJs2jS1btlBbW0tUVBQ33XQTf/jDH9ixYwednZ0YjUbuuuuuS2b72rVrqampkT1hb7nlFjIyMjhw4AC7d+8mPz9/WBX0VatWsWfPHu666y6USiUHDhzguuuuIzExcdTsUkjnUstdIBAIBIL/A9hsNkJDQ7FarZfM1V4gEAgE5454Xp+ZYBsdOnSI2NhYzGYzGo2Guro60tPTkSSJvr4+7HY7SqWSuLg4BgYG6O7uxmAwEBUVdVKxD4/Hw8DAAB0dHYSEhBATE4NWqz3vgjOfBZIk0d3djdfrxWQyDes//f39dHd3A8fzxPn9frRaLVFRUaOaMyuYl6uurk6ujm02mwkJCUGj0dDc3IxGo8FgMMj51iRJoq6ujqioKPx+P3a7HZvNhtlsxmQyERoaesk8vSRJoqOjA7vdDhwvPGI0GjGZTNTW1g6rZuv3+8nKyqKhoYG4uDg0Gg19fX309/ej0+kwGo2EhYVdkgq3QYmjublZ9tLV6/VERETg8Xjo6OhAkiSUSqXsXZednU1jYyMhISGyQBoMI9fr9XJ48qXwMvV4PHR2duJwOAAwGAzEx8fT3t4uV/1WKpX4/X5MJhPh4eE4HA4UCoXsjRcdHS1XLb2UNDU1Ybfb5SrfWq0Wi8VCf38/VqtV9sAMCQkhOjqagYEB3G43arWasLAwGhoacLvd6HQ6zGYzFovlkk0UdHR00NfXh8/nk0VFs9nM4OCgfC2GhkT39vbicDiIjIxEkiTa2trkkNnTcS7vNSHYCQQCgeALhxgACgQXj7a2NuLi4j5XoXOCyxfxvD4zwTbq7+8f1kZ+v3/EwfrQvEvB/z9RiJMkSQ6BHRoK+3m6r08c5g61PSjSnOr8R9sOr9eL0+nEaDTKVWolSWJwcBCDwTDs+EPtVigU8rZ6vR6NRvOZXIPBwUEkSUKtVsviyYkh0oFAYNh5KBQKOdQYjgujl1rwlSRJzrcXrDp6Yt6xU9kuSRJutxuPx4PBYLigSu7ng9/vx+PxyILz0P4atH2kcwn+PhoFD86HQCCAy+XC7/fLVVaDeDweuRJysBrsUILnY7fb5Wrkl7LPBAIBvF4vLpcLs9kst+GJ9+SJ9p7Imdr9XN5rIiRWIBAIBILLGKfTydtvv83WrVvlilljxowhOzub7du3M2HCBHp7e8nKymLJkiUX/EE5MDDAxx9/TG1tLU888QRw/MPp448/prW1la997WsnbeNyuaisrKSnp4cpU6ac5KkxGrS2tvLhhx8SExPDihUrGBgY4OGHH5YHPnq9ngceeIBJkybJlby2b9+OSqUiMjKSmTNnjvqHq9Pp5IUXXqCuro6JEydy5513otFo2Lt3L3a7ndbWVq677jo5vMrr9VJbW0tpaSkGg4G0tDTy8/NH1aahBAIBdu3axT/+8Q/CwsK48cYbyc7OZuvWraxdu5bExESuu+46srOzAaipqeEf//gHx44dAyAkJITbb7/9pMp/Z2Lbtm3cdNNNZ9Xe3d3dfPe735W9BK6++mqSkpL4zW9+g9/vJz4+nhUrVjBt2jQA1qxZw5o1a+QBYH5+vhxuM5q0tLTwox/9iEAgQGhoKMuXLyc3N5eSkhL8fj8JCQlMnDhx2Ky/0+lk3759GI3GkyrIjSY2m42DBw9iNBopLCykvb2djz76iLi4OK655pph627fvp1169ah1Wq57rrrGDt27EX3VLDb7ZSXl6NQKCgoKMBqtbJx40bCw8OZOXMmoaGhw9YPBAJs27YNpVLJtGnTPnchl5cTJw7QT+WFNXSdU92nQ/f1eRLphnI6u4MiwKU4N4VCIYsPJ/4+kifOiTZpNJpLLhadyEjPsxPtHEkcViqVn2nqkaAwdOJvJzKS7cFvi6EhkJcSlUqFwWAYlmv5RNtPd/9+ViiVylO+/0a6D4YStPuzmpxRKpXodLqTKmV/lu18VoJdIBCgtbVVVhkFAoFAcPkiSRJ2u52EhITPVeiKYGSCYSZf+9rXCAQCHDt2DJVKRUhICC0tLTzyyCPs27eP4uJi8vLyyMzMvKDjVVZWEh8fz0svvSQLdlVVVURHR/P3v//9JMHO5XJRWlpKfX09CxYsuGhFPI4dO4YkSZSXl7NixQokSWLs2LFcc801OJ1O3nvvPdLT04HjgsauXbtQqVQkJydTXl5OSkrKqFdKO3jwIFlZWcydO5df/epXmM1m5s+fz8aNG7nvvvuw2Wy88847PPzww8Dx0JxPP/2UBQsW0NTURElJCbm5uRctXCUQCLBv3z7uvfde9u3bx/e//33efPNN6urquP3229myZQvPP/88f/jDH1AoFLjdbsaMGcOyZcvo7e2lrq7uvAZawQpvZ4NKpSI7O5tly5ahUCiIiYnBarVSVFTEjBkz0Gq1w8JPNBoNy5YtIzU1lV27dpGQkDCqCeKDqNVq8vPzWbhwoZyjac+ePQQCAXJycjh48CCSJDF9+nQA3G43a9euJS4ujoyMjJM+9keL3t5eduzYISfCdjqdOBwOuru75XCdID6fj/b2dhYsWMCRI0d47bXX+Pa3vz2quXVOxG63s3//ftxuN9OmTUOpVGKz2WhpacHlcuF2u0/a5u9//zuZmZlkZmZesjA/gUAgEAg+D5zVW7G1tZXk5OSLbYtAIBAIRpGmpiaSkpI+azMEF4hWq2Xx4sWkpqbS3d1NSUkJK1eu5PDhw2g0GoxGIx6Ph/DwcKKioi74eNnZ2fT39+NyueTfcnJy6OjoGPYbHBcTg55vX/3qVy9qXp3JkyfT1tY2LJ/MHXfcQWJiIiUlJcyePZuwsDDZro6ODqqqqrjxxhsB5GWjSVpaGuPGjUOv15Ofn09vby/FxcWEhYURGxtLfn4+Tz/9tCzY+f1+6uvrKS4uJi0tDbPZfFFFdaVSyfLly0lLSyM0NJRXXnmFkJAQli1bRkJCAk6nk0OHDsnrJyUlER0dTVRUFNu3byctLe2iJwcPzsQ3NzcTHx9PdHQ0g4ODKJVK2tvbSU9PH3btgl5tWq2Wo0ePkp2dfVG8N1QqFXq9ntbWVhISEtBqtVRXV1NYWEhCQgJbt26lurpaFuz+85//oFQqGTNmDBaL5aKIsG63m4qKCmpqapg3bx4hISFIkkRqaipRUVHYbLZh6ysUCubMmYPJZCIiIoLKykq5iuDFIBAIUFpaSmlpKXfeeac80Z+amkpcXBw+n+8kIXfTpk04nU5SU1OJjIwUk0wXSDCMFUYOkRstLkcHjpHO78RQtjP9PnT5xbRrpGOda8jdietdDM6mz1yMcMHR4nz6/Ei2ner8LiZnuu6ns+mzbvcz2XEil0ubn+r4p+JMfX207D6rr+pgaEtDQwMWi2VYLoNgeWm32y3H3wdLigdfuoFAQC6nHDT8fF7IgUCAgYGBYbHQJ+ZgCMb5+/3+U87yD83JEPw7GGOvVCppbm5m586dFBUV8c9//pMlS5Ywbty4k/Yx0n7h+Izmvn37aGxsJDw8nDFjxpCRkSEnhxwp9nyoy/lIL9uh+RWGLh+6zanaNLhuMFeDQqHA7/fjdDoxmUxs2rQJgMzMTN59911WrlxJUlKS3CYHDhygsrKSsLAwxo8fL5cRH2rLSDHyQ8ulB+2TJAmXy4VarZYHdafr7EP70KnWPZNr8Il2BG0NzvIGZ8GH2niqnB0j7WvosqH/jmTH0O2D90own8WJ9p+4vxPvqZGOGbwXtVrtKQfNkiTh8XjkXA5DjzXScYfaFMxJoNPpRgyTGOnB5PP5GBwclJ8jpzvWif3Y4/Hg8/kwGAwn5ckI/r/b7Wbr1q1MnjyZ8PDwk+5nt9tNc3MzcXFxmEwmOR9FMDzhVPec1+uV2+jZZ59l5cqVVFZW0tvby0033YRSqWT//v2EhISQl5c3YlvD8RApSZJOOoeRzn1onoSRXlTBdYbmpBnpHrTZbKSkpFyUsETBpSfoJeZ0OikpKSEvL0++tp2dnXzyySfU1tYSFhaGx+O54OOZTKZhVRmDITsjPVPcbjfl5eUcPHiQF198kdbWVh544IGLUkXtRC9/jUZDUlISTqeTjRs38vjjj8vLzWYzU6dOZd26dTz11FNce+21FyXMLiYmBqVSic/no7W1lXvuuYfVq1fLSanNZvMwESUpKYk5c+bwv//7v8TExPDwww9f1A/RoFji9/uprq5m5cqVcrs5HA6sVivLli2T1zeZTJhMJhoaGhgYGCA7O/uieYoF8fl8ctL1v//971x//fXk5eXR1tZGT08PH3zwAbfddhtz5swBkCveffLJJyQkJJCcnHxRRB6v10tzczOBQIB3332XWbNmoVAoWL16NV1dXRw5coS5c+cCx9+N+/fvx+VysXnzZvR6PY899tioe3Ta7Xa2b99ObW0tTz31FGq1mm9961vExsbKoeFDUSqVREVFoVAoqKioYNGiRRe1YqDdbqeiooLi4mIaGhrQaDR86UtfIicnB41Gg8/nO2mbjz76CJVKxf/7f/+PxsZGXnzxRSIjIy9LQejzwKOPPkpycjLz5s1jyZIlw5b961//YsOGDahUKr71rW+xYcMG/v3vf5OUlERBQQGdnZ1YrVYefPBB/vGPf2Cz2QgLC2Pv3r1kZWURGxuLx+Nh3LhxXHfddZ/RGY6MJB2vtvrmm2/S0tJCfHw81157LXPmzGFwcJDNmzfT2dmJJEloNBruvPNOXnnlFTZs2IDFYmHs2LHU19cTGRnJo48+OqoTPIFAgP7+fpYuXSrnn5MkiejoaB599FEWLVqEQqHg9ddfZ2BggGuvvXbYs2Pz5s2sWbOGHTt2yM+6iIgIvvSlL8kTUhcTp9PJsmXL8Hg88jhJq9Xyve99jwULFqDValm/fj27d+/mzjvvJD09Xb5/W1pa2LlzJ2+88QZGo5HbbruNadOmjXoKg5EIBALs3LmTX/7yl/T29g4bx7322musWrWK0tJSAoEAkydP5tFHHz1lGOfbb7+NUqlk7NixTJgw4aLbDvDyyy/z8ccf09bWJrdnXFwcf/zjH4mJiaG7u5vDhw+zdetWfvzjHw+bJHI4HLzyyiusW7eOxMREFi1axOzZs+Ux/KWitbWVjz76SK40HAgEKCsro7S0VL4WK1euHLHdbTYbr7zyClqtlkcfffSS2g3H08O8++67hIaGsmjRInQ6HXV1dWzatInKykqeffbZk0Kl/X4/69ev58MPP6SoqIh77713VGw5K8Eu2EnCwsI+82SvF2OG/ERUKhVerxePx8Py5cvl2fOzRZIklixZgt/vp6enB71e/5m32+koKiqivb0dl8vFypUr5Q8rOH4u8+fPl8uQm83mERNECs6f0Swdf7kSERFxUfcf/GAYKSzK7/cTHh4+4mDmbLnhhhvwer2kpaVxxRVXyMJgbm4ucXFxpx0sfhb3/uc954xgOEExNuhd981vflO+tpGRkSxZsoSamho++OADtmzZwk033XTJbHO73TQ1NXHFFVdw5513sn79etasWXNRBLuhDJ1EWLVqFXPmzBl2/1utViorK3nwwQcJBAKsX7+enTt3smDBglG1I5i8+tVXX+VLX/oSCQkJqNVqeVIgGLocpLW1lfr6en73u9+xa9cu1q9fT25u7kXzhA32nebmZg4fPsyDDz6IQqHA5/NRV1dHV1cXK1euHDaZ6vV6OXr0KH6/n9TU1Iv+HAkLC+Pb3/42fr8fvV7Prl27WL58OY8//jhWq5VVq1ZRVlYmC3bBidXe3l7S09MvWgh2dHQ0TzzxBG63G71eT11dHV/+8pcpKSmhv7+fzMxM+br19fXhdruZNWsWM2fO5IknnqChoYHExMRR9bQbHBykra2NFStWEBcXx7p169i1axfXX3/9iOsHr//hw4dRqVQUFRVdlPDhIDabDavVyrx585g7dy7//Oc/2b1792m9NCsqKvjWt75FTk4OP/zhD9mzZw+LFi36zPN1fV6Jj4/n0KFDKJVK5s2bJwvunZ2dlJWVUVdXx4wZM4iNjWXOnDm89957xMbGsnz5cux2O//zP//Dli1byMzMJDk5GZVKxb59+ygsLGTatGm0tLSclIPwcqG0tJQbb7wRn89HeXk5L7/8MnPmzOHNN99k7Nixsqf4X//6V5YtW0ZhYSFbt24lJiaG66+/nr6+Pu644w5uvvlmuYLraKFSqbjqqqtYtGgRer2e0tJSqqqqKCwsBI6nVzh06NCIEyRKpZIJEyZw0003oVarqaqqoru7+5JFv0mSxOLFi5k6dSoRERE0Nzezfv16Jk2ahFqt5ujRo5SUlFBbW3vS+6K3t5e+vj6eeuopKioq+POf/4xarebqq6++JN+oDoeDBx54gLCwMPR6PX19ffz73/+mtbWVsWPHMmXKFLq6uvjoo49YvXo1K1asGDa5FwgEaGtrY8eOHWRmZpKVlXXRbQ6iUql44IEHCA8Px+v1Ul9fT2dnJzqdDr/fT1NTE1u3bqWtrW3YJH/QUcrhcPCTn/yErVu3sn//fvr6+vjKV75yyey32WxUV1ezc+dOZs+eDRyfoFEqlUyfPh29Xs8PfvAD5s6dS1JS0kl9v6SkhEOHDl3UFA6nYnBwkIaGBrZt28bcuXMJBAL09PTgcDjIzMxk9erVsjNRkEAgIEcKWK1Went7R82ec4pbOdHr4/8qISEh5Ofn4/V60Wq1w6rJnAsqlYqYmBhgdN3QR5v4+HgiIyPx+/3odLphXoBB1Go1sbGx8t+X8/kIvngMDYM7EaVSeZJH7rkyceJE3G43SqUSrVYr7yc4Q3i53Q+Xmz2CC8dut/Pmm2+yePHiYR81arUas9ksVz67VImRg971cNybrbe3l7i4OJKTk6mpqblkNjQ3N7N7925uv/12+Tev14vNZqO8vJzHHnsMn89HZ2cndrv9otjwwQcfyB/+SqWS9PR0tm3bht/vp7+/n5ycHAKBAH6/H7vdTltbG+PHj8fr9eL1ekfM6TWa9nV3d7N27Vruv/9+zGYzfr+f5uZmDh48yC233EJISIhsn0ajYf/+/TQ3N7Nw4cKLnk/M5/PR0tJCamoqg4ODxMbG0tPTQ09PD/Hx8QQCAZKSkjAYDPj9fgDZyy05OZm0tLSLMujzer20t7eTnJyM3W6XJ2ZSU1OJiYlh48aN6HQ6Jk+ejM/nkwd4Op2OuLg4QkNDL4rgpFKp5DDq+Ph42eNpJHw+HwqFgqamJurr62WR5mKGnGo0GjnaJjk5mejo6BG96uB4GwfPR61WExkZSWJi4kmDIMG5ER0djcViwW63U1paKk+elJeX4/F4iIuLIyQkBJ1OJ/cHo9Eoe906nU5UKhVjx44lLS2N3t5eNBoNkZGRJCcnExYWdtmGLWdlZTF27Fg8Hg9Wq1V+fhUXFzNp0iSSk5PlCJWGhgbCwsLkPhsZGUlvb698747mOQYjOoKil9VqZWBgAJ1OR2RkJG63m56eHpxO57AIliAJCQlEREQwduxYlEollZWVTJ48mdTU1FGz8XSo1WoWLFhAfn6+3H4TJkwgMjISj8dDX18fDofjpEgYOP59np+fz8SJE4mIiOCFF14Y5sF/MVEoFMTFxcnPZJvNhtPpZMmSJURFRZGSkkJYWBiNjY0UFxfLHphDCQQCVFZWypVKL+X3dV5eHmPGjCEyMpL+/n7q6uq48sorMRgMtLa20tvbi8VioaGh4aRtNRoNRUVFTJo0if7+ftnD9FLS1dVFW1sbRqNRbrcjR46QkpJCamoqSqUStVpNS0sLkZGRwyLe2tra5OiF0YgcOVfsdjv19fWy7ZIkYTQaiY6ORqVSyRWThxKMRjGZTKjV6lO++86Hc/oSKykp+UyrvAgEAoHgzFyqj6H/CyxcuJAXX3xRHtRIkkRnZyf3338/y5Yt44orruCNN95gcHCQcePG0dnZSXJyMlqtlsbGRlpaWvD7/aSnpxMVFcXixYtHPQzO5/Nx+PBhSktL+c53vgMcDxfv6uri6NGjvPjii3R0dFBQUMD8+fMv+Hi9vb28//771NfXs2nTJubPn093dzcffPABtbW1bNu2jUmTJvH6668THh7OlClT2Lt3L5s2baK6uvqihejU1NSwceNGWlpaKCsrY8yYMfzsZz/jpptukgWTzs5O/ud//ofbb7+drKwsXn/9dTIyMgBkD63RZM2aNXz3u98lMTFRDnF6+eWXeeutt9i8eTMVFRXccccdHDt2jGeffZYf/ehHmEwm/vGPfxAIBEhLS7togy5JknA4HNx+++0MDg6yatUqdDodt9xyC2+99RYul4tXXnmFxMREZs2aRU9PD9deey379+8HuCTeG8G+/fHHH8ti4g033MCuXbvo7++XhZw5c+bw6quvAjB27Fi6urqYOnXqRasm6vF4KCkp4aOPPpLTsNx00010dXWxbds2VCoVS5cuRafT8fvf/56YmBimTJlCW1sb77//Pjk5OSQmJo66sBEZGcncuXPZsmULbrcbp9PJNddcQ319Pfv27aOnp4dDhw4RGhrKP/7xD7Kzs1m7di1HjhxBp9Ph9Xr55S9/ybRp0y6KoBgdHU1ubi7btm1j3bp1AMyePZvGxkZKSkro7OwkPT0dk8nEt7/9be6//37uuusutm/fzsDAAB6Ph+nTp4vCExeA0Whk3LhxuN1uNmzYwKRJk/D5fNTW1mIwGOTnIQxPAWKz2eju7iY0NJTc3FwyMjIIDQ2VQwmD6wYdES5Hpk6dKhc4CYb0AzQ2NsqVH7VaLQkJCTQ1NWGxWPD7/QwMDNDU1MThw4fJz88f9UgihUKBTqdj/PjxqNVqampqcLlc5OXloVQqaW1txWg0YjKZRhTskpKSZKGsp6eH5uZm5syZc8muhVqtlqPNjh07Jk86KZVKOjo6UKlUmEwm9Hr9SbbHx8cTFRWFUqkkNDSUjIyMSxp5kpaWhslkIhAI0NnZydGjR7npppvQ6/Xy5EJ3dzexsbEnRcz4fD76+/ux2WwkJiZeNG/uU1FQUIDBYMDtdsvi1x133IHX66WlpUUuEnXkyJGTtjUYDMyaNQu1Wk1oaCgJCQmX1GvZbrdjtVrlSbcgHR0dREZGYjQacbvdJCcn09HRgdPpJCwsTJ4MrqmpISEhQU7FdikZHBykv79fzq06NAzdaDTidDpH3E6pVBIdHQ0gh76PFuf0RrwcSkoLBAKB4PSI5/S58dxzz/Huu+8CxwfqH374IR0dHUycOJGUlBRycnJobm7m3nvv5eOPP+aNN97gq1/9Ktdccw0vvfQSPp+PRx99lMbGxosiIKhUKqZNm0ZhYaE8kA1Wypw3b578YaBWq0fl+BaLhXvuuYfbbrtN9tgLDw/n/vvv5+6770av16PX67n33nvlGdIf/ehH2O12pk2bdtEm9lJSUvh//+//Acc9mTQaDc8///yw3CfR0dE8/fTT6PV6CgoK6OnpQZIkYmJiLkoutiuvvJJdu3ahVqvl/L2hoaH8/ve/p7u7m6KiInmG9ve//z1Go5FHHnmE/v5+jEYjYWFhF1WcCAkJ4d1330WpVMq5PfV6Pdddd538ERr0/pAkCZ1Ox5gxY+Rw3ouNTqdj4cKFdHZ2otVqiYiIQKPREBUVRW9vL0ajUfZ4ueOOO4Dj98OECRNGHNiOFkajkUWLFtHV1YVOpyM8PBytVotGo2HBggWYzWb5ORsMM1YqlfT09OD3+1m0aBEhISGjbp9Op2POnDkUFBTgcrm48sor0ev1BAIBnnnmGTlfqkql4rHHHkOpVDJ//nx5sO/3++XZ/4uBUqlk1qxZjB07FrfbTUREBAaDgUAgwI9//GO5j2k0mmH5fyZPnozdbueKK64QjgGjwBVXXEFdXR2vvfYajz/+ON3d3ZhMJkJCQk6qJAzHqzofOXKEQ4cOsWzZMqZOnXrRc1eONsFnVklJCZ988glNTU2MGzcOn8+Hw+GQPXSDaQqC+YVdLhc1NTXs3r2bzs5OnE6nnLtvtNogaJvZbMblclFWVkZERASFhYV4vV62bt3K8uXLiYyMxOFwyDmUg0JpMAey0+lkw4YNTJ8+/ZIJGUHbTSYTbreburo6WlpauPrqq+UccTNmzCA5OZnq6mq8Xu+wnNAajQa1Wo3f72fnzp0sXryYrKysS2Z7MHy7u7ub3t5edDrdsOJcXq8Xq9VKZ2cnjz/+uPxslCQJq9XK3r17mTRpEtXV1fj9fvm/S/F+tFgsSJJEXV0dZWVlch7V1tZW4Pj7fWBggEAggM/nQ6VSye8ipVKJSqXC7/dz8OBBYmNjL3qqEvhvhM/hw4fR6/VkZWVRX18vt5vT6ZQ95hQKhdyvgvdnsJ83NDSQn58ve9d7vd5LMraRJImqqioGBgYoKCigsrISn89HIBD4TL2/z+mNPX78+Ms6F5tAIBAIOKlSoODULFmyhP/85z+UlZUxduxYfD4fDQ0NpKSkyCkRNBoNKpVKHmjGx8czadIkTCaTLJYZDAZyc3Mv2kfoSBNmOp1OHlCM5nFVKhVGo3GYEHbib8FzhuMfOJGRkURERIxYcGe0GKkNThy0BEMSgoOMYO6Ti2VXULw8EYvFIhfJCCa6NplM8gAiaPfFLjghSdKIOURP5ylwKQYiQRQKBXq9XvbmC4qIQXFhaBsNbeeL/eEe7N/JycnDrqHBYMBgMAy7bkG7FAqFnDrkYl3b4AA4NjZ2WLGhYIGToQSv8aUUXoITBzExMcPsUyqVJwlxwb8VCgVRUVFyoQmRe/XCiYqKQqvVysXkurq6uOWWW6ioqODAgQMnrR8dHc2MGTOYMWPGZ2Dt6LJgwQIWLFjA7t27+cEPfsDUqVOHiUiSJOHz+QgPD0epVBISEsKYMWO455578Hq9XHPNNXzwwQdcd911sofeaPK3v/2N1NRU8vLycDqdlJaWsnPnTjo7O9m1axcul4vQ0FDuuuuuYamIfD4fvb29bNq0ieeff/4zEVT/9a9/odPpmD9/viwE7dy5k5qaGqqrqzl27BhvvvkmDz30EDExMfK7JFhYaM+ePXzta1+7qIVvTsXHH3+Mw+HgnnvuGfb7tm3baGxs5JFHHhn2DPV4PNTX1/PWW28xZcoUduzYIYdCWiwW8vPzL4ndTqeT6upqysvLWbFiBQqFgr/85S9yCqumpiYqKipYvXo1ixcvPkmn2bhxI5GRkRQUFJCenn5JbB4YGGDNmjX4fD50Oh0HDx7EZDKRk5Nz0vjE6/UOSyHR29vLm2++icPh4LXXXuPAgQMoFArefvvtk67dxcDhcLB161aOHTtGYmIiu3btwmQykZCQwJQpUz6z/J3nJNi988473H///SiVSgYGBvjNb37D9ddfz4EDB7BYLLjdbhISEujo6KCzs5OoqCj55hjNsIDKykpWrVolz9QVFRVx+PBhYmNjSU9PH+aFMBJHjx7l008/JSwsjJtuuon9+/dz4MABlixZIqv+Bw4cYP369bjdbu6///5RqWbT2NjIv//9b0JDQ5kzZw6bNm2ipaUFSZK45ZZb5KS8NTU19Pf3M3ny5As+5ukI3lA9PT2sWLECr9fLmjVrSE5OZuHChej1enw+H8XFxfj9fsaMGTPqVX2sVivbtm0jISGBSZMmUV5ejt1ux2AwMH78eAYHB3n11Vfp6+tDr9czf/78i9Iu27Zto7i4mMmTJzN9+nRKSkqw2WwsXboUhULB4OAgq1evpqmpiRtuuOGiPPQGBgZYtWoVdrudFStWyHH9ra2tXH311SiVSvr6+mhubqa1tZXZs2efsprRuRDMFfDee++RnJzMokWLeP/992lpaSExMZEbb7wRk8k0rI3mzZv3mX9UDw4OsmvXLsrLy7n++uvx+/188MEHZGZmsmDBAkJCQrBarXzwwQc0NTUxZcqUS5KT6VwZHBzkww8/pLW1lRtuuAFJkti0aRNRUVFcddVVsr19fX2Ul5dTWFh4UZOGf9HQ6XQ88sgj/PrXv+ZPf/oTmzZt4sorr6SysnLYev39/Xz44Yd0d3fzta99TRZfhnKxhI6R7rWLLfScz/oX+5lwNvs/Ubz7LG060ZZLaddIx71cGak9TvXbpeREG051/KG/X4rcXiPdb5fTdT4f+4RQN3oEhans7GxuuOEGnnrqKW677TYMBsNphe7Pc/sHRbiamhpSU1MxGAxotVqio6MZO3YsMTExcgi51+ulp6eHcePG4fV65X0Ez39wcJCkpKRR9/QMBAK0t7dz6NAhCgsLSUhIQJIkkpKSuOOOO1Cr1TQ0NOB0OsnPzyckJASPxyPn06uqqmLVqlXcfvvtox5udyYkSaK9vZ0jR44wefJkMjIyUCqVJCQkcOutt8rr9Pf3M2HCBEwmk5y/K1hB/d///jff/OY3P5MQx61bt8oaxdDJqo0bN+Lz+ZgyZQqZmZnDQsSD1+b+++9Ho9FQX1+PRqMhJSVlmIfexWbVqlW4XC6uuuoq2b4VK1bgdrvp7+8nJCSE5uZmuaK7z+eTc65VVFTQ09PD3LlziY6OvmTtrlarueGGG3A6nXR0dNDT00N4eDjx8fHExMSgVCqx2WzodDo6OjrIzs7GZDLh9/sxGo0sXLiQ/v5+FAoF+/fvR6FQMG7cuEtiu0qlYv78+UyYMEH29IuIiCAxMfGUY+5gm1/MicRz+rL45JNPOHbsGJIkyRXXsrKyaG9vJyIigkmTJvHnP/+ZwsJCenp6SEhIYOLEiaPeQQwGA/PmzWP58uUkJiZisVjkqhw7d+7E5XKddnu73c7ixYs5cuQI+/btw2QyMWHCBLZv3y4/YFQqFfPmzeO+++4btRuzvr6e5cuX4/F4+PjjjyksLOS+++7DZDKRnJyM9P/Ze+/wuMoz/f8zfUYa9VHvvVgucu8Fd4OBYIzBhBIMgSXJhiUJyW7IphBS2BQSQllCQnFMNcUFcMe9yrItS1axepdG0oxGM9Jo6u8P/867kmwDxjOyk6/u6+JCHs3Rec573vqU+/Z6KS8v59y5cyOiQuNyuYiMjESv13PkyBHq6upYsmQJPT091NbWAhfIIa1WK1arldLSUp+ng1qtVlQqFeXl5RiNRs6cOUNiYiJ79+4FLkQ4xo0bx9e//nXi4+OJiYnx6f0lSHLrx44do6amBq1WS2Fhofh9U1MT+fn5zJs3j+eff94vNlRXVzNz5kzy8/NZv349xcXFaDQaGhoaBD/BoUOHgAtp0IPtu1pUVVWxfPlyWlpaKC0tRaPRcO+993LjjTeKxW1wGzU3N/vs3l8VNpuN2NhYcnNz2blzJw0NDaxYsYLy8nJqamqACwqxMTExPPDAA8yYMWNEM0e+LBoaGhg/fjyzZ8/mhRdeAC6Us+zZs0dsJq1WK7t37yY+Pn7ERAX+X4FMJmPt2rUcPnyYqqoqSktLL7kxCAkJYeXKlXzjG98YsXKOUYzinxXDs9BGMYpRjAxKSkooLi7GarWSm5sreA9lMhkNDQ2UlZVRUVFBW1sbhw4doq2tjfr6eioqKi76W2azmbq6OhoaGoTK5GAn1/UEuVzOW2+9xa5du9i9ezd1dXXMnz+fiIgIbrnlFkpKSti1axf19fUYDAYMBgOtra10dnZy7tw5PvjgA15++WUmT57MpEmTLpmZfDVwOp387//+L/n5+URFRaFUKlEoFERERDBu3Djgwvm0q6sLo9GIx+Phd7/7HadOnaK6uprKykoqKioEd9xI4+9//zsxMTGkpKSgVCqRyWQic0ur1WKz2eju7qa9vR23282Pf/xjCgsLOXr0KM888wy7du3i5z//OY899hjr16+/ZH/zNaSS53feeUdQKUjZ0seOHeP111/nlVde4c9//jPf//73+a//+i/6+vr44x//yLZt2wgJCWHs2LHodDq6urqEeNVICU/U19dTUlKC3W4f4hfIysoiKSkJpVJJW1sb3d3dIiPwvffe45133qG6upqnnnqKTZs28fTTT/O9732PP/zhDxiNRr/brVarycrKIj4+HplMRnt7u+gXs2fPRi6Xs3nzZkpLS0V29ZkzZ9iyZQtHjhwhJSWFjIwMLBYLJpNJiLSMBNRqNSkpKaSmpqJSqejo6KC9vR2Hw4HdbqepqYnDhw/T1tbG6dOnsVqtHDhwgL///e/U1tbidrspLCykqamJ8vJyjh8/zsDAwFX3mStKNUlLS+PQoUPExcXhcDgIDAwUXBler5ezZ8+ycuVK0tPTUSqVBAYGisHhSyQkJBATE8Mnn3zC8uXLaW5uprKykr179zJjxowvPNBOnjwZt9uNwWAgMTGRiIgIPvnkE3Jzc8WB3mazsWXLFnQ6HY8//rhPvKazZ8/G4/GIhWLChAmUlZUxefJkwfHx4YcfEhYWxrFjx5g/f77fCJXhwgF03rx5bNu2jeDgYKZNm0Z5eTmAcIydOHGC6dOnYzabxYTgS4dBbGwstbW1GI1GAgMDOXz4MGVlZSxYsEBwAc2ePZv29nYCAwOJi4vz2b0H48Ybb8RoNGIwGIiJicFisQxxTmZmZgLQ3NwsCCV9DWnBlpT6zGYz6enppKSkUFlZybhx4wgLC+PFF18kISGBRx991Gf3nj17Nk6nk5iYGLRaLW1tbTz//PNMmDBBEMgPbqORJl69FKSSj+PHjzNx4kTGjRvHwMAAsbGxolTA4/FQXl7OgQMHuOmmm5gyZcp157STMmsbGhqIjo4mMTGR8+fPiz4HsHfvXmpra/F4POj1+hGN7v2rQypze/DBB3nwwQf57W9/e9mMtpHoO1Ik+z//8z+Fk/yRRx7BZrPxwQcf4HK56Ovr48477+Tdd99l8+bNzJ07l7a2NsaPH8/Xv/71q143zGYzGzZs4OzZs7z44ot4vV5eeeUVXnjhBVEq+Mknnwh1ZpPJxLZt27BYLAQEBHDjjTf6/LAD8Ic//IEPP/yQ3NxcnnjiCVJTU3njjTfYsmULBoOBH/7wh6Snp4vvd3R0sGPHDmw2G8HBwdxxxx0+f4c2m43vf//7lJaWMm/ePH70ox8RGBgoxBTOnDnDypUrh4xZr9dLXV0dx44dIy8vT8z9/oDb7ebTTz/l2WefJTIykm9961uiKmH//v1ERUWRlpbGzJkzgQvlN9u3b+ftt98mKiqKe++99yvx3kj8UF8WAwMDnDp1itraWpYuXcrAwAB79uyhp6eHmJgYFi5cKEpRBgYGOHToEFVVVXi9XpYvX+5zoZf+/n4++ugjfv3rXwt+wmnTpvGDH/yA/fv309XVxZo1a4bc9/Dhw7z99tt0dHRw3333MX/+fJ+vlR0dHfzud79jx44dgkT/xhtvZPz48WzYsIHIyEjuuecepk6dKq7Zt28fb7/9NmazmYceeohZs2b5rZyus7OTN954g9dffx2FQoHH42Ht2rWkpqby8ccfo1AoePDBB5kyZcqQbHe3282mTZtQKpUsXbr0n44/7XpCfn4+sbGxaLVaAgMDWbVqFdnZ2chkMlJSUpg+fbqgewgMDOTmm28mOTn5kuccuVxOWFgYK1asIDMzE7VafV064qWya6mEXVJRzsrKQq1WM2/ePCoqKlCpVAQGBjJjxgzUajUhISEsXLhQUD5Iz5qQkODz4Khk0/Tp00VJqFwuF7QKkZGRzJ07F5vNJt6HwWBAq9WKMvg5c+aIdXekERMTw5gxY4SAgCSkIXHCTZo0idDQUNLS0lCpVERFRaHVasV7kRJTXC6XoBMZCchkMrKzs8nNzR1SJaZWq8nLy8Nut6NWq3G73YIXNTw8nKCgINRqNWq1GpvNxpw5c4ALSsQjFThXKpVMmDCBmJiYIaWuwcHByOVyEhISmDBhAsHBwYSFhaFQKISQilqtJjMzk5CQEMFxFxIS4vd9rLRXDg4OxuPxkJycLNbCoKAgJk+eTGNjI2azGY/Hw6xZswQFhl6vFz9LfX7x4sXI5fIRK6OW+BplMhlxcXEsWLBAqEirVCrUajUxMTGsWrVKiNMEBgYKPmKJE3jRokWiD/kCV+Swy8zMpLe3l3fffZfly5ezceNG8Tur1crMmTOJjo4ekTT9kpISodahUCjIycnh1ltv5dVXX2XixImEhYVd9lpJonn8+PEkJiZiMpmIj4/nnXfeYcKECajVasaOHcuECRP4/e9/T0lJCdOmTbtqm6XolkwmY9asWZjNZgoLC1m9erUou3Q6nWRmZoqS3cGbLn+gq6uLgIAA8vLy8Hg8KBQKzGYzp06d4oYbbsDtduNwOMTG0J9RHZvNxsKFC7Hb7bz77rvMmjULtVpNX18fH374Iffdd5/f+pPL5aKuro6CggIiIiIuqrGXyWSYTCaOHj3qU0fZ8HsYjUbKysq466672Lt3Lx6PB7lcLtJwVSoVN998MwcOHGDnzp2sXr3aJ/eVFHkSEhLIyckhMTERj8fDX//6V1pbW0lMTLyoja41PB4PAwMDpKam8ve//53f//73VFZWkpubS2pqKl6vl+DgYO6//36qqqrYt28f48ePvy6cjYMh9a0TJ07w0EMP4XA40Gg0nD9/nurqavLz8+nt7RUcD6+88go/+tGPrrXZ/zLYvXs3a9as4YEHHuDw4cNMnz6dI0eOUFZWxo4dO3C5XOzZswe73U5NTc0Qhb2amhrOnDmDzWajvLycMWPG+GSO2rNnD8888wwKhYIlS5Zw0003UVRURGhoKNOmTeP111/nzJkz5Ofnc/jwYb7zne9w6NAhdu3axfnz56+aW6W0tJS5c+fy7rvvis8k1Uxpwy1tQpxOJ+fPn6eqqorvfve7HD58mD179nD77bdflQ3DMTAwgN1uZ/fu3fzmN7/hhz/8IW+99Rb9/f28+eabIlL+61//GrjgdDx8+DBxcXHEx8ezbds2ioqKmDJlik/tOnz4MHfddRfjxo3jnnvu4bXXXuORRx6hqKiIo0eP8p3vfOeiayoqKti7dy+33Xab3wJAErxeLyUlJWzevJlt27bx8MMPs337dv74xz/yt7/9jaqqKl577TXGjRuHXq+npaWFsLAwXnrpJV599VUOHDhAXl6eT+gXLoeBgQFOnDhBRUUFDzzwgHDemUwm7rrrLkHHsGTJEgA+/fRTtFotX//61/nd737HuXPniI6O9qmTx+PxEBkZyZYtW4iLi6O8vJyTJ0+iUqmEI3JwppHH48FqtfLoo4/S1NTEzp07yczM9Hm1hFwuZ+rUqfzyl7/EZrNx+vRpmpubCQoK4sUXX+Qf//gH+/fvJz8/n4CAADweD729vTzxxBOUlZXxySefkJWVNUS1z5dwu91MnjyZtWvXEhYWxsGDB2ltbSU+Pp5f/vKXfPrppxw9epSkpCTBLwnwpz/9iQULFpCfn3/d0Vb8s+Gee+4Rh3uZTMYDDzwg+u38+fOZP38+cGFumD59OjNnzrysc12qQCooKBgignC94v7776ejo4OAgACCgoKEcyInJ4ekpCRRgSUFlLKzs8nJyQEutIc/nRlKpZKHHnpICAANR1pamijL9Hq9yOVyvvnNb4rfJyYmMn36dL/Z90W4//77L2t7QkKCcJZKtv/gBz8ALrRrQUHBEOEjGJkSbMmp+O1vf/uivjtu3DjGjRs3hKPU7XajVCpZt26duN7r9RIXF8eDDz7od3uHIy4ujrvuuuuSvwsICCA3N5fc3FxkMpkQwkhOThbj+amnnhJ9WhLFGsmkheDgYAoKCpg0adIQIZKkpCQhPjFp0iRkMhnjx48X13m9XtRqNePHj2fChAmixHckodPpyMjIIDs7e8i9g4ODiY+PZ8WKFaLNp0yZwpQpU0T/ysvLIz8/XzyLL3wnV7QqSiUOUsOZzWbq6+vp7OxELpcTFRWFTCbDbrfT09NDc3Mz48aN83nnMBqNlJSUMHPmTJGJZDQaMRqNxMfHf+5iLyna7Nq1i5ycHPbu3YtKpSIkJISsrCwcDgfl5eXodDocDgfJyck+y+oqKirivffeY+zYsRw9epSGhgYyMjJQq9X09vbS3NxMYmIiOp2OlJQUvzoWvF4vXV1d/OMf/0ClUuFyuXA6naSmppKcnExISAglJSWMGTOG4uJiEhMTMRgMPo+IOJ1O0Yfa2trwer1MmDCB1tZW2traUKlU7N+/n7S0NL+1h9vtZuPGjVRUVDBx4kTCw8NpbW2lo6MDi8WC3W6nvb2dnTt3otFo2L9/P/Pnz/c5j1hzczN/+9vfiIqKoqSkBLfbTVtbG62trcybN4+qqira2towGAwsWrSIrq4un9zX6/VSXFzMhx9+SEpKCoBI1c/NzaWvr4+2tjbhDJg4cSKRkZE+z2i4UnR0dFBXV0doaCiZmZmcPHmSbdu2if5rMpnIzMykvLwch8PB2LFjr8uDQHt7O2+88QYBAQHs2bOH6OhoAgICGDduHGq1mvLyciIiItDpdISHhxMVFXWtTf6Xwocffoher0ehULBhwwYUCgUzZ87kzJkz4oDy6quvXnJzmZKSwt/+9jfAt9xVa9asQaFQ0N/fz6RJkwgODmbfvn1885vfRKfTkZycLPgM4YJzqrm5maSkpCEOxa+KmTNn0t7ePuQzrVbL8ePHKS8vZ/HixWJdlMvluN1u9u3bx8yZM7HZbH7hGVUoFDz22GNCHbesrAyVSsXDDz8sIvaLFy8W3+/p6eH06dPcd999BAYGEhISQnV1tc8ddlOnThVKbvP/f8Vei8XCM888w9tvv32RsllrayuHDx8mMzNTBBYlcn5/QKFQ8Oijj6LT6Zg9ezbh4eHY7XahaKxUKkXGn0RKnZqaKjbVGo3G73uRjo4O/v73vwvFZYVCgc1mY9++fWRkZCCXy8nLyxPX1NfXiz1SamoqHR0dWK1WnzrstFqtIJhuaWmhuLiYm2++mbCwMHJycjhy5MiQ78tkMhYtWoRMJqOtrY2ZM2f6Jcs0NDSURYsWoVKpaG9vp6GhgXvuuUfYIB2apXcmk8kE99H58+eZO3euX8XjwsLCKCgoQK/Xc/r0aQYGBli5cqUQYAkODiY9PX1I22zatInw8HASExOvyzX6nw2SQqQEKbjyVeaYwX/neqtOGA5J8ORyZ7bhQkow8gI7n3e/67nvX43tUsajhGvRj4bvzy71PMPtHPz5tXo3nzdmh9s62Ebpuuup3Qc/y2DBtEtB+u61nHMGz6OXew+X6xf+6C9X9BfHjh1LeHg4arUajUbDj370IzQazUVRYrlczurVqwkJCfHLJlSr1TJz5kwRnUtOTua+++4jKiqK3Nzcz3WkyGQyIiMjWbx4sdg8wIXOs3r1ajQajUgrdbvdzJkzZ0gU8GoQHBzMihUrUCgUhIaGEh4eTkxMDAqFAqVSSWhoKAsXLqS3t5dZs2aJqI+/oNFomDRpEkqlkoCAAFH2UVBQQHh4OEajkdTUVJHqaTAYfP4+5XK5iNxJRLEej4fbbrtNpPFmZWWJskF/QCoTSElJQaFQoNPpSEhI4Otf/zoKhQKtVktwcLCIbEmlBL6GRqNh7ty5qFQqoabT399PVFQUiYmJdHd3M2XKFCHh7Ut57rCwMHHYNBgM9Pf3o9VqmTVrljhspqamkpaWJtroWiMgIAC9Xo9Wq2Xt2rWYzWbmzZsn+jNceFdSmUNCQsJ1uSFSq9XMmDFDbArCwsJwOp3MmzePpKQkOjo6mDhxIh0dHXi93hEjXv1/BdLGTYrEDt60fdE4H77p88X8KN1/3759vP7668jlcjo7OzEajWi1WjH++vr6AGhpaeGjjz4S5fo9PT1XPT4v9RxqtZrKykqqq6v57W9/y8GDB4mIiEAul5OZmcnMmTP5zne+w+zZs0V5pS8xeN7ZtGkTP/zhD0VU+ZlnnmHv3r1897vfFc4vp9OJ2WxGo9GgVCpRqVRfyG/7VSDtIVwuFyUlJfzxj3/k9OnTtLe38+STT/LZZ5/x4x//mJtvvhm4EHDcvn07cXFx/P73v2fGjBn813/9l18FS4KCgnA6nRw9epSHHnoInU6HXq/nN7/5DWq1murqalFuKpPJaG1t5aOPPuLIkSPceOON2O12v835TqeTs2fPUldXx/e//33Onj3Lj370I8aPH8/evXv5/ve/z8qVK4f0KSkyL5WimEwmwT/sKygUCkJCQnA4HLS1taFWqwkLC/tC4YnNmzfz2muvMXPmTJG55Mt9k1KpJCQkhM7OTiorK5k8ebJwEm7atInDhw+zbNky8c6ke7/33nusX7+eRYsWMXfuXL85iSUlZ5vNhslkIjAwkODgYEwmE59++imbNm1i6dKlTJw4UfSpnTt3otVq2b17NxUVFWzevPmiap1RjGIUoxjFKP5fxRWdXlNSUoZE5m644QaAIbLTcGHBnjhxog/MuzSCgoJEtM7r9RITEyM4176MElV2dvYQB9DgNE2ZTEZycjIej4fY2NjLpv9+FWRkZFy2PEKn06HT6URKrnSA9BdkMhl6vZ65c+cO+XzwvZOSkkTGm7/SaJVKJbm5ueLfkkrM4OeX+Br81R5yufySUvaJiYnivsHBwSQnJ/vl/hIkYuDBkEpi4f94Bd1ut8/LEpKTk4c8n5SyPvid++MQfjUIDg4mLy9PtEV4ePgls4ukMsVrQdL7ZRAaGsqsWbPEv6UMZmnukQIG0mFx9BDjWwxu0+H//zLX+hrSQXr+/PnMmDGDn/70p7z88stotdohvGDSWhwfH883vvENUdq4c+dOkXHjK8hkMu655x5kMhk2m42KigrKysqYNWuWyEqPj49n586dvPzyy/z1r3/lv//7v31ug9fr5dNPP2Xs2LGMHz9eqHI9+eSTrF27lmXLlrF06VLUajVyuVw46TQaDQqFwi+8WFKJz5/+9CeeeOIJ9Ho9FRUVzJ8/n5/+9KccO3aMZ599lpUrVwIXqB/kcjlPP/00J0+eZNeuXaKU3x+Q5pO6ujrOnTvHj370I0F3cODAATHHxMfHi74VGxvLo48+SlZWFrt37xa8V/6ARLWwePFi/uM//oM9e/bwxhtvcO+99zJlyhQefvhh/va3v7Fx40Yefvjhi57N33xIra2t7Nixg8cee+yy431wuczNN9/M4sWLWbVqFVOmTGHu3Lk+nyfcbjdNTU00NDRw8803i33wI488QlZWFjt37iQ5OXnImr169WpuvPFGli5dyuzZs/0iCAf/N07PnDlDU1MTd955J3Bh/br77rsZP348zz33HFlZWcyePRtAkKMXFBSIsvqVK1eOGMfVKEYxilGMYhTXM67IYWexWIQcs8fjobu7m6CgIOx2O3K5HK/Xi1KpxOVyCaeLxCPli42B1+vFarUK2V+FQoHD4cDtdguFGrlcjsfjISAg4LKLvUTaDQj7BwYGBMmh9HzSc0ikglcLl8uF1WpFLpcTFBSE2+0WUWGtVotMJsPlcuFyubDb7QQGBvr1cD64PYOCgpDL5SJqLWWR2e12bDYbcCEDLDAw0KeOD6fTKZRiAwIChOR6YGCgSOMfrK7iryi/JPcuZY9K7aLRaIS0+8DAAAMDA36VJO/t7RX9V7ofXHhuicjc6XSK7/gC0gbb4/HgdDpRq9XY7XYcDgc6nU6Qq7pcLvr7+9HpdNfFRlpSf3I4HOj1epRKpRhT0oFdeibpXfrbEf5VII1D6eDpdDrp7+8HLoy5oKAg+vv76evrE47zz+PoHMU/P06ePCmCXhEREaSlpXH+/Hlqa2uJjo6mt7eXvLw84YzxeDxivPqCE036m9LPTqeT5uZmUlJSxJqel5eHy+Wit7eXiooK0tLSiI6OZuHChezbt++qbbiUTcePH6ezs5O1a9ficrmoqqoiISGBwMBAAgICKCgoEE46rVZLTEwMTU1NYr7yRbnwcHg8Hv7xj38wd+5cMjMzRbCvpKQEmeyCip5WqxXvSK1WExwcjNVqRavViox+f0BaN1tbW9m0aROPP/44LpcLuVxOfHw8ixYtYtu2baxdu1a8Z4vFgs1mIykpCa1WS2Zmpl/L8CU6lcbGRpRKJeHh4QwMDNDU1ERmZiZpaWlMnz6djo4OwRknkWrb7XZMJhP5+flinfYVvF4vFouFw4cPD6HkkMbc4P+cTift7e2oVCrCw8NFIFLKQPW1XY2NjXzyySesWbMGuMBF3NvbS3Jysnhn0dHROBwO2tvbRT9TKpXk5+cTGhrqtwCW1+ulqamJqqoqEhMTUavVtLS0AAhRq5ycHEJDQxkYGBDk9P39/bjdbkFUP4qvjoaGBp+Ph1GMYhSjGIXvIFHIfVlckcPu6aef5plnniE4OJjq6mq++93v8utf/5qNGzeSnJyMXC6np6eHsLAwioqKhPrKv//7v/vkkOx2u3n77bfp7u5mxowZBAcH09PTQ01NDePGjWPr1q3ExsbS3t7OokWLLpk1BVBeXs6hQ4doaGjgscceo7CwkBMnTjBr1iwWLFiAXC6nurqapqYm6urquOuuu3ziHDl79iy7du1iYGCA1atXYzKZ6O/vp7W1VWyYT58+TV9fH8XFxdx3331+5Rrp6enhzTffpLGxkdWrVxMYGEhdXR1wgaA1JSWF3bt3c/DgQfr6+igoKOCOO+7wKXfbsWPH2Lt3L0FBQSxfvpwzZ85QU1PD2LFjRSnOp59+SmhoKJ2dnXzta1/zS1njwYMHOXXqFKGhoUyfPp1t27bR29vLlClTWLlypSjb+cc//sGzzz7r8/vDBR6qTZs20dHRwfjx42lvb6e0tBSLxcKiRYu47bbbOH36NEajEZPJxIIFC4YoHl0N3G43586dw2azkZuby7Zt22hsbCQpKUkcCurq6vjggw9YsWLFdVGWabFY2Lt3L0VFRSxbtoxJkyZx7tw5BgYGGDt2LAEBAZjNZvbs2YNcLicjI4MxY8ZcdzwsRqORzZs309DQILi/Dh48iM1mY+bMmdxzzz0cOXKE7du3i4yip59++hpbPQp/wev18uGHH3Lw4EFiY2MJDw/n5ptvpqKigueffx65XE53dze33HILO3bs4Pz58/zpT3+is7OTqVOnsnDhwqu2oauri/fee4/GxkZ27drFokWL+POf/8yCBQtoamri3nvvRa1W85e//IXQ0FDGjx/Pm2++SX9/P21tbaxdu9YHLTEUNTU13H333URHR/PnP/8Zl8vFCy+8wE9/+lPWrl1LY2MjP//5z2lvb+enP/0p3/72t5k6dSpbtmxh+vTpeDwev6ixbtq0if/+7/8mNjYWh8NBVFQU7777Lh999BH79+/nxIkTfPe736W8vJyf//znPP/888ydO5e33npLlOoPVoT2NWw2G6tXr8btdvPOO++g1Wr54Q9/SEZGBgcPHiQ1NZVZs2Zx4sQJNm3axMSJEyktLSUmJgaVSsWECRNITU31m30ajYbZs2ezZ88edu/eTVlZGU888QQWi4Vt27bR2tpKf38/K1as4JVXXgFgwYIFbNu2jY0bNwrOKl8psUnwer00NDTw/vvv89prr4nPu7q6KCws5MiRIyQkJGAwGPjf//1fAgMDsdlsaLVaNBoNK1eu9IuD2G63c+bMGYxGo6jYaGxsZOvWreKdSfynzzzzDOPGjeP06dNERUXh9Xq5++67fcbLfCm43W5OnjxJaWmpEMWSVKSlIPTs2bPJzMzkkUce4dFHH+XBBx/kwIEDmM1mHA4Hs2fPvi7pK/5Z0NTUdF3QloxiFKMYxSguDYn/+ctC5v0SshsWi4WQkBDuvfde1q5dy6JFi3jzzTd577332Lx5M7///e+ZOXMmCoWCjRs38t///d8899xzLFu2jOTk5M/l/bgSOJ1OmpqaqK2txW63U1VVxdq1a4VSX09PDzExMbS3t4tShEuho6MDj8fDq6++yte//nXkcjkVFRX09fWxbNkyFAoF27dvp6GhAa/Xy1133eUTx1l1dTXx8fFs3rwZj8eDxWIRiqT3338/fX19bNmyhdmzZ7Nr1y7S0tIu+wy+QH9/P0ajkaKiIpFd197eTkZGBmlpaWRmZlJVVUVSUhLFxcUEBweTmZnp0wylsrIyEhIS+Oijj4iOjmby5MlUV1dTXFzMunXraGpq4s033+Shhx7i1VdfZfXq1aJU1Zeora3F6XQKRbze3l5cLhfTpk0jIiICp9OJ0+nk4Ycf5o033vBLllZnZycKhYKzZ8/S2trKggULCAwM5JNPPmHx4sWEhITw17/+lalTpwqS+bvvvvuq7+v1eqmtreXNN9/k9ttvJykpic7OTnp6ejh8+LAoQ+rq6mLjxo1MnjzZL6TyVwqr1YrVauXkyZNCGWnLli3ceuutpKamolQqqaqq4qOPPuLmm29m//793HPPPddd9L6trQ2dTkdPTw9//OMf+fGPf4xGo2HPnj3MmjULg8FAV1eX6BsRERFDCNgvBWnO7unp8avT/58Z13Mbeb1e6uvriYyMFAESr9dLX1+fUDWXPpP+70tHtKQmJm0oFAoFTqeThoYGkpOTL8qwlRQyzWYzsbGxfsnA9Xg8QskcGCJO0N3dLUr6B1NcSHb19fX5jRNL2nBJVQaSypzL5aKpqYmYmBhBdyHZJfHryWQyDAaDz20aDKlsdLhSXG9v75BMq8H2WSwW+vv7CQsL+8qOsJdffpl169Z9qX7p9XrF/kPKsPJ4PPT09AgeV0kcQ7Kxr6+P3t5egoOD/eacGExPIEFqv0uVzw8MDNDd3U1ISIjPRakG2yRh8L17e3vp6+sb8s6k7w4MDNDV1UV4ePiIOHIu1W5WqxWbzTbkfQ1+n729vWL+uJSz7nqer68XSG303nvvXXf7nFGMYhSjGMX/QdobrVix4kuta1cUwsrJyaGqqoqAgABycnKG8MF0dXURExPDo48+OiQV25cqWUqlkqCgIJqamlAoFBiNRjweD2FhYfT29iKXy9HpdCiVSpqbmy/7dyQVzt7eXrq7u0lKSqK7u5uWlhY8Ho8g9bVYLJw7d44bb7zRJxuE9PR07HY7fX19LFq0iIMHD3Lu3DlMJhNerxebzcbAwAByuRyDwUBPT89V3/PzoNPpiIqKQq1Wk56ejsVi4dSpU7S3t4sDYXp6Ou3t7XR2dgq+MF8iJycHo9GITqdjypQpOJ1OWlpaaG9vx+v1CpGT999/n4aGBlGm5WskJyeze/duuru7UalUxMXFUVNTw6uvvsr3v/99QaTsz3JKg8FAS0sLTU1NWK1WIiMjOXToEBkZGYIQPDU1lYMHD2KxWEhISPDZvY8dO0ZfXx/79u1j8uTJZGZmcvbsWcxmMzabTQiPXE/Q6/X09fVhNpvp7u6mvb2d/v5+tm/fzsKFC8nNzRVz0datW8VB63qDxE148OBB7rrrLgwGAydPniQ2NlaUvkZERFBfX4/FYrls5vAo/nUgCeEM/ywwMHCII8CfvJ4SpMOzWq2+LAerXC4nODjYrwfp4cqHklNQ4rSVMLhNRsKu4aIjko0qlWpIZtpgu1QqlU9Kl78MZDLZEAeqZN/wvdlg+/zdZsMhCb4MVh6Xy+WEhYUNKf8fbOOlFB/9YdfwMfZ5paRardav2WuSTZfC8HEw+LtardZn4mlfBpdqN71ef1GZ5uDvXMr+UXw1LFmyZNSpOYpRjGIU1zksFsuX/u4VkVhkZ2djt9vZu3ev2IhKB+CwsDDGjRtHcnLykKi/Lw/IUuRy/PjxInLu9XoZGBggOjoahUJBQkICCxcuZPfu3Zf8G263G6vVSkpKCgsWLKCwsBCZTMbixYupqakRvCgDAwMsXLiQRYsWUVxc7BP7PR4P27ZtY+nSpbhcLiIiIvjGN74BXCiH1Gq1IpOrr6/Prxs/KROgpqaGmJgY0tLSOHDgAN/73veYMGECTU1Ngpvl4MGDJCUl+WVz7HK5OHz4MPPmzRPqqHPmzMFoNApOpvvuu4/58+cTHR3tl02nxKNXUFBAUlISFouFrKws5s+fLxyHvu7Ll4JUTj59+nQ6Oztpb2+nqqpqSFnNnDlzuOOOO3C73SxevNhn91apVEyfPp2oqChqa2tRKpUUFBSg1+vp7u4e8uwj0RZfBgMDA2g0Gm688UbOnDmDRqMRGZFGo1Hw4axbt46YmBjmzJnj87IpX8Dr9VJYWEhMTAwTJ07EbDZz/vx5EhISRNaOy+Vi//795OXlXXclvaMYxShGMRzXI1/oKEYxilGMYhSjGMU/G64ow85kMpGdnS0k2q1WK8eOHaOlpYW2tjahatjT00NPTw+lpaWMHTvWZ+Ux3d3drF+/nszMTMaMGYPBYODEiROC6+kf//gHBw8eRKlU8vjjj1/yb8jlcrZv345CoaC3t5cZM2bw/vvvExoaypo1a+jv7+fQoUOEh4dTV1dHT08PK1as8In9GzZsYPv27WzZsoXx48eTlJRESUkJ+fn5OJ1Ozpw5Q3h4OJWVlVgsFgoKCnxy38uhvr6ep59+Go1GQ0pKCmPGjOHgwYNoNBpSU1PZtGkT48ePp7i4mFWrVvnFhr/85S+cOHGCrVu3kp2dTUJCAiEhIdxyyy3U1tbicDjQaDScOHGCRx991C+8Jkqlkr/85S9MnjyZoKAglEolu3btoqenh0cffZTy8nLcbjder5euri7Onz9PVlaWz+04e/YsjY2NhIaGsnjxYvbt20d6ejp6vR6LxUJRURHZ2dkUFhZy6623iswsX2D69OmsX7+etLQ0DAYDf/vb38jOziYrKwuTySRKWc6fP09oaChjx471i+LilaC+vp6jR4+i0+l45JFHCAsL46OPPiImJoaUlBTeeust7rjjDs6fP098fDxjx469LpViy8rKeOGFF4AL6ozjxo1Dr9cTFRXFwMAAe/fuRafToVarMRgMo4fgUYxiFNc9/KVCOopRjMK3kMTw1Gr1KHfgKEYxilFch7giDjuTyURQUNCQTdhwLg9JcXIwh4WvNm1S2ahCoRAcGGazGb1eLxRpB9txOUhqrZLaZ39/PzKZTCi1Sujt7UWr1aJUKn0mmiH9Handent7hUKr9LnZbCYkJMTvzgVJCVB6Z3K5nL6+PpRKpXDGDG5Tf0BSrJMgtblarRb37OvrQ6fT+XXz73A46OvrIzQ0FK/XS09Pj+hX0n2l9+drvqjBMJlM6PV6VCqVeDfDOXKUSqXP7+/1eunv78fr9QrybGBI+d3gcuQvGmMjAWk+UKlUInOur68PmUwmskHdbjdOp/O65nMZzInk8XjEnDl8noUvPw5H+X6+GFIb1dfXj7bRKEYxilFcx7BYLCQnJ4+uaZ8DaU177bXXhBq1JM6n1+uZNGnSkLJjr9eL0WgUwoGzZs267qhPfAGv18s777yD0WjE5XIBF5I3cnNz0Wg01NXVCVXxrq4u9Ho9s2fP9nlVkdfrpbu7m6KiItRqNYmJiUMqaPr7+6mrq8PhcBAdHX3JoLzEjVpWVsb06dOHUAb4E16vF5PJRGlpKU6nk+joaMaMGSN+b7fbaW1tpauri9jYWOLi4oacnaxWK+Xl5WIvm5aW5lf18eFobm6mvLwcj8dDXl7ekGoti8VCZ2cnRqORvLw89Hq9sN3hcNDd3U1ZWRmBgYFotVqioqJ8mjDxefB4PNTX13P+/Hl6e3tF8szRo0cpKyvDZDIJW4OCgli1apXoE319fXz66ac0Njbi8XjQ6XSkpaWxdOnSEbG9oaGB0tJSIYIzbdo00tLSxPm1t7eXkpIStFot+fn5Q5K7vF4vlZWVgn9Vr9cPoTnyNxwOB0ajkerqajo7O7nllltQKBTY7XaMRiN1dXVoNBoUCgXZ2dnCLsn3deLECeBC39doNEycOBG4+Ax3JWe1KwqlyOXyL+Uo8NdhXiaTXfSyBi8uX/aeSqVyyHWXm5R9zadxqbaTuMkkyGSyEZuAZTLZRTYNJ0r2t1NmeDRveHvA5d+PL6FWq4XTRyaTXXLTMhKliIPf/aUctv7Kahvs5IKL+8Hl7LmWuNR8MNxuhUJx3ZeQDm7Xy7XxtXaO/ivj1Vdfva4duqMYxShG8f867Hb7tTbhnwaHDx8WPKhZWVl0dnbi9XrJz8+/6Fxjt9vZs2cPBQUFTJw48V/SYQcX2sRutyOTyXA4HHR2dqLRaNDpdGzdupXIyEjmz59Pc3Mzp0+fZuzYsWi1Wp/uez0eDy0tLZw6dQq4cJhPS0sTFEUVFRW0tbWh0WgueRaSxHlOnjzJwYMHycnJGbHzIkBraytnzpzBarWSnp4uHHYul4va2lpaWlpwOp0X9SGTyURNTQ0tLS2oVCpKSkpQKBSEhYX5RaBqMKS2bW1t5dixY7hcLsLCwoTDzmaz0djYSHNzMy6XC6fTOSQRqaenh0OHDjEwMEB4eDgtLS2kp6djMBhGJBvVZrPR0dHBkSNHqKmpEQ67s2fPUlZWhtVqBf4v2WXFihWiTzgcDg4ePEh/fz8ej0c4HEcKlZWVnDt3TrRtW1sb3/rWt9BqtbhcLtrb29m1axcpKSlkZ2eLviBRnR0/fpy4uDjq6uqEX2ny5MkjYrvVaqWtrY2Kigr27dvHypUrUSgUNDc3U1VVRWdnJ+Hh4ZSXlxMdHS0U0L1eLy0tLRQXF2MwGLDZbDidTtLS0q56bh3NfR7FKEYxilH8P4v/+I//GM3YGMUoRjGK6xgWi4Wf/exn19qMfwrExMQQEBDApEmTWLhwIW63mxMnTqBUKrHb7aJ6Q6fTkZSURFJSknAQSRkiAwMDoppEElwbGBgQ95CCoU6nU/w96f9qtfq6C5ROnDiRJUuWEBsbS0tLC5s3b2bZsmV4vV4OHDhAcnIyq1atoqenh9/85jc88cQTGAwGnzrsvF4v7e3txMXF0dzcTH9/v/id0Whky5YtLFy4kEmTJl0yOO92u+np6eHIkSN0d3cLhfKRQkdHBxERETidTlGFA9DZ2cnu3btJSEhg2bJlFzmFysvL2bNnDw8//DBRUVF89NFHpKSkkJqa6neVdLjglPZ6vSiVSjwej3DKAVRVVXHu3Dm0Wi233nrrRZUtTU1NvPDCC3z88cdoNBp++tOf0tvby7hx40bEWWo0GomIiECv12MymcTnwcHBPPLII6Snp+NwODh16hStra1DkhgUCgUpKSk89NBDQhBrJMdla2srM2bMIDs7m2PHjnH33XfzwAMPoNVqsVgs1NTUcObMmYu46V0uF0ajkaKiIpYvX05ycjJHjhzh/fffHzGHndTWWVlZbNiwQfSX48ePU1dXx6pVq0hPT2fjxo1iXlEoFLhcLvbt24fH42HixIm0t7dTVFREZWUlU6dOvSqbrshhd+zYMb9J1Y9iFKMYxSh8g8GbqVGMYhSjGGk4HA6/K6uPYhSjuBiDx5zT6aSyspLJkydz6tQpjh8/TktLC3FxcXz729++6Fqv10tnZyfvvPMObW1t5OXlMX/+fAwGA2+99RZyuZyBgQHS09MpKChg69atmM1mgoODaWxsJDg4mGXLlpGdnT2Sj/yFuPnmmwkKCmJgYACLxYLVaiU5OZmmpibggjOsq6uLvXv38rWvfY3o6GifZ38plUoWLlzIpk2bhjgCXS4XP/zhD3nsscdITU29rJOwra2No0ePsmLFCjZs2OBT274IMpmM+fPns3v3boxG45Df/fznP+e2225jwoQJl7TdaDRSUVFBVFQUMpmM7OxsrFYrDQ0NfnfYyWQyAgMDmTx5MmVlZTQ2NorfOZ1OXnrpJW644QZWrlyJ0+kcIkwn0e7U1dWJviBRBtXU1DBp0iS/2g4Igc/IyMgh43rJkiUEBAQgl8uxWq1s2rSJp59++iLVeo1Gw65du7BareTm5pKbmztiPJW33XYbSqUStVrNtGnThjxDc3Mz9fX1TJky5aI9gs1m4+DBg6Snp6NSqUhKSuLs2bOUlpaOiN1woWTbbrdz/vz5IZ8HBATQ0dHB//7v//Lv//7vZGZmEhQUJNpdqpL8+9//TmxsLHK5XJRhXy2u6K0FBASMOuxGMYpRjOI6x/Wg4jsK30Eq6eju7gb+bxMaGBhId3c3wcHBOJ1OAgICfJIV4HK56OzspK+vT5TsdHR00N7eDlwo3c7JyUGpVOJ2u+nu7qa1tVVcHxQURGJios83hna7nY6ODtRqNTExMXi9XqxWK319fcCFzfRgLhHpOVwuF4mJiT61RYLb7aa+vp7+/n6Cg4OJi4tDLpdjsVjo6uoS5RISvF4vdrsdi8UCgE6n82uGp8SL29raikqlIjo6WtzP6XTS3d2NVqsdUoLV398vSjkCAwMv4i7+MqisrBzCcfR5cDgcVFRUiCwIg8FAQEAAra2teL1eIiIiCAsLG9KvvV4vvb29uFwugoKC/FJaJW3YJbuioqIwGAyCBxkYslm32+2i3bRaLXq93m+HI5fLhcViQaFQCD5mh8OB2Wy+ZEmd2+3GbDajUqnQ6/V+p7gY3kYul4uuri5UKhWhoaFD3pc0h9hsNhISEkaFD3yAsrIympqaKC0t5eDBg7z66qu43W4WL15MY2Mjf/7zn1m8eDEZGRniGqfTSUtLC8888wxPPPEENpsNi8XCmTNnOHbsGDNnzmT69Ol8+umnHDhwgNOnTzN79mzWrVvH888/T15eHkVFRfzmN7/h1VdfvYZPPxQSzY1MJuPYsWOUl5dzzz33iN/bbDbOnj3LJ598QmtrK/39/VitVkJCQnw+rwyfR6V16vDhw2RkZNDQ0IDNZmPs2LH813/9l/ieyWSit7cXg8FwzQTfLmW7x+Ph+PHj6HQ6Pv74YxoaGsjKyuLXv/71EB44q9Uq/q3X68U6eC3sllBSUkJnZyc7duzg8OHDnDp1im9961vceuutItik1+tJTEzkN7/5DXl5eRw8eJDMzMwRKx2/nO0hISHIZDIaGxspLi5m8eLFF83pHo+Hjo4OIiMjOXnyJB999BFZWVn88pe/HAnTBc1Sd3c3x44d45FHHkGr1XLmzBkAJk2axM6dOy+6zuVy0dHRIcpMVSoVCoUCh8MxInbD5dt94cKFqNVqnn76aebOncujjz46xEmqVCpZtGgRW7Zs4Ve/+hWBgYHMnj3bJ+vtFa2KY8eOveTGcvDhcDSaOopRjGIU1xaSM2AU/xqw2+2sX7+e8vJyIZSUlpZGTk4O7733HqtXr6ampgaDwcC99957Sf6bK0F7ezt79uxh+/btrF+/Hq/Xy4cffsjRo0dFydPvfvc7goKCBAfShx9+iE6nw2azkZaWxpNPPulzguCqqiref/99goOD+Y//+A88Hg9btmwhMDBQKIrffPPNwP9tVjdt2kRdXR3PPPOMT22R0N7ezquvvkpHRwdarZZ///d/JyEhgePHj/P+++/z0EMPDYnE9/X1cfbsWVpaWrBYLERERLB8+XK/OSk8Hg/bt2/n8OHDeDweCgoKeOCBB/B6vTQ3N/Pee+9RUFDAokWLgAt97dy5c9TX19Pd3U1cXBzz5s274mDt4cOHyc3N/VIlON3d3fzXf/0XBoOBwMBAFi9eTHR0NB988AG9vb1MmDCB2267jcjISHGN0WiktLQUr9dLQUGBX8qT2tvb+fGPf0x4eDghISGsXLmSefPmCQLziIgIxowZIw4mp0+fprm5Gbhw6LjhhhuG2OwrOBwOQUQeFRUlCK0bGhrYunUreXl5LFmyRHzf7XZTU1NDRUUF8fHx5OXl+fXQ73Q6h7RRXl4ebW1tbNy4kcjISFauXDmkXbq6ujh48CDbtm3j17/+NREREX6z7f8VJCYmkpOTw9SpU4mLi0OlUmG1WjGZTLS2tqLRaDAajaSnp4trLBYLlZWVhIWFERwcLMofvV4vu3fv5hvf+AaBgYFkZ2fT0NBAUVERN954IxEREcTGxhIbG0tTU5MYA9cT5HI5jY2NmEwmdDrdkD6m1WqJi4tj0aJF9PX18b3vfY/9+/ezYMECvwV6JEjcXgEBASxZsoTAwED27t3Lzp07sdlsBAQEIJPJOHHiBKWlpej1ejo7O6mrq+PEiRNoNBq/23g5eL1e0Zdmz55NTk4OpaWlPPvss8L2wYKKEjweD2q1+ppzB1dXVxMXF8e0adPIycmhoKCAd955hxUrVgiHXUpKCj/96U8pLS0lNDSUoKAgDAbDiIlOXA5SpmtzczNlZWU8+OCDF+kHBAQEcPfddwvBhr/+9a/U1dXhdrtHpDRWJpNhtVppbGzk/PnzrF69Go/Hw6FDh+jv7ycgIICzZ88SGhrK+PHjRbaatMeUyvJlMhlKpXJE+Oy/CCdOnKCpqYmf/OQnWK1WXn/9dfLz89FoNCKYt2vXLqZNm8ZNN91EVVUVlZWVbN26lTvuuOOq7n1FO8SdO3eSmZmJ1+slLy8PlUqFy+WisLCQ6OhokpOTR8Rh19raytGjR4EL3kwpKhESEkJUVBTJycmf2xmbm5s5e/YsgYGBzJw5k7a2Ntrb28nJySEgIEBsZIuLi4mOjqagoMAn3tHOzk4KCwsJCAhgypQp9PT0UFlZyYwZM1CpVDidTk6cOEFraysKhYLMzMwvHaH+KrDb7Zw6dYre3l6mTJlCX18fp06dIi4ujvz8fNRqNf39/Rw+fBi9Xk9+fr7PMyz7+vooLy8nLCyM1NRUvF4v1dXVBAcHCwWhtrY2SkpKmD9/vt8ONd3d3VRUVJCZmYnVaqWkpASn04lGo2HhwoUoFAqKi4sxGo1MmDCB6Ohon9tgt9s5evQodrudKVOmoFAo6O7uxmQyMXHiRDG2XC4XBw8eZN68eT4Zb5L609GjRzEYDIJst7GxEaVSSVxcHHAhYltVVUVaWhp5eXnX3Dnf399PSUkJRqORadOmoVQqOXHiBBEREeTm5gpiU6PRSHd3N7GxsYSFhV1zu4djYGCAkydP0t3dLdLGpfc+uDzC5XJx9OhRZsyYcd3xw4zCv1AoFEyYMIEf/OAH9Pf3c+DAAaKjo+nv7ycsLIxbbrmF/fv3c+LECbq7u6/aYWc2m5k6dSqvvPKK+Mzj8fDss89itVoJCwsTa4FMJiMtLY3nnnuOwMBATp8+jc1m84uaV39/P6mpqdTU1AAXHBGvvfYar776Kh6PhxdffFE47NxuNx6Ph4SEBIqLi31ui4SmpibWrFlDamoq//Zv/8a2bdu47777CAoKQqPR4HQ6h3y/sbGR/fv382//9m8UFRVx9OhRpk6d6pc1RYLb7eZ3v/sdhw4d4rHHHuOBBx5gYGCA0tJS6uvrGTt2rPhuQ0MDlZWVjB8/nt7eXk6ePElycrJf9yI6nY5bb72V5cuXC+W16upq/u3f/o26ujq2bNlCWVmZcPKYzWY+++wzYmNjmTJlCjqdzi926fV6Vq1axeLFi0UWYlNTE0ePHiU9PZ3JkycPWU/27t1Leno6CxYs4I033qCnp8fnDju3201jYyP79u1jzpw5ZGVliYNRTU0NDQ0NQ5Qn4cLB9MCBA8ybN4+0tDS/ZtdJpNuD28jlcqFSqcT+erDiPFwgTM/Ly+PNN98UKp6juDro9Xqio6NJTU0lICCAlpYWamtriYmJITw8nPDw8CGcdHDB0drV1UV3d7fguNPpdAQGBmI2m+nv78fr9RISEoJer8fj8Yj3qtPpCAoKQqvVjmgmzJeBxMt35MgRXC4Xubm5QzLnpCzVhIQEkQ3W398/Yhxx0niMj48nMTGRmpoawTUoOVd0Oh0hISHodDqMRqMYR9e6mkKyPTo6mry8PFwulxA5kNpPqVSi0Wjo7+9Hq9Vis9mIjY0lPDz8WpoOXBDyk2zXaDS8+OKLQqhCJpMRHBzM1KlT0ev1dHV1kZOTI3wF1xrnzp2joaGB+Pj4IQErj8eDw+FgYGCAlJQU5HI5ERERxMfHY7PZRuwMNDAwQH19Pa2treTn55OQkEBfXx8Gg4He3l7cbrfox1Jf9ng8KBQKDAYD586dw+12Y7fbkcvl19xJClBXV4fRaOTOO+/E6/WyceNGrFYrNpuNsLAwkS174403kpOTQ3h4uCirvlpc0aq9bds2AgICGBgYEAuuTCajtLSUhoaGEZs4+vr6GBgYQC6XU1dXh8lkYseOHXR2drJr166LFqHhaGpqQqlU8vHHH1NZWUlXVxeHDx/GbDYD/0d4CPDaa6+JtP6rRWVlJTqdjtOnT3PkyBEcDgcffvihSAt2OBxYLBb0ej21tbVf+BxXC7vdTltbG+Xl5Rw/fpzTp0+jVqs5evSoOBA1NDSgVqupqKigvLzc5zaYzWbq6+spLCwE4MCBA6JsQ4LVauW9997z6ybAZDJx/Phxmpqa6OzsRKFQEBQUxNmzZ5HL5XR1deF0OpHL5WzcuNEvNkgD2mw288EHH3D27FlMJpNQB5JQWVnJa6+95tN7V1ZWolKpOHLkiFD2KS8vH8LnUF5ejlwuZ/v27XR2dvr0/l8FZrOZnp4e2tra2LJlC01NTajVasHRAhccsYcPH8Zms3HmzJnr8jDQ3NyM0+nE4XCwfv16jEYjp0+fvmizWFdXx+uvv35dPsMo/Au1Ws2cOXOAC+tXV1eXyKqRyvbq6+uJjIz0CSfMmDFjLnL6aTQaCgsL2bRpE59++qmYjzUaDXl5eUJBraGhgRkzZly1DZfC5MmTh6wNUgT8xRdf5OOPPx5yX7VaTWJiot85cvLz8xkzZgxarZbU1FRSUlLQ6/WXdXDZbDZaWloICgoiODgYjUZDR0eH3+yTy+V87WtfE8GXsWPH4na76ejowG63k5qaOmQD39bWJsjFIyMjRSmjPyGVXO/cuZPNmzdjMpnIz88nJSVFBPMGH+6OHTtGc3MzVquVwsJCoYLpa0il6Nu3b2fr1q3U1dVx+vRpiouL8Xq9FBUVDclmjomJ4ejRo7zxxhtERUVdteP8Uujr6+PkyZM0NDTQ09NDUVERVquVlpYWPB4PKSkpQ77v9Xp59913UalUNDc3c+rUqSFk976Gw+G4qI36+/tJSkrCYDBc8rAoqS6OBqJ8g76+PnGI9Hg8xMXF0dTUxLlz53A4HKKssre3l/7+fgYGBrDZbDgcDsLDw6mqqqKxsZG2tjZ6enrEPFtUVERPTw9Wq5XAwECysrLo6enB4XBgt9txuVyixNNqtV5zZ9JgtLe3c/LkSdxuN/n5+eLz/v5+HA4Hvb29tLS0UFdXR0BAgJjHfQmv10t/fz89PT309vZitVpxOBwEBwcTGBgoaBQAURpeUVGB2WwmLS2NGTNmkJ6eTmhoKBqNhrCwsBFzHA2mcpA4ACUaiMDAQPr6+ujq6sJut5OcnIxSqaS0tBSz2UxISAixsbFUVVVhsViw2+2Ehob6Jfv4crDZbNhsNnp7e0WfjY+PF321t7cXu91OSkoKMpmMyspKQfOhVCpJSkqiu7ubyZMnM27cuBFzeknUD5J9nZ2duN1u+vr6OHLkCC0tLUybNk18v6+vj8bGRuEbqa2txWQy0dbWRmRkJPn5+X6nQ5AcbxUVFRw6dIjS0lIiIyM5e/YsZrOZiRMnMnXqVBISEtDpdOj1eoKDg+nt7aW1tZWenh5SU1NpbW3FbDbT1NSEy+UaMm79DamNu7u7GRgYoKenB7fbLRyIfX19uN1usrOzCQsLw2w2U1tbi81mo6enB7jgsAwICCA1NdUnWeNXlK5kt9vp6upCr9ezc+dOSktLWbFiBQEBASiVSiwWCzt37hTlOtLkExMTg8Vioa6ujv7+fhYuXMjMmTO/stFJSUkkJCTw2WefsWrVKkwmE/X19ZSUlDBlypQhToZLYdy4cahUKo4fP45CoSAiIgKFQiGckAqFgry8PPLz89m2bZvPsrrGjx+PWq3GZDLhcrmEMoq0qOl0OhYsWIDH48FoNA6JevsDQUFBLF26lD179iCXy5k5cyZyuRyTySSyApKSkgTJYkRExBC5a1/AYDBgMBior68XXAJ5eXnExcUJzonk5GSf3e9yiI+PR6vV4na7GTt2LAqFgj179nDHHXegUqnEwvjZZ5+Rk5Pj83YASE5OJiMjg7q6OjZs2EBYWBgFBQUkJCRw9uxZ0tPT6e7uFtETX2Ls2LGoVCo6Ozux2+387W9/Y/ny5ZhMJiIiIpDJZCxatAi73U5dXd11sREzGAzMnj2bs2fPUlRUREpKCiqVCqPRSFBQkLCxuLiYsrIybrvttuvyQBAXF0diYiJdXV2CFPrs2bNoNBpRriJtMK63yPUoRgZyuVzw1R07doy5c+eK+ae/v5+Ojg6USiVdXV3U1NQwfvx4n95fJpMJrqPQ0FB+97vfMXnyZFJSUlAoFCIDo7KykqSkJL9k1w2HNL7nz5/P0aNH2b9/P9OnTx+xcg8JUtZQeXk5Op2OG2644XO/L2344MJBQKVSXZRx5EtImTI9PT0cP36chx56CIvFwt69e4mOjsZoNNLR0UFvby9BQUEieCCXy1EqlSgUCr/P9wqFgvj4eAwGAx9//DEmk4nHH38ci8VCW1sbKSkpZGVlie+XlZVhNBrR6XTs37+fu+++m8WLF/u8zFOlUpGQkEBQUBA7duygpqaGiIgIbDYbBw4coLGxkVtuuUXs23Jzc2lqauL06dPExcUxZ84cn+8Vent7OXXqFDqdjl27dtHa2sry5cvFgbqrq4vAwECsVit6vZ7+/n4aGxtRqVRCse4Xv/gFGRkZfjl09vT0CB6u4W00ipFBfX09Ho+H0NBQTCYTUVFR6PV6WlpaOHjwIJGRkXR0dIiqEikgnZuby7x583jppZdYv3498fHx5OTkkJCQwLp169iwYQPx8fE0NjYSGBjI7bffztGjRzGZTDQ3N4uqGKfTSXl5+ZDKkGuNTz75BL1eT1xc3JAzYmNjIz09PZSXl/PWW29RW1vLDTfcwPTp033ucPd6vTQ2NnLq1CkaGxtRq9U0NzeTlpbG0qVLOX36tFDyveGGG1Cr1Tz11FN84xvfYOLEiaSkpNDQ0EBTUxMmk0nwZY4UmpqaKC4upry8nKioKGpraxkzZgyLFi2iqamJ7u5uHA4Hy5YtQ61W8x//8R/88Ic/JC8vjwULFrB+/XqWLl1KRETERdyu/kZlZSXnz5+npqaGwMBA8vPzmTp1Kh9//LHICD537hzf+ta3UCqV/OpXv2Lq1Kk8+OCDtLW1sXPnToKDg5kwYYKoOhoJeDweSkpKqKiowGg0smPHDm655Rbq6uqoqakhKipqSFl7bW0tmzZtAuDOO+/kz3/+M/Pnz6elpYWMjIwhVAn+hMvl4i9/+QulpaV4PB6RdPP444+zZMkSQkJCaGhowGg0imzA06dP09raSmRkJLfffju9vb2isk2v17Ny5coRsR0u7Ktra2s5ePAgXV1dnDhxgjlz5pCcnIzZbGbTpk3Cb5Cbm8vBgwcpLCxk7dq13HzzzWzatIlJkyYJHtD77rvvqm26Ik/UwMAAnZ2dBAYGkpeXR3d3N/v37xeRz2eeeYbHHnuMgIAAnnvuOVasWMGsWbNYt24d9913H5mZmUyfPp3f/va3V+WwUyqVVFZWotFoCA8Px2KxkJmZyQ033MAHH3zA5MmTP3eilcr90tPTycjIwGQyDVlU5HI5KpWK4uJibr/9dp9tAgMCAjCZTJjNZm666SYUCsVF91Uqlbz11lssWbLELyTKgyGXy3E6nahUKvLz8wkNDaWmpoagoCChaKJSqbDZbNTW1hIQEOBz55lSqRRtUFNTg8PhICUlhSeffJIXX3wRjUbj93YAhtxDo9HQ2tpKR0eH4PWRDsNarZb333+fBQsW+HwjotPpRFns17/+dVH2rdPpRClCdXU1arUah8OByWTySUq5TCYjICCAmpoaoqOjiY6Opru7m4iICDZs2MADDzwgHLc1NTXk5eWNaGTscpAI76urq7njjjtQKpUMDAxw6tQpIRcv9e3Tp0+zZ88e0tPTrxlh7+UglZDs2LGDRx55hE8++YSwsDC2bNmC1+tl1qxZNDU1iWh5V1fXiG4YRnFh0+RyuVAqlX6PTl4ODoeDwsJCUYIqITw8nPnz51NZWcmGDRuoqKjwucPO4/EwadIk9Ho9NpuNjz/+GKvVisfjQSaT4XQ6qaiooLa2lm9+85s+vffnoauri/379/Pcc89RXFzM9773PR5++GGAEXPaeb1eampqKCoq4t57771seaYUdZbWeafTidPpRKlU+oV/bfB9+/v7OXnyJGFhYcyZM4fW1lba29ux2Ww0Njai1+vp7u4mMDAQnU6HUqnEarXicrkIDAz0qyiG5Ky899576evrEzQrEl2GXC5nzpw5qNVq8V2bzUZ6ejpf//rX8Xg8dHZ2YrPZfDq3u91ulEolX//617FarTidTvbu3UtYWBhTpkzhlltu4Y033qCqqop58+aJzLeFCxeybt06vve979Ha2kpiYqJP9wputxun08myZcvIyMjgo48+4vjx48TExODxeGhoaBCB14CAAPr7+5HJZMycOZM5c+Zwxx130NvbK0qPfA2Hw4HH47mojS7lsJPmj+vFqfOvghdffFGcgaS2nTBhAq+//joymeyis8eGDRuEU16hULBt2zbq6+tRq9Wi/DU7O5sFCxbQ3d3NxIkT0ev1yGQycnJyBCemXC5n+fLlLFmy5Lp7r/fff/8lbZo3bx7z588f8vz+grR2//73vx/yuVwu56c//Smtra3I5XICAgIICgoC4M033xxic0ZGBk899RRPPfWUXxIHPg8pKSn85Cc/Ef+W2uyJJ57AaDTicrnQ6XRCkGH37t3Cvri4OObPn4/NZmPu3LkjLiwzduxY/ud//mfIZ3K5nF/84hd0dXUxMDDAwoUL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iIhICFFgJyIiIiIiIiIiEkIU2ImIiIiIiIiIiIQQBXYiIiIiIiIiIiIhRIGdiIiIiIiIiIhICFFgJyIiIiIiIiIiEkIU2ImIiIiIiIiIiIQQBXYiIiIiIiIiIiIhRIGdiIiIiIiIiIhICFFgJyIiIiIiIiIiEkIU2ImIiIiIiIiIiIQQBXYiIiIiIiIiIiIhRIGdiIiIiIiIiIhICFFgJyIiIiIiIiIiEkIU2ImIiIiIiIiIiIQQBXYiIiIiIiIiIiIhRIGdiIiIiIiIiIhICFFgJyIiIiIiIiIiEkIU2ImIiIiIiIiIiIQQBXYiIiIiIiIiIiIhRIGdiIiIiIiIiIhICFFgJyIiIiIiIiIiEkIU2ImIiIiIiIiIiIQQBXYiIiIiIiIiIiIhRIGdiIiIiIiIiIhICFFgJyIiIiIiIiIiEkIU2ImIiIiIiIiIiIQQBXYiIiIiIiIiIiIhRIGdiIiIiIiIiIhICFFgJyIiIiIiIiIiEkIU2ImIiIiIiIiIiIQQBXYiIiIiIiIiIiIhRIGdiIiIiIiIiIhICFFgJyIiIiIiIiIiEkIU2ImIiIiIiIiIiIQQBXYiIiIiIiIiIiIhRIGdiIiIiIiIiIhICFFgJyIiIiIiIiIiEkIU2ImIiIiIiIiIiIQQBXYiIiIiIiIiIiIhRIGdiIiIiIiIiIhICFFgJyIiIiIiIiIiEkIU2ImIiIiIiIiIiIQQBXYiIiIiIiIiIiIhRIGdiIiIiIiIiIhICFFgJyIiIiIiIiIiEkIU2ImIiIiIiIiIiIQQBXYiIiIiIiIiIiIhRIGdiIiIiIiIiIhICFFgJyIiIiIiIiIiEkIU2ImIiIiIiIiIiIQQBXYiIiIiIiIiIiIhRIGdiIiIiIiIiIhICFFgJyIiIiIiIiIiEkIU2ImIiIiIiIiIiIQQBXYiIiIiIiIiIiIhRIGdiIiIiIiIiIhICFFgJyIiIiIiIiIiEkIU2ImIiIiIiIiIiIQQBXYiIiIiIiIiIiIhRIGdiIiIiIiIiIhICFFgJyIiIiIiIiIiEkIU2ImIiIiIiIiIiIQQBXYiIiIiIiIiIiIhRIGdiIiIiIiIiIhICFFgJyIiIiIiIiIiEkIU2ImIiIiIiIiIiIQQBXYiIiIiIiIiIiIhRIGdiIiIiIiIiIhICFFgJyIiIiIiIiIiEkIU2ImIiIiIiIiIiIQQBXYiIiIiIiIiIiIhRIGdiIiIiIiIiIhICFFgJyIiIiIiIiIiEkIU2ImIiIiIiIiIiIQQBXYiIiIiIiIiIiIhRIGdiIiIiIiIiIhICFFgJyIiIiIiIiIiEkIU2ImIiIiIiIiIiIQQBXYiIiIiIiIiIiIhRIGdiIiIiIiIiIhICFFgJyIiIiIiIiIiEkIU2ImIiIiIiIiIiIQQBXYiIiIiIiIiIiIhRIGdiIiIiIiIiIhICFFgJyIiIiIiIiIiEkIU2ImIiIiIiIiIiIQQBXYiIiIiIiIiIiIhRIGdiIiIiIiIiIhICFFgJyIiIiIiIiIiEkIU2ImIiIiIiIiIiIQQBXYiIiIiIiIiIiIhRIGdiIiIiIiIiIhICFFgJyIiIiIiIiIiEkIU2ImIiIiIiIiIiIQQBXYiIiIiIiIiIiIhRIGdiIiIiIiIiIhICFFgJyIiIiIiIiIiEkIU2ImIiIiIiIiIiIQQBXYiIiIiIiIiIiIhRIGdiIiIiIiIiIhICFFgJyIiIiIiIiIiEkIU2ImIiIiIiIiIiIQQBXYiIiIiIiIiIiIhRIGdiIiIiIiIiIhICFFgJyIiIiIiIiIiEkIU2ImIiIiIiIiIiIQQBXYiIiIiIiIiIiIhRIGdiIiIiIiIiIhICFFgJyIiIiIiIiIiEkIU2ImIiIiIiIiIiIQQBXYiIiIiIiIiIiIhRIGdiIiIiIiIiIhICFFgJyIiIiIiIiIiEkIU2ImIiIiIiIiIiIQQBXYiIiIiIiIiIiIhRIGdiIiIiIiIiIhICFFgJyIiIiIiIiIiEkIU2ImIiIiIiIiIiIQQBXYiIiIiIiIiIiIhRIGdiIiIiIiIiIhICFFgJyIiIiIiIiIiEkIU2ImIiIiIiIiIiIQQBXYiIiIiIiIiIiIhRIGdiIiIiIiIiIhICFFgJyIiIiIiIiIiEkIU2ImIiIiIiIiIiIQQBXYiIiIiIiIiIiIhRIGdiIiIiIiIiIhICFFgJyIiIiIiIiIiEkIU2ImIiIiIiIiIiIQQBXYiIiIiIiIiIiIhRIGdiIiIiIiIiIhICFFgJyIiIiIiIiIiEkIU2ImIiIiIiIiIiIQQBXYiIiIiIiIiIiIhRIGdiIiIiIiIiIhICFFgJyIiIiIiIiIiEkIU2ImIiIiIiIiIiIQQBXYiIiIiIiIiIiIhRIGdiIiIiIiIiIhICFFgJyIiIiIiIiIi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",
-      "text/plain": [
-       "<Figure size 1600x900 with 5 Axes>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    }
-   ],
-   "source": [
-    "plot_images(table_images_paths)"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "### Observation:\n",
-    " As demonstrated, the model now provides accurate answers. This aligns with our findings from the Chain of Thought (COT) experiments, where supplying GPT-4-V with specific image information significantly enhances its ability to deliver correct responses."
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## Experiment-4: Applying OCR on cropped table images and send the data to GPT4/ GPT-3.5 to answer the query.\n",
-    "\n",
-    "The experiment depends highly on the OCR model used. Here we are using easyocr with few modifications from [repository](https://huggingface.co/spaces/nielsr/tatr-demo)."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stderr",
-     "output_type": "stream",
-     "text": [
-      "WARNING:easyocr.easyocr:Neither CUDA nor MPS are available - defaulting to CPU. Note: This module is much faster with a GPU.\n",
-      "WARNING:easyocr.easyocr:Downloading detection model, please wait. This may take several minutes depending upon your network connection.\n"
-     ]
-    },
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Progress: |██████████████████████████████████████████████████| 100.0% Complete"
-     ]
-    },
-    {
-     "name": "stderr",
-     "output_type": "stream",
-     "text": [
-      "WARNING:easyocr.easyocr:Downloading recognition model, please wait. This may take several minutes depending upon your network connection.\n"
-     ]
-    },
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Progress: |██████████████████████████████████████████████████| 100.0% Complete"
-     ]
-    }
-   ],
-   "source": [
-    "import easyocr\n",
-    "\n",
-    "reader = easyocr.Reader([\"en\"])\n",
-    "\n",
-    "\n",
-    "def detect_and_crop_table(image):\n",
-    "    # prepare image for the model\n",
-    "    # pixel_values = processor(image, return_tensors=\"pt\").pixel_values\n",
-    "    pixel_values = detection_transform(image).unsqueeze(0).to(device)\n",
-    "\n",
-    "    # forward pass\n",
-    "    with torch.no_grad():\n",
-    "        outputs = model(pixel_values)\n",
-    "\n",
-    "    # postprocess to get detected tables\n",
-    "    id2label = model.config.id2label\n",
-    "    id2label[len(model.config.id2label)] = \"no object\"\n",
-    "    detected_tables = outputs_to_objects(outputs, image.size, id2label)\n",
-    "\n",
-    "    # visualize\n",
-    "    # fig = visualize_detected_tables(image, detected_tables)\n",
-    "    # image = fig2img(fig)\n",
-    "\n",
-    "    # crop first detected table out of image\n",
-    "    cropped_table = image.crop(detected_tables[0][\"bbox\"])\n",
-    "\n",
-    "    return cropped_table\n",
-    "\n",
-    "\n",
-    "def recognize_table(image):\n",
-    "    # prepare image for the model\n",
-    "    # pixel_values = structure_processor(images=image, return_tensors=\"pt\").pixel_values\n",
-    "    pixel_values = structure_transform(image).unsqueeze(0).to(device)\n",
-    "\n",
-    "    # forward pass\n",
-    "    with torch.no_grad():\n",
-    "        outputs = structure_model(pixel_values)\n",
-    "\n",
-    "    # postprocess to get individual elements\n",
-    "    id2label = structure_model.config.id2label\n",
-    "    id2label[len(structure_model.config.id2label)] = \"no object\"\n",
-    "    cells = outputs_to_objects(outputs, image.size, id2label)\n",
-    "\n",
-    "    # visualize cells on cropped table\n",
-    "    draw = ImageDraw.Draw(image)\n",
-    "\n",
-    "    for cell in cells:\n",
-    "        draw.rectangle(cell[\"bbox\"], outline=\"red\")\n",
-    "\n",
-    "    return image, cells\n",
-    "\n",
-    "\n",
-    "def get_cell_coordinates_by_row(table_data):\n",
-    "    # Extract rows and columns\n",
-    "    rows = [entry for entry in table_data if entry[\"label\"] == \"table row\"]\n",
-    "    columns = [\n",
-    "        entry for entry in table_data if entry[\"label\"] == \"table column\"\n",
-    "    ]\n",
-    "\n",
-    "    # Sort rows and columns by their Y and X coordinates, respectively\n",
-    "    rows.sort(key=lambda x: x[\"bbox\"][1])\n",
-    "    columns.sort(key=lambda x: x[\"bbox\"][0])\n",
-    "\n",
-    "    # Function to find cell coordinates\n",
-    "    def find_cell_coordinates(row, column):\n",
-    "        cell_bbox = [\n",
-    "            column[\"bbox\"][0],\n",
-    "            row[\"bbox\"][1],\n",
-    "            column[\"bbox\"][2],\n",
-    "            row[\"bbox\"][3],\n",
-    "        ]\n",
-    "        return cell_bbox\n",
-    "\n",
-    "    # Generate cell coordinates and count cells in each row\n",
-    "    cell_coordinates = []\n",
-    "\n",
-    "    for row in rows:\n",
-    "        row_cells = []\n",
-    "        for column in columns:\n",
-    "            cell_bbox = find_cell_coordinates(row, column)\n",
-    "            row_cells.append({\"column\": column[\"bbox\"], \"cell\": cell_bbox})\n",
-    "\n",
-    "        # Sort cells in the row by X coordinate\n",
-    "        row_cells.sort(key=lambda x: x[\"column\"][0])\n",
-    "\n",
-    "        # Append row information to cell_coordinates\n",
-    "        cell_coordinates.append(\n",
-    "            {\n",
-    "                \"row\": row[\"bbox\"],\n",
-    "                \"cells\": row_cells,\n",
-    "                \"cell_count\": len(row_cells),\n",
-    "            }\n",
-    "        )\n",
-    "\n",
-    "    # Sort rows from top to bottom\n",
-    "    cell_coordinates.sort(key=lambda x: x[\"row\"][1])\n",
-    "\n",
-    "    return cell_coordinates\n",
-    "\n",
-    "\n",
-    "def apply_ocr(cell_coordinates, cropped_table):\n",
-    "    # let's OCR row by row\n",
-    "    data = dict()\n",
-    "    max_num_columns = 0\n",
-    "    for idx, row in enumerate(cell_coordinates):\n",
-    "        row_text = []\n",
-    "        for cell in row[\"cells\"]:\n",
-    "            # crop cell out of image\n",
-    "            cell_image = np.array(cropped_table.crop(cell[\"cell\"]))\n",
-    "            # apply OCR\n",
-    "            result = reader.readtext(np.array(cell_image))\n",
-    "            if len(result) > 0:\n",
-    "                text = \" \".join([x[1] for x in result])\n",
-    "                row_text.append(text)\n",
-    "\n",
-    "        if len(row_text) > max_num_columns:\n",
-    "            max_num_columns = len(row_text)\n",
-    "\n",
-    "        data[str(idx)] = row_text\n",
-    "\n",
-    "    # pad rows which don't have max_num_columns elements\n",
-    "    # to make sure all rows have the same number of columns\n",
-    "    for idx, row_data in data.copy().items():\n",
-    "        if len(row_data) != max_num_columns:\n",
-    "            row_data = row_data + [\n",
-    "                \"\" for _ in range(max_num_columns - len(row_data))\n",
-    "            ]\n",
-    "        data[str(idx)] = row_data\n",
-    "\n",
-    "    text = \", \".join(f\"{key}={value}\" for key, value in data.items())\n",
-    "\n",
-    "    return text"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "Extract table information from the table images."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "table_text = \"\"\n",
-    "\n",
-    "for table_image in table_images_paths:\n",
-    "    try:\n",
-    "        cropped_table = Image.open(table_image)\n",
-    "        image, cells = recognize_table(cropped_table)\n",
-    "\n",
-    "        cell_coordinates = get_cell_coordinates_by_row(cells)\n",
-    "\n",
-    "        text = apply_ocr(cell_coordinates, image)\n",
-    "\n",
-    "        table_text = table_text + text + \"\\n\"\n",
-    "    except:\n",
-    "        continue"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "\n",
-      "0=[''], 1=['5-ol'], 2=['Tmor(-hol'], 3=['Valural Cuesuons | /-ho'], 4=['SNSK'], 5=['nEalM-chol'], 6=['ch Hard (T-ho']\n",
-      "0=['Hodel', 'Cude', 'Canidnzer Ena', 'Lttlc Ntedge', 'Rezdin; LOMPTL', 'Math', 'MMLU', 'ACIEA'], 1=['Z05', '', '', '', '', '', '', ''], 2=['', '', '', '', '', '', '', ''], 3=['', '', '', '', '', '', '', ''], 4=['', '', '', '', '', '', '', ''], 5=['', '', '', '', '', '', '', ''], 6=['', '', '', '', '', '', '', ''], 7=['', '', '', '', '', '', '', ''], 8=['', '', '', '', '', '', '', ''], 9=['', '', '', '', '', '', '', ''], 10=['', '', '', '', '', '', '', ''], 11=['', '', '', '', '', '', '', ''], 12=['', '', '', '', '', '', '', '']\n",
-      "0=['sciDX', 'LEI)', '', '', '', '', ''], 1=['Vddel', 'O-skol', 'IShol', '4-eno', 'G-hcl', 'lsn', 'Acko'], 2=['', '', '', '', '', '', ''], 3=['301', '', '', '', '', '', ''], 4=['', '', '', '', '', '', ''], 5=['Falcon', '', '', '', '', '', ''], 6=['', '', '', '', '', '', ''], 7=['', '', '', '', '', '', ''], 8=['', '', '', '', '', '', ''], 9=['', '', '', '', '', '', ''], 10=['', '', '', '', '', '', ''], 11=['', '', '', '', '', '', ''], 12=['', '', '', '', '', '', ''], 13=['', '', '', '', '', '', '']\n",
-      "0=[], 1=[], 2=[], 3=[], 4=[], 5=[], 6=[], 7=[], 8=[], 9=[], 10=[]\n",
-      "0=['Jalnd', 'Qucauun', 'Jucuale', 'Iet', '', '', ''], 1=['OLakol', 'G-ol', '64-hol', 'Ichol', '5-shol', '64-shor', ''], 2=['', '', '', '', '', '', ''], 3=['30B', '15.8', '23.0', '65.0', '713', '733', '73.6'], 4=['52,6', '', '', '', '', '', ''], 5=['293', '335', '74.6', '78.6', '79.9', '', ''], 6=['', '', '', '', '', '', ''], 7=['IJB', '', '', '', '', '', ''], 8=['330', '', '', '', '', '', ''], 9=['GSB', '', '', '', '', '', ''], 10=['', '', '', '', '', '', ''], 11=['IJB', '', '', '', '', '', ''], 12=['HB', '', '', '', '', '', ''], 13=['SOp', '', '', '', '', '', '']\n",
-      "\n"
-     ]
-    }
-   ],
-   "source": [
-    "print(table_text)"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "As you can see the tablex extracted is not very accurate. (Each row represents a table information)\n",
-    "\n",
-    "Let's now send it LLM to answer our query."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "from llama_index.llms.openai import OpenAI\n",
-    "\n",
-    "llm = OpenAI(model=\"gpt-4\", temperature=0)\n",
-    "\n",
-    "query = f\"\"\"Based on the following table information extracted, answer the query: \\n\n",
-    "\n",
-    "            TABLE INFORMATION:\n",
-    "\n",
-    "            {table_text}\n",
-    "\n",
-    "\n",
-    "            Query:\n",
-    "\n",
-    "            Compare llama2 with llama1?\n",
-    "            \"\"\"\n",
-    "response = llm.complete(query)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "The table information provided does not contain any data or entities named \"llama2\" or \"llama1\". Therefore, a comparison cannot be made based on the given data.\n"
-     ]
-    }
-   ],
-   "source": [
-    "print(response)"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "### Observation\n",
-    "\n",
-    "Because we could not extract the table information from image, the answer is wrong."
-   ]
-  },
-  {
-   "attachments": {},
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## Conclusion\n",
-    "\n",
-    "In this notebook we have explored different ways of handling table information present in PDF's. Specifically we explored Microsoft `Table Transformer` to crop tables from images and process it to get accurate answer."
-   ]
-  }
- ],
- "metadata": {
-  "colab": {
-   "provenance": [],
-   "toc_visible": true
-  },
-  "kernelspec": {
-   "display_name": "Python 3",
-   "language": "python",
-   "name": "python3"
-  },
-  "language_info": {
-   "codemirror_mode": {
-    "name": "ipython",
-    "version": 3
-   },
-   "file_extension": ".py",
-   "mimetype": "text/x-python",
-   "name": "python",
-   "nbconvert_exporter": "python",
-   "pygments_lexer": "ipython3"
-  },
-  "vscode": {
-   "interpreter": {
-    "hash": "b0fa6594d8f4cbf19f97940f81e996739fb7646882a419484c72d19e05852a7e"
-   }
-  },
-  "widgets": {
-   "application/vnd.jupyter.widget-state+json": {
-    "015a816493c54060b422aa9e368ab02d": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "FloatProgressModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "FloatProgressModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "ProgressView",
-      "bar_style": "success",
-      "description": "",
-      "description_tooltip": null,
-      "layout": "IPY_MODEL_af347b83f7034eddb8c5025231202b66",
-      "max": 76761,
-      "min": 0,
-      "orientation": "horizontal",
-      "style": "IPY_MODEL_42c5565c48ff42b7b59a0e3b2877b7f9",
-      "value": 76761
-     }
-    },
-    "06d062fc98d346bbb0e298d03c23988d": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "DescriptionStyleModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "DescriptionStyleModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "StyleView",
-      "description_width": ""
-     }
-    },
-    "0ff9b815f2c645af844ab9d3c0d55a0c": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "1a24c3b7f1ac490a87c0a5d91e677795": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "DescriptionStyleModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "DescriptionStyleModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "StyleView",
-      "description_width": ""
-     }
-    },
-    "2c160a7b8e0f44f49d4d237408c51865": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "ProgressStyleModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "ProgressStyleModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "StyleView",
-      "bar_color": null,
-      "description_width": ""
-     }
-    },
-    "30712bf833a84da589569b9938c48744": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "326387b4454244efbd64107141e97bb4": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "DescriptionStyleModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "DescriptionStyleModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "StyleView",
-      "description_width": ""
-     }
-    },
-    "3391f9324dd54e2d9805ff576794cad6": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "HBoxModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "HBoxModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "HBoxView",
-      "box_style": "",
-      "children": [
-       "IPY_MODEL_49333829915b45928c562004251a028a",
-       "IPY_MODEL_81ab4e08e66e4c968b114d1bd3873236",
-       "IPY_MODEL_fbca2dc3468f45feae57d90e981ba6dd"
-      ],
-      "layout": "IPY_MODEL_79035c51276144c5bf371b7f22ca096b"
-     }
-    },
-    "3d7a294c48f048f29fdc8fbc6d87d084": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "3eee1e1339da4ac9b5a0c7a9f31aa972": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "HTMLModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "HTMLModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "HTMLView",
-      "description": "",
-      "description_tooltip": null,
-      "layout": "IPY_MODEL_99872cf07fb54e31b1c6bb08b3ab6e14",
-      "placeholder": "​",
-      "style": "IPY_MODEL_326387b4454244efbd64107141e97bb4",
-      "value": "config.json: 100%"
-     }
-    },
-    "42c5565c48ff42b7b59a0e3b2877b7f9": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "ProgressStyleModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "ProgressStyleModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "StyleView",
-      "bar_color": null,
-      "description_width": ""
-     }
-    },
-    "480b4cdb29604774b96387e896e0baea": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "HBoxModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "HBoxModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "HBoxView",
-      "box_style": "",
-      "children": [
-       "IPY_MODEL_3eee1e1339da4ac9b5a0c7a9f31aa972",
-       "IPY_MODEL_015a816493c54060b422aa9e368ab02d",
-       "IPY_MODEL_bb92162e1cb64043bfa8927232943781"
-      ],
-      "layout": "IPY_MODEL_e059f8c884d24652874247a3c4d66302"
-     }
-    },
-    "49333829915b45928c562004251a028a": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "HTMLModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "HTMLModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "HTMLView",
-      "description": "",
-      "description_tooltip": null,
-      "layout": "IPY_MODEL_51126917027a4c0080faee3058b516be",
-      "placeholder": "​",
-      "style": "IPY_MODEL_1a24c3b7f1ac490a87c0a5d91e677795",
-      "value": "model.safetensors: 100%"
-     }
-    },
-    "4b4f2fe608304c06a45f6174b83d11eb": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "DescriptionStyleModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "DescriptionStyleModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "StyleView",
-      "description_width": ""
-     }
-    },
-    "4c3bde6e760e4e29bb9953994ced0846": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "HBoxModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "HBoxModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "HBoxView",
-      "box_style": "",
-      "children": [
-       "IPY_MODEL_eb1f0d2b23f04b789244f725b6c69a7f",
-       "IPY_MODEL_e8762713c2474251ae95b9e0aa0edf62",
-       "IPY_MODEL_5dc87153e6f74adb85aa362f4a827f24"
-      ],
-      "layout": "IPY_MODEL_f26ef277d7d44d888fc5237bf983d6ad"
-     }
-    },
-    "51126917027a4c0080faee3058b516be": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "51d6f3349af64631ab1b9fd4d421c107": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "FloatProgressModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "FloatProgressModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "ProgressView",
-      "bar_style": "success",
-      "description": "",
-      "description_tooltip": null,
-      "layout": "IPY_MODEL_67dfb1fe63114a7095ab07afda1a0527",
-      "max": 76520,
-      "min": 0,
-      "orientation": "horizontal",
-      "style": "IPY_MODEL_c083ecdb497a4d7dac02785976c67d62",
-      "value": 76520
-     }
-    },
-    "5426d5c8d0d74349a46d4edcf0839b0a": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "DescriptionStyleModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "DescriptionStyleModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "StyleView",
-      "description_width": ""
-     }
-    },
-    "5dc87153e6f74adb85aa362f4a827f24": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "HTMLModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "HTMLModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "HTMLView",
-      "description": "",
-      "description_tooltip": null,
-      "layout": "IPY_MODEL_9a01b4fc40784d47b423c662d724a02c",
-      "placeholder": "​",
-      "style": "IPY_MODEL_e4aa64e937d0459899a604bec1165a94",
-      "value": " 115M/115M [00:00&lt;00:00, 176MB/s]"
-     }
-    },
-    "67dfb1fe63114a7095ab07afda1a0527": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "79035c51276144c5bf371b7f22ca096b": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "81ab4e08e66e4c968b114d1bd3873236": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "FloatProgressModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "FloatProgressModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "ProgressView",
-      "bar_style": "success",
-      "description": "",
-      "description_tooltip": null,
-      "layout": "IPY_MODEL_3d7a294c48f048f29fdc8fbc6d87d084",
-      "max": 115320404,
-      "min": 0,
-      "orientation": "horizontal",
-      "style": "IPY_MODEL_2c160a7b8e0f44f49d4d237408c51865",
-      "value": 115320404
-     }
-    },
-    "8ddaa3cb0c1247e3a37e15d45755a5d6": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "HBoxModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "HBoxModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "HBoxView",
-      "box_style": "",
-      "children": [
-       "IPY_MODEL_f5245458ca5e43ffb8d835aa3ffe3be1",
-       "IPY_MODEL_51d6f3349af64631ab1b9fd4d421c107",
-       "IPY_MODEL_a93fb2f3bff34f36ba9d73fe0658485d"
-      ],
-      "layout": "IPY_MODEL_f6fc50698748400198c789cf3dfee2a6"
-     }
-    },
-    "99872cf07fb54e31b1c6bb08b3ab6e14": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "9a01b4fc40784d47b423c662d724a02c": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "a93fb2f3bff34f36ba9d73fe0658485d": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "HTMLModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "HTMLModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "HTMLView",
-      "description": "",
-      "description_tooltip": null,
-      "layout": "IPY_MODEL_e0f13249bd944b3ab09204c9984ec24c",
-      "placeholder": "​",
-      "style": "IPY_MODEL_f8f07f9d3b5c4602bcdf5ba4e741e79e",
-      "value": " 76.5k/76.5k [00:00&lt;00:00, 811kB/s]"
-     }
-    },
-    "af347b83f7034eddb8c5025231202b66": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "b0d0418251b842818db2193f2c8c3ac4": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "DescriptionStyleModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "DescriptionStyleModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "StyleView",
-      "description_width": ""
-     }
-    },
-    "bb92162e1cb64043bfa8927232943781": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "HTMLModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "HTMLModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "HTMLView",
-      "description": "",
-      "description_tooltip": null,
-      "layout": "IPY_MODEL_e48615592ce94c0cb33569282a866a67",
-      "placeholder": "​",
-      "style": "IPY_MODEL_b0d0418251b842818db2193f2c8c3ac4",
-      "value": " 76.8k/76.8k [00:00&lt;00:00, 4.46MB/s]"
-     }
-    },
-    "bedb978493144b468f2b31fbc276c09b": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "c083ecdb497a4d7dac02785976c67d62": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "ProgressStyleModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "ProgressStyleModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "StyleView",
-      "bar_color": null,
-      "description_width": ""
-     }
-    },
-    "ddf22e6f887643ea955db2d3042f4f1d": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "ProgressStyleModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "ProgressStyleModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "StyleView",
-      "bar_color": null,
-      "description_width": ""
-     }
-    },
-    "e059f8c884d24652874247a3c4d66302": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "e0f13249bd944b3ab09204c9984ec24c": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "e48615592ce94c0cb33569282a866a67": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "e4aa64e937d0459899a604bec1165a94": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "DescriptionStyleModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "DescriptionStyleModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "StyleView",
-      "description_width": ""
-     }
-    },
-    "e8762713c2474251ae95b9e0aa0edf62": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "FloatProgressModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "FloatProgressModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "ProgressView",
-      "bar_style": "success",
-      "description": "",
-      "description_tooltip": null,
-      "layout": "IPY_MODEL_f357332405d04f9c912d9c4806869ba4",
-      "max": 115437156,
-      "min": 0,
-      "orientation": "horizontal",
-      "style": "IPY_MODEL_ddf22e6f887643ea955db2d3042f4f1d",
-      "value": 115437156
-     }
-    },
-    "eb1f0d2b23f04b789244f725b6c69a7f": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "HTMLModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "HTMLModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "HTMLView",
-      "description": "",
-      "description_tooltip": null,
-      "layout": "IPY_MODEL_30712bf833a84da589569b9938c48744",
-      "placeholder": "​",
-      "style": "IPY_MODEL_06d062fc98d346bbb0e298d03c23988d",
-      "value": "model.safetensors: 100%"
-     }
-    },
-    "f26ef277d7d44d888fc5237bf983d6ad": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "f357332405d04f9c912d9c4806869ba4": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "f5245458ca5e43ffb8d835aa3ffe3be1": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "HTMLModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "HTMLModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "HTMLView",
-      "description": "",
-      "description_tooltip": null,
-      "layout": "IPY_MODEL_0ff9b815f2c645af844ab9d3c0d55a0c",
-      "placeholder": "​",
-      "style": "IPY_MODEL_5426d5c8d0d74349a46d4edcf0839b0a",
-      "value": "config.json: 100%"
-     }
-    },
-    "f6fc50698748400198c789cf3dfee2a6": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "f8f07f9d3b5c4602bcdf5ba4e741e79e": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "DescriptionStyleModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "DescriptionStyleModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "StyleView",
-      "description_width": ""
-     }
-    },
-    "fbca2dc3468f45feae57d90e981ba6dd": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "HTMLModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "HTMLModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "HTMLView",
-      "description": "",
-      "description_tooltip": null,
-      "layout": "IPY_MODEL_bedb978493144b468f2b31fbc276c09b",
-      "placeholder": "​",
-      "style": "IPY_MODEL_4b4f2fe608304c06a45f6174b83d11eb",
-      "value": " 115M/115M [00:02&lt;00:00, 36.0MB/s]"
-     }
-    }
-   }
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 0
-}
diff --git a/docs/examples/node_postprocessor/LongLLMLingua.ipynb b/docs/examples/node_postprocessor/LongLLMLingua.ipynb
deleted file mode 100644
index d215350fc1b941a774ade0f8f3c14c0e53c31578..0000000000000000000000000000000000000000
--- a/docs/examples/node_postprocessor/LongLLMLingua.ipynb
+++ /dev/null
@@ -1,4455 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "# LongLLMLingua\n",
-    "\n",
-    "<a href=\"https://colab.research.google.com/github/run-llama/llama_index/blob/main/docs/examples/node_postprocessor/LongLLMLingua.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>\n",
-    "\n",
-    "LongLLMLingua is a research project/paper that presents a new method for prompt compression in the long-context setting.\n",
-    "\n",
-    "- Paper: https://arxiv.org/abs/2310.06839\n",
-    "- Repo: https://github.com/microsoft/LLMLingua\n",
-    "\n",
-    "In this guide, we show how you can seamlessly use prompt compression in your RAG pipeline. We implement LongLLMLingua as a node postprocessor, which will compress context after the retrieval step before feeding it into the LLM.\n",
-    "\n",
-    "**NOTE**: we don't implement the [subsequence recovery method](https://github.com/microsoft/LLMLingua/blob/main/DOCUMENT.md#post-precessing) since that is after the step of processing the nodes.\n",
-    "\n",
-    "**NOTE**: You need quite a bit of RAM/GPU capacity to run this. We got it working on Colab Pro with a V100 instance."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "%pip install llama-index-postprocessor-longllmlingua"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "!pip install llmlingua llama-index"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "import openai"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "openai.api_key = \"<insert_openai_key>\""
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## Setup (Data + Index)\n",
-    "\n",
-    "We load in PG's essay, index it, and define a retriever."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "!wget \"https://www.dropbox.com/s/f6bmb19xdg0xedm/paul_graham_essay.txt?dl=1\" -O paul_graham_essay.txt"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "from llama_index.core import (\n",
-    "    VectorStoreIndex,\n",
-    "    SimpleDirectoryReader,\n",
-    "    load_index_from_storage,\n",
-    "    StorageContext,\n",
-    ")"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# load documents\n",
-    "documents = SimpleDirectoryReader(\n",
-    "    input_files=[\"paul_graham_essay.txt\"]\n",
-    ").load_data()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "index = VectorStoreIndex.from_documents(documents)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "retriever = index.as_retriever(similarity_top_k=2)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# query_str = \"What did the author do growing up?\"\n",
-    "# query_str = \"What did the author do during his time in YC?\"\n",
-    "query_str = \"Where did the author go for art school?\""
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "results = retriever.retrieve(query_str)\n",
-    "print(results)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "results"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## Setup LongLLMLingua as a Postprocessor\n",
-    "\n",
-    "We setup `LongLLMLinguaPostprocessor` which will use the `longllmlingua` package to run prompt compression.\n",
-    "\n",
-    "We specify a target token size of 300, and supply an instruction string.\n",
-    "\n",
-    "Special thanks to Huiqiang J. for the help with the parameters."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "application/vnd.jupyter.widget-view+json": {
-       "model_id": "57f58855b3244325963cd7c9d7c0aa6c",
-       "version_major": 2,
-       "version_minor": 0
-      },
-      "text/plain": [
-       "Loading checkpoint shards:   0%|          | 0/2 [00:00<?, ?it/s]"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    }
-   ],
-   "source": [
-    "from llama_index.core.query_engine import RetrieverQueryEngine\n",
-    "from llama_index.core.response_synthesizers import CompactAndRefine\n",
-    "from llama_index.postprocessor.longllmlingua import LongLLMLinguaPostprocessor\n",
-    "\n",
-    "node_postprocessor = LongLLMLinguaPostprocessor(\n",
-    "    instruction_str=\"Given the context, please answer the final question\",\n",
-    "    target_token=300,\n",
-    "    rank_method=\"longllmlingua\",\n",
-    "    additional_compress_kwargs={\n",
-    "        \"condition_compare\": True,\n",
-    "        \"condition_in_question\": \"after\",\n",
-    "        \"context_budget\": \"+100\",\n",
-    "        \"reorder_context\": \"sort\",  # enable document reorder\n",
-    "    },\n",
-    ")"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## Try It Out\n",
-    "\n",
-    "We show you how to compose a retriever + compressor + query engine into a RAG pipeline.\n",
-    "1. We show you this step by step.\n",
-    "2. We show you how to do this in an out-of-the-box fashion with our `RetrieverQueryEngine`."
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "### Step-by-Step"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "retrieved_nodes = retriever.retrieve(query_str)\n",
-    "synthesizer = CompactAndRefine()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "from llama_index.core import QueryBundle\n",
-    "\n",
-    "# outline steps in RetrieverQueryEngine for clarity:\n",
-    "# postprocess (compress), synthesize\n",
-    "new_retrieved_nodes = node_postprocessor.postprocess_nodes(\n",
-    "    retrieved_nodes, query_bundle=QueryBundle(query_str=query_str)\n",
-    ")"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "' why artists have a signature style, but' buyers pay a lot work.\n",
-      "\n",
-      "I a lot the color class I tookISD, but I teaching myself I do for in 199 I dropped out I hung around Providence for a bit and then my friendmet did me big favor. A rent-control apartment a her mother in New York becoming vacant. Did I want it It wasn't much more my current place, and New York supposed to be where the artists were yes, I wanted7Id for the BFA at RISD, meant effect that had to go again. This was as as it sounds because I was only2 and art full people of different ages. RIS me as a transfer sophomore and said do the. The foundation means the classes that everyone has to fundamental subjects like color, and design.\n",
-      "anwhile was applying schools applied to two: RISD the US, and the Accadem di Belli Arti Florence, which, because was oldest art, I imagined be good RIS accepted me, and never heard back from the Accademia, off Providence I went.\n",
-      " liked on square canv 5 on a side One194 as was stretch one of these monsters there something on the radio about a fund manager. He' that much older than me, and was super rich. The thought suddenly occurred to me: why don't I become rich? Then I'll be able to work on whatever I want.\n"
-     ]
-    }
-   ],
-   "source": [
-    "print(\"\\n\\n\".join([n.get_content() for n in new_retrieved_nodes]))"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "response = synthesizer.synthesize(query_str, new_retrieved_nodes)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "The author went to RISD for art school.\n"
-     ]
-    }
-   ],
-   "source": [
-    "print(str(response))"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "### Out of the box with `RetrieverQueryEngine`"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "retriever_query_engine = RetrieverQueryEngine.from_args(\n",
-    "    retriever, node_postprocessors=[node_postprocessor]\n",
-    ")"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "response = retriever_query_engine.query(query_str)\n",
-    "print(str(response))"
-   ]
-  }
- ],
- "metadata": {
-  "accelerator": "GPU",
-  "colab": {
-   "gpuType": "V100",
-   "machine_shape": "hm",
-   "provenance": []
-  },
-  "kernelspec": {
-   "display_name": "Python 3 (ipykernel)",
-   "language": "python",
-   "name": "python3"
-  },
-  "language_info": {
-   "codemirror_mode": {
-    "name": "ipython",
-    "version": 3
-   },
-   "file_extension": ".py",
-   "mimetype": "text/x-python",
-   "name": "python",
-   "nbconvert_exporter": "python",
-   "pygments_lexer": "ipython3"
-  },
-  "widgets": {
-   "application/vnd.jupyter.widget-state+json": {
-    "0117512be0ff4830ad75971d102cc44b": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "HBoxModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "HBoxModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "HBoxView",
-      "box_style": "",
-      "children": [
-       "IPY_MODEL_b20e5ada961c4eebb743c553fd626053",
-       "IPY_MODEL_0e2709f9411243d19edda363bb539159",
-       "IPY_MODEL_5b19a403d4a74d9588beb39e9d05bf11"
-      ],
-      "layout": "IPY_MODEL_9e79b3fdee9b4d62916f25f344a03501"
-     }
-    },
-    "013ec62d883e40b1abd939a7998f3943": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "033ee9b2f03e485f96fd079d97bb2126": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "047a74817587449b88592e3675a62c2d": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "HBoxModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "HBoxModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "HBoxView",
-      "box_style": "",
-      "children": [
-       "IPY_MODEL_b07cb8ab7c3c4aa59ef52bb1ea0efde7",
-       "IPY_MODEL_48d750085f574076a2f1a13664d63557",
-       "IPY_MODEL_e556177bf895445d858ee57390cb6b78"
-      ],
-      "layout": "IPY_MODEL_c0f02200ab1349eb8140bef2199ba46b"
-     }
-    },
-    "04826b2e6b174d8198e1fe04a37e8f84": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "HBoxModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "HBoxModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "HBoxView",
-      "box_style": "",
-      "children": [
-       "IPY_MODEL_0cd1240875d842fcaca25dd89b8df03f",
-       "IPY_MODEL_3227f325f41e4d55b5c9a637a74433e0",
-       "IPY_MODEL_2dd73377240a4d9a8794b55741a5f6cf"
-      ],
-      "layout": "IPY_MODEL_22ea99342f544242a0e63e603190c555"
-     }
-    },
-    "0824344423684de2ac183425efa511d7": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "HBoxModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "HBoxModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "HBoxView",
-      "box_style": "",
-      "children": [
-       "IPY_MODEL_7a8340a92fff437c8b8a56e6d126047d",
-       "IPY_MODEL_554e925139554ac09a729218515e873e",
-       "IPY_MODEL_37e668d91db44661bee0379dbc04ce8d"
-      ],
-      "layout": "IPY_MODEL_1a68c8e5baa44ff3b1d4ad0438406f81"
-     }
-    },
-    "0c2202e6c63a403fa9df297582c91cc1": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "DescriptionStyleModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "DescriptionStyleModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "StyleView",
-      "description_width": ""
-     }
-    },
-    "0cd1240875d842fcaca25dd89b8df03f": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "HTMLModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "HTMLModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "HTMLView",
-      "description": "",
-      "description_tooltip": null,
-      "layout": "IPY_MODEL_7a0b1f2231574041ba992776e1eca535",
-      "placeholder": "​",
-      "style": "IPY_MODEL_4e8ea1cb4c3b4fe397f464e3aaf75e4d",
-      "value": "Downloading (…)okenizer_config.json: 100%"
-     }
-    },
-    "0d29eb33cfbd4c07985d6b27ff65c232": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "0e2709f9411243d19edda363bb539159": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "FloatProgressModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "FloatProgressModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "ProgressView",
-      "bar_style": "success",
-      "description": "",
-      "description_tooltip": null,
-      "layout": "IPY_MODEL_013ec62d883e40b1abd939a7998f3943",
-      "max": 179,
-      "min": 0,
-      "orientation": "horizontal",
-      "style": "IPY_MODEL_3f98a36530b64f26b2427ce9ab8ed8fb",
-      "value": 179
-     }
-    },
-    "1360242caa654c9c9f45130789704d4d": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "13d848ae38f74923bb4a9844a614a1f0": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "169fcf47445143a6948d81e55096febc": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "ProgressStyleModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "ProgressStyleModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "StyleView",
-      "bar_color": null,
-      "description_width": ""
-     }
-    },
-    "1a68c8e5baa44ff3b1d4ad0438406f81": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "1bee952cf38a4f36a38a5e4e455c50b7": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "1ce497174799458ea03784761bbb6fb3": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "FloatProgressModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "FloatProgressModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "ProgressView",
-      "bar_style": "success",
-      "description": "",
-      "description_tooltip": null,
-      "layout": "IPY_MODEL_9bacfe3e57f74a8eaf045c41101440da",
-      "max": 3500297344,
-      "min": 0,
-      "orientation": "horizontal",
-      "style": "IPY_MODEL_c6922fc16f414995bc080617c00debd7",
-      "value": 3500297344
-     }
-    },
-    "1e35d9d12ca14362af31b0e7d7c2e18a": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "ProgressStyleModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "ProgressStyleModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "StyleView",
-      "bar_color": null,
-      "description_width": ""
-     }
-    },
-    "1f1f1eeea9cc4d8bae7a379ba281dce0": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "DescriptionStyleModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "DescriptionStyleModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "StyleView",
-      "description_width": ""
-     }
-    },
-    "22ea99342f544242a0e63e603190c555": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "24f2c789dba145829905ac30b89441d3": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "HTMLModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "HTMLModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "HTMLView",
-      "description": "",
-      "description_tooltip": null,
-      "layout": "IPY_MODEL_59ddc17e460b4cbcabcb9c6b1bcfbabe",
-      "placeholder": "​",
-      "style": "IPY_MODEL_8757763766694ac88ed74005c699c21e",
-      "value": " 2/2 [11:23&lt;00:00, 313.94s/it]"
-     }
-    },
-    "25076c9060e140ec89510f209cac806a": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "HBoxModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "HBoxModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "HBoxView",
-      "box_style": "",
-      "children": [
-       "IPY_MODEL_beb102a30e744b04947dbaab58444fad",
-       "IPY_MODEL_887693f38a7d44ab94e8f34b1d757fe1",
-       "IPY_MODEL_24f2c789dba145829905ac30b89441d3"
-      ],
-      "layout": "IPY_MODEL_e8688f5e044f40638a0af12be0443d1e"
-     }
-    },
-    "25137b21c0a44b4e88d453d03eea1a37": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "DescriptionStyleModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "DescriptionStyleModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "StyleView",
-      "description_width": ""
-     }
-    },
-    "26467e78b12244e4824a5b2e52ca8de2": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "26e57d49407f443ba000542402117fb6": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "DescriptionStyleModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "DescriptionStyleModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "StyleView",
-      "description_width": ""
-     }
-    },
-    "2a1dd8104f9c43ce84d4565e5883c72f": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "2a2be67fccfc478691a26a3c1c6fa87d": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "2c0bd33fdffc48bf9c7aa721403d5dd3": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "DescriptionStyleModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "DescriptionStyleModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "StyleView",
-      "description_width": ""
-     }
-    },
-    "2ce030c0778144e3b3d17130a4ba1944": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "2dd73377240a4d9a8794b55741a5f6cf": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "HTMLModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "HTMLModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "HTMLView",
-      "description": "",
-      "description_tooltip": null,
-      "layout": "IPY_MODEL_f79a31b23d66499ea29177ef2b09eba9",
-      "placeholder": "​",
-      "style": "IPY_MODEL_7e2a5a2e9c4049309513bf9762ca7ea1",
-      "value": " 746/746 [00:00&lt;00:00, 69.9kB/s]"
-     }
-    },
-    "306fe8800b824737a960862fa0e5d7a3": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "ProgressStyleModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "ProgressStyleModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "StyleView",
-      "bar_color": null,
-      "description_width": ""
-     }
-    },
-    "315ef52c3205421b9b7b11b61731547f": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "ProgressStyleModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "ProgressStyleModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "StyleView",
-      "bar_color": null,
-      "description_width": ""
-     }
-    },
-    "3227f325f41e4d55b5c9a637a74433e0": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "FloatProgressModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "FloatProgressModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "ProgressView",
-      "bar_style": "success",
-      "description": "",
-      "description_tooltip": null,
-      "layout": "IPY_MODEL_f7a50a4aaec94099a3199d602463dc38",
-      "max": 746,
-      "min": 0,
-      "orientation": "horizontal",
-      "style": "IPY_MODEL_1e35d9d12ca14362af31b0e7d7c2e18a",
-      "value": 746
-     }
-    },
-    "35e790fed43844c1a39cb4d9f52438be": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "HBoxModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "HBoxModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "HBoxView",
-      "box_style": "",
-      "children": [
-       "IPY_MODEL_91bf2f216be44c25b8ba43d57048564e",
-       "IPY_MODEL_4aacb5c6829e44cfba5e640eb7399df4",
-       "IPY_MODEL_f8158f7b18264b0c80b490ef2df1c382"
-      ],
-      "layout": "IPY_MODEL_8eb0d0193e044078a8abf2641f32a7e0"
-     }
-    },
-    "37e668d91db44661bee0379dbc04ce8d": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "HTMLModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "HTMLModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "HTMLView",
-      "description": "",
-      "description_tooltip": null,
-      "layout": "IPY_MODEL_2a1dd8104f9c43ce84d4565e5883c72f",
-      "placeholder": "​",
-      "style": "IPY_MODEL_d470a9aa2c4e4ccd8ce6f3e0d55a0b74",
-      "value": " 583/583 [00:00&lt;00:00, 37.1kB/s]"
-     }
-    },
-    "3a24207d299e4994a335c8a6178be3d2": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "3ba69aa7b82043ecaf00785e518bc124": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "3bbc81764eba4f98ac75ca76bac7ee55": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "3f3df83f5dc14fc79a00c42b1561cd11": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "ProgressStyleModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "ProgressStyleModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "StyleView",
-      "bar_color": null,
-      "description_width": ""
-     }
-    },
-    "3f98a36530b64f26b2427ce9ab8ed8fb": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "ProgressStyleModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "ProgressStyleModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "StyleView",
-      "bar_color": null,
-      "description_width": ""
-     }
-    },
-    "4450347a42ed491fa3870336a4e08e01": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "HTMLModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "HTMLModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "HTMLView",
-      "description": "",
-      "description_tooltip": null,
-      "layout": "IPY_MODEL_a58496fb7d314ff083e393dd3b1822e2",
-      "placeholder": "​",
-      "style": "IPY_MODEL_60a37df25f0840d0a3e2b5da5032213b",
-      "value": "Downloading (…)/main/tokenizer.json: 100%"
-     }
-    },
-    "48d750085f574076a2f1a13664d63557": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "FloatProgressModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "FloatProgressModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "ProgressView",
-      "bar_style": "success",
-      "description": "",
-      "description_tooltip": null,
-      "layout": "IPY_MODEL_aef3e24fc21f4c8e8639660249454bc4",
-      "max": 9976578928,
-      "min": 0,
-      "orientation": "horizontal",
-      "style": "IPY_MODEL_49f4d8cdb13441ea839d434cb1ae74b0",
-      "value": 9976578928
-     }
-    },
-    "49f4d8cdb13441ea839d434cb1ae74b0": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "ProgressStyleModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "ProgressStyleModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "StyleView",
-      "bar_color": null,
-      "description_width": ""
-     }
-    },
-    "4aacb5c6829e44cfba5e640eb7399df4": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "FloatProgressModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "FloatProgressModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "ProgressView",
-      "bar_style": "success",
-      "description": "",
-      "description_tooltip": null,
-      "layout": "IPY_MODEL_26467e78b12244e4824a5b2e52ca8de2",
-      "max": 499723,
-      "min": 0,
-      "orientation": "horizontal",
-      "style": "IPY_MODEL_3f3df83f5dc14fc79a00c42b1561cd11",
-      "value": 499723
-     }
-    },
-    "4c78c0d010ec48faba249a20b075d07e": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "DescriptionStyleModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "DescriptionStyleModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "StyleView",
-      "description_width": ""
-     }
-    },
-    "4d0920a28b9d46bf82b2da3cd697137e": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "4e8ea1cb4c3b4fe397f464e3aaf75e4d": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "DescriptionStyleModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "DescriptionStyleModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "StyleView",
-      "description_width": ""
-     }
-    },
-    "53f8d7649b4348b19e960ea3c58fd089": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "FloatProgressModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "FloatProgressModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "ProgressView",
-      "bar_style": "success",
-      "description": "",
-      "description_tooltip": null,
-      "layout": "IPY_MODEL_81a765f5cf004429b3de13ef8dee91cc",
-      "max": 2,
-      "min": 0,
-      "orientation": "horizontal",
-      "style": "IPY_MODEL_9128a81eb8ee4672affb81eebb9aec7a",
-      "value": 2
-     }
-    },
-    "554e925139554ac09a729218515e873e": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "FloatProgressModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "FloatProgressModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "ProgressView",
-      "bar_style": "success",
-      "description": "",
-      "description_tooltip": null,
-      "layout": "IPY_MODEL_7cbf790ef7474389b0bb37ce56556972",
-      "max": 583,
-      "min": 0,
-      "orientation": "horizontal",
-      "style": "IPY_MODEL_169fcf47445143a6948d81e55096febc",
-      "value": 583
-     }
-    },
-    "57f58855b3244325963cd7c9d7c0aa6c": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "HBoxModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "HBoxModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "HBoxView",
-      "box_style": "",
-      "children": [
-       "IPY_MODEL_ad5fe1eb651f4f64a95f1f5e745b960d",
-       "IPY_MODEL_bea861a65e674fa4bbb2492f3e568500",
-       "IPY_MODEL_94c1b4c3e10b421da30d1dc3b93381bb"
-      ],
-      "layout": "IPY_MODEL_9cb19567558f4d579b902b10deaf62df"
-     }
-    },
-    "59ddc17e460b4cbcabcb9c6b1bcfbabe": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "5b19a403d4a74d9588beb39e9d05bf11": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "HTMLModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "HTMLModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "HTMLView",
-      "description": "",
-      "description_tooltip": null,
-      "layout": "IPY_MODEL_a411dd21700d43feb0c76d3402afeb8b",
-      "placeholder": "​",
-      "style": "IPY_MODEL_76c0116324b242a996c89ea0d68f12de",
-      "value": " 179/179 [00:00&lt;00:00, 15.2kB/s]"
-     }
-    },
-    "5b5fb8b4c36540dcb5dd4f7a68cbf036": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "ProgressStyleModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "ProgressStyleModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "StyleView",
-      "bar_color": null,
-      "description_width": ""
-     }
-    },
-    "5ef6010860664f898b7d3addb2096e97": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "DescriptionStyleModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "DescriptionStyleModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "StyleView",
-      "description_width": ""
-     }
-    },
-    "605ea1c2ebd94796a7d17c46d8303a2d": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "60a37df25f0840d0a3e2b5da5032213b": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "DescriptionStyleModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "DescriptionStyleModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "StyleView",
-      "description_width": ""
-     }
-    },
-    "69d53136a5cb4ac79d4c71b47d975880": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "6cea91bfae2a43a682aa6b997cb1facf": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "HTMLModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "HTMLModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "HTMLView",
-      "description": "",
-      "description_tooltip": null,
-      "layout": "IPY_MODEL_3ba69aa7b82043ecaf00785e518bc124",
-      "placeholder": "​",
-      "style": "IPY_MODEL_0c2202e6c63a403fa9df297582c91cc1",
-      "value": " 26.8k/26.8k [00:00&lt;00:00, 2.23MB/s]"
-     }
-    },
-    "6fd7d61a8fe647a59b07ffde58142264": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "ProgressStyleModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "ProgressStyleModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "StyleView",
-      "bar_color": null,
-      "description_width": ""
-     }
-    },
-    "76c0116324b242a996c89ea0d68f12de": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "DescriptionStyleModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "DescriptionStyleModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "StyleView",
-      "description_width": ""
-     }
-    },
-    "7a0b1f2231574041ba992776e1eca535": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "7a80475695214829a7d0f5e02e58d833": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "7a8340a92fff437c8b8a56e6d126047d": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "HTMLModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "HTMLModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "HTMLView",
-      "description": "",
-      "description_tooltip": null,
-      "layout": "IPY_MODEL_9e7770f8875048fa94463fd73208406a",
-      "placeholder": "​",
-      "style": "IPY_MODEL_a834a484e0374ecb890c9a42f69e8ebd",
-      "value": "Downloading (…)lve/main/config.json: 100%"
-     }
-    },
-    "7cbf790ef7474389b0bb37ce56556972": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "7daaaa3e625d4a3184985b71ee2a3881": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "HBoxModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "HBoxModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "HBoxView",
-      "box_style": "",
-      "children": [
-       "IPY_MODEL_4450347a42ed491fa3870336a4e08e01",
-       "IPY_MODEL_8023a98f44964d0a9388b25b1688ac35",
-       "IPY_MODEL_e4bee42a02b54378869ad754b7e2e0c2"
-      ],
-      "layout": "IPY_MODEL_1360242caa654c9c9f45130789704d4d"
-     }
-    },
-    "7db11a0f3d1e48c884544475f9915e9c": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "HBoxModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "HBoxModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "HBoxView",
-      "box_style": "",
-      "children": [
-       "IPY_MODEL_e8002821abbb444a9e9a5cb71b0636c5",
-       "IPY_MODEL_c58b177e5d014707a763f2138b1b2dc9",
-       "IPY_MODEL_ff989f01c895414f8869064cb4254f57"
-      ],
-      "layout": "IPY_MODEL_c515f467b1ed4b68b759b8ec9983cb39"
-     }
-    },
-    "7e2a5a2e9c4049309513bf9762ca7ea1": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "DescriptionStyleModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "DescriptionStyleModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "StyleView",
-      "description_width": ""
-     }
-    },
-    "8023a98f44964d0a9388b25b1688ac35": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "FloatProgressModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "FloatProgressModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "ProgressView",
-      "bar_style": "success",
-      "description": "",
-      "description_tooltip": null,
-      "layout": "IPY_MODEL_3bbc81764eba4f98ac75ca76bac7ee55",
-      "max": 1842764,
-      "min": 0,
-      "orientation": "horizontal",
-      "style": "IPY_MODEL_6fd7d61a8fe647a59b07ffde58142264",
-      "value": 1842764
-     }
-    },
-    "81a765f5cf004429b3de13ef8dee91cc": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "842f92a4a6774a2495e8b50503c492f8": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "8757763766694ac88ed74005c699c21e": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "DescriptionStyleModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "DescriptionStyleModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "StyleView",
-      "description_width": ""
-     }
-    },
-    "887693f38a7d44ab94e8f34b1d757fe1": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "FloatProgressModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "FloatProgressModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "ProgressView",
-      "bar_style": "success",
-      "description": "",
-      "description_tooltip": null,
-      "layout": "IPY_MODEL_dbd57693d6974d829194014c8190f0b4",
-      "max": 2,
-      "min": 0,
-      "orientation": "horizontal",
-      "style": "IPY_MODEL_5b5fb8b4c36540dcb5dd4f7a68cbf036",
-      "value": 2
-     }
-    },
-    "8ab6698b11514ff0a65886ac233624a5": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "DescriptionStyleModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "DescriptionStyleModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "StyleView",
-      "description_width": ""
-     }
-    },
-    "8d89a35d6ce7483c9f90b39c9c6b8ee9": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "8df43ec3c129445d9108cf90d880f4cc": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "8eb0d0193e044078a8abf2641f32a7e0": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "90863f352ff543159aa27fc147ce28bd": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "9128a81eb8ee4672affb81eebb9aec7a": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "ProgressStyleModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "ProgressStyleModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "StyleView",
-      "bar_color": null,
-      "description_width": ""
-     }
-    },
-    "91bf2f216be44c25b8ba43d57048564e": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "HTMLModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "HTMLModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "HTMLView",
-      "description": "",
-      "description_tooltip": null,
-      "layout": "IPY_MODEL_d493f88510e0471fb5741a407b165613",
-      "placeholder": "​",
-      "style": "IPY_MODEL_5ef6010860664f898b7d3addb2096e97",
-      "value": "Downloading tokenizer.model: 100%"
-     }
-    },
-    "94c1b4c3e10b421da30d1dc3b93381bb": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "HTMLModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "HTMLModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "HTMLView",
-      "description": "",
-      "description_tooltip": null,
-      "layout": "IPY_MODEL_033ee9b2f03e485f96fd079d97bb2126",
-      "placeholder": "​",
-      "style": "IPY_MODEL_c263cd2e5d274608848bdccb2876524c",
-      "value": " 2/2 [00:01&lt;00:00,  1.25it/s]"
-     }
-    },
-    "9bacfe3e57f74a8eaf045c41101440da": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "9cb19567558f4d579b902b10deaf62df": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "9d16c12c30494fa7bb13192ebfa71026": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "HTMLModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "HTMLModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "HTMLView",
-      "description": "",
-      "description_tooltip": null,
-      "layout": "IPY_MODEL_ae3c42db470b44ae9dc92cb17ca34aae",
-      "placeholder": "​",
-      "style": "IPY_MODEL_8ab6698b11514ff0a65886ac233624a5",
-      "value": " 3.50G/3.50G [03:02&lt;00:00, 17.7MB/s]"
-     }
-    },
-    "9e7770f8875048fa94463fd73208406a": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "9e79b3fdee9b4d62916f25f344a03501": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "a21852225e924a648b1e9513905c7dec": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "ProgressStyleModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "ProgressStyleModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "StyleView",
-      "bar_color": null,
-      "description_width": ""
-     }
-    },
-    "a323269572744f53b5b9671ed579f502": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "DescriptionStyleModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "DescriptionStyleModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "StyleView",
-      "description_width": ""
-     }
-    },
-    "a411dd21700d43feb0c76d3402afeb8b": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "a58496fb7d314ff083e393dd3b1822e2": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "a6640aa4ecf6494fa250c671d4c65027": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "DescriptionStyleModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "DescriptionStyleModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "StyleView",
-      "description_width": ""
-     }
-    },
-    "a7cffea8ad20496f9ab133d99ea636e3": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "HBoxModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "HBoxModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "HBoxView",
-      "box_style": "",
-      "children": [
-       "IPY_MODEL_ea38439dd4b24bfdacd6155733e17671",
-       "IPY_MODEL_53f8d7649b4348b19e960ea3c58fd089",
-       "IPY_MODEL_eb508ac7f2434cd4bfc5daf9f42a389d"
-      ],
-      "layout": "IPY_MODEL_1bee952cf38a4f36a38a5e4e455c50b7"
-     }
-    },
-    "a834a484e0374ecb890c9a42f69e8ebd": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "DescriptionStyleModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "DescriptionStyleModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "StyleView",
-      "description_width": ""
-     }
-    },
-    "a9dac62c7c5144fdba0bd3f49dd3b3b2": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "FloatProgressModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "FloatProgressModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "ProgressView",
-      "bar_style": "success",
-      "description": "",
-      "description_tooltip": null,
-      "layout": "IPY_MODEL_842f92a4a6774a2495e8b50503c492f8",
-      "max": 26788,
-      "min": 0,
-      "orientation": "horizontal",
-      "style": "IPY_MODEL_306fe8800b824737a960862fa0e5d7a3",
-      "value": 26788
-     }
-    },
-    "ad5fe1eb651f4f64a95f1f5e745b960d": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "HTMLModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "HTMLModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "HTMLView",
-      "description": "",
-      "description_tooltip": null,
-      "layout": "IPY_MODEL_90863f352ff543159aa27fc147ce28bd",
-      "placeholder": "​",
-      "style": "IPY_MODEL_25137b21c0a44b4e88d453d03eea1a37",
-      "value": "Loading checkpoint shards: 100%"
-     }
-    },
-    "ae3c42db470b44ae9dc92cb17ca34aae": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "aef3e24fc21f4c8e8639660249454bc4": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "af2b9cc2d363479ca3a14eb679c568b2": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "DescriptionStyleModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "DescriptionStyleModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "StyleView",
-      "description_width": ""
-     }
-    },
-    "b07cb8ab7c3c4aa59ef52bb1ea0efde7": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "HTMLModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "HTMLModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "HTMLView",
-      "description": "",
-      "description_tooltip": null,
-      "layout": "IPY_MODEL_13d848ae38f74923bb4a9844a614a1f0",
-      "placeholder": "​",
-      "style": "IPY_MODEL_4c78c0d010ec48faba249a20b075d07e",
-      "value": "Downloading (…)of-00002.safetensors: 100%"
-     }
-    },
-    "b20e5ada961c4eebb743c553fd626053": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "HTMLModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "HTMLModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "HTMLView",
-      "description": "",
-      "description_tooltip": null,
-      "layout": "IPY_MODEL_e36aeb4d01cb49d1b95ea5ef6ac6ddf4",
-      "placeholder": "​",
-      "style": "IPY_MODEL_af2b9cc2d363479ca3a14eb679c568b2",
-      "value": "Downloading (…)neration_config.json: 100%"
-     }
-    },
-    "b9203c5fb7124274ac6e1d8bfca684f8": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "HTMLModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "HTMLModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "HTMLView",
-      "description": "",
-      "description_tooltip": null,
-      "layout": "IPY_MODEL_2ce030c0778144e3b3d17130a4ba1944",
-      "placeholder": "​",
-      "style": "IPY_MODEL_c477d655450c48c4be142fe4cedd2cfc",
-      "value": "Downloading (…)fetensors.index.json: 100%"
-     }
-    },
-    "bea861a65e674fa4bbb2492f3e568500": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "FloatProgressModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "FloatProgressModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "ProgressView",
-      "bar_style": "success",
-      "description": "",
-      "description_tooltip": null,
-      "layout": "IPY_MODEL_2a2be67fccfc478691a26a3c1c6fa87d",
-      "max": 2,
-      "min": 0,
-      "orientation": "horizontal",
-      "style": "IPY_MODEL_315ef52c3205421b9b7b11b61731547f",
-      "value": 2
-     }
-    },
-    "beb102a30e744b04947dbaab58444fad": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "HTMLModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "HTMLModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "HTMLView",
-      "description": "",
-      "description_tooltip": null,
-      "layout": "IPY_MODEL_dd53513258474658b09212be6883f1b0",
-      "placeholder": "​",
-      "style": "IPY_MODEL_a323269572744f53b5b9671ed579f502",
-      "value": "Downloading shards: 100%"
-     }
-    },
-    "c05189ea4e504abb887093d649d2f045": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "DescriptionStyleModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "DescriptionStyleModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "StyleView",
-      "description_width": ""
-     }
-    },
-    "c0f02200ab1349eb8140bef2199ba46b": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "c215a56fb7d04a58a15ab0199688b24d": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "c263cd2e5d274608848bdccb2876524c": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "DescriptionStyleModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "DescriptionStyleModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "StyleView",
-      "description_width": ""
-     }
-    },
-    "c477d655450c48c4be142fe4cedd2cfc": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "DescriptionStyleModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "DescriptionStyleModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "StyleView",
-      "description_width": ""
-     }
-    },
-    "c515f467b1ed4b68b759b8ec9983cb39": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "c58b177e5d014707a763f2138b1b2dc9": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "FloatProgressModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "FloatProgressModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "ProgressView",
-      "bar_style": "success",
-      "description": "",
-      "description_tooltip": null,
-      "layout": "IPY_MODEL_f6c31689adb34379aa9160164c3a7af7",
-      "max": 435,
-      "min": 0,
-      "orientation": "horizontal",
-      "style": "IPY_MODEL_a21852225e924a648b1e9513905c7dec",
-      "value": 435
-     }
-    },
-    "c6922fc16f414995bc080617c00debd7": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "ProgressStyleModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "ProgressStyleModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "StyleView",
-      "bar_color": null,
-      "description_width": ""
-     }
-    },
-    "c7069706e4d74a37b58a659c8894a9ce": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "cb904f750e0c46759fd8f24bfc8d3ceb": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "DescriptionStyleModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "DescriptionStyleModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "StyleView",
-      "description_width": ""
-     }
-    },
-    "d470a9aa2c4e4ccd8ce6f3e0d55a0b74": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "DescriptionStyleModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "DescriptionStyleModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "StyleView",
-      "description_width": ""
-     }
-    },
-    "d493f88510e0471fb5741a407b165613": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "d6536276b75f463891c95df6a391842a": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "HBoxModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "HBoxModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "HBoxView",
-      "box_style": "",
-      "children": [
-       "IPY_MODEL_b9203c5fb7124274ac6e1d8bfca684f8",
-       "IPY_MODEL_a9dac62c7c5144fdba0bd3f49dd3b3b2",
-       "IPY_MODEL_6cea91bfae2a43a682aa6b997cb1facf"
-      ],
-      "layout": "IPY_MODEL_c7069706e4d74a37b58a659c8894a9ce"
-     }
-    },
-    "d741bb05090e4e618fe6a1144ef457dc": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "HBoxModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "HBoxModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "HBoxView",
-      "box_style": "",
-      "children": [
-       "IPY_MODEL_da6d5559e2a24ee9a9bd9ea3d9e5ba8a",
-       "IPY_MODEL_1ce497174799458ea03784761bbb6fb3",
-       "IPY_MODEL_9d16c12c30494fa7bb13192ebfa71026"
-      ],
-      "layout": "IPY_MODEL_0d29eb33cfbd4c07985d6b27ff65c232"
-     }
-    },
-    "da6d5559e2a24ee9a9bd9ea3d9e5ba8a": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "HTMLModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "HTMLModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "HTMLView",
-      "description": "",
-      "description_tooltip": null,
-      "layout": "IPY_MODEL_605ea1c2ebd94796a7d17c46d8303a2d",
-      "placeholder": "​",
-      "style": "IPY_MODEL_ed4fb7067e1e433ab543053f49f72d7d",
-      "value": "Downloading (…)of-00002.safetensors: 100%"
-     }
-    },
-    "dbd57693d6974d829194014c8190f0b4": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "dd53513258474658b09212be6883f1b0": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "e36aeb4d01cb49d1b95ea5ef6ac6ddf4": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "e4bee42a02b54378869ad754b7e2e0c2": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "HTMLModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "HTMLModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "HTMLView",
-      "description": "",
-      "description_tooltip": null,
-      "layout": "IPY_MODEL_4d0920a28b9d46bf82b2da3cd697137e",
-      "placeholder": "​",
-      "style": "IPY_MODEL_cb904f750e0c46759fd8f24bfc8d3ceb",
-      "value": " 1.84M/1.84M [00:00&lt;00:00, 1.88MB/s]"
-     }
-    },
-    "e556177bf895445d858ee57390cb6b78": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "HTMLModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "HTMLModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "HTMLView",
-      "description": "",
-      "description_tooltip": null,
-      "layout": "IPY_MODEL_c215a56fb7d04a58a15ab0199688b24d",
-      "placeholder": "​",
-      "style": "IPY_MODEL_26e57d49407f443ba000542402117fb6",
-      "value": " 9.98G/9.98G [08:18&lt;00:00, 20.3MB/s]"
-     }
-    },
-    "e8002821abbb444a9e9a5cb71b0636c5": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "HTMLModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "HTMLModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "HTMLView",
-      "description": "",
-      "description_tooltip": null,
-      "layout": "IPY_MODEL_3a24207d299e4994a335c8a6178be3d2",
-      "placeholder": "​",
-      "style": "IPY_MODEL_a6640aa4ecf6494fa250c671d4c65027",
-      "value": "Downloading (…)cial_tokens_map.json: 100%"
-     }
-    },
-    "e8688f5e044f40638a0af12be0443d1e": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "ea38439dd4b24bfdacd6155733e17671": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "HTMLModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "HTMLModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "HTMLView",
-      "description": "",
-      "description_tooltip": null,
-      "layout": "IPY_MODEL_7a80475695214829a7d0f5e02e58d833",
-      "placeholder": "​",
-      "style": "IPY_MODEL_1f1f1eeea9cc4d8bae7a379ba281dce0",
-      "value": "Loading checkpoint shards: 100%"
-     }
-    },
-    "eb508ac7f2434cd4bfc5daf9f42a389d": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "HTMLModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "HTMLModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "HTMLView",
-      "description": "",
-      "description_tooltip": null,
-      "layout": "IPY_MODEL_8d89a35d6ce7483c9f90b39c9c6b8ee9",
-      "placeholder": "​",
-      "style": "IPY_MODEL_f0e04cbe0d7d42eb8a06a9b6f3c2e570",
-      "value": " 2/2 [00:01&lt;00:00,  1.40it/s]"
-     }
-    },
-    "ed4fb7067e1e433ab543053f49f72d7d": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "DescriptionStyleModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "DescriptionStyleModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "StyleView",
-      "description_width": ""
-     }
-    },
-    "f0e04cbe0d7d42eb8a06a9b6f3c2e570": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "DescriptionStyleModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "DescriptionStyleModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "StyleView",
-      "description_width": ""
-     }
-    },
-    "f6c31689adb34379aa9160164c3a7af7": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "f79a31b23d66499ea29177ef2b09eba9": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "f7a50a4aaec94099a3199d602463dc38": {
-     "model_module": "@jupyter-widgets/base",
-     "model_module_version": "1.2.0",
-     "model_name": "LayoutModel",
-     "state": {
-      "_model_module": "@jupyter-widgets/base",
-      "_model_module_version": "1.2.0",
-      "_model_name": "LayoutModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/base",
-      "_view_module_version": "1.2.0",
-      "_view_name": "LayoutView",
-      "align_content": null,
-      "align_items": null,
-      "align_self": null,
-      "border": null,
-      "bottom": null,
-      "display": null,
-      "flex": null,
-      "flex_flow": null,
-      "grid_area": null,
-      "grid_auto_columns": null,
-      "grid_auto_flow": null,
-      "grid_auto_rows": null,
-      "grid_column": null,
-      "grid_gap": null,
-      "grid_row": null,
-      "grid_template_areas": null,
-      "grid_template_columns": null,
-      "grid_template_rows": null,
-      "height": null,
-      "justify_content": null,
-      "justify_items": null,
-      "left": null,
-      "margin": null,
-      "max_height": null,
-      "max_width": null,
-      "min_height": null,
-      "min_width": null,
-      "object_fit": null,
-      "object_position": null,
-      "order": null,
-      "overflow": null,
-      "overflow_x": null,
-      "overflow_y": null,
-      "padding": null,
-      "right": null,
-      "top": null,
-      "visibility": null,
-      "width": null
-     }
-    },
-    "f8158f7b18264b0c80b490ef2df1c382": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "HTMLModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "HTMLModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "HTMLView",
-      "description": "",
-      "description_tooltip": null,
-      "layout": "IPY_MODEL_8df43ec3c129445d9108cf90d880f4cc",
-      "placeholder": "​",
-      "style": "IPY_MODEL_c05189ea4e504abb887093d649d2f045",
-      "value": " 500k/500k [00:00&lt;00:00, 637kB/s]"
-     }
-    },
-    "ff989f01c895414f8869064cb4254f57": {
-     "model_module": "@jupyter-widgets/controls",
-     "model_module_version": "1.5.0",
-     "model_name": "HTMLModel",
-     "state": {
-      "_dom_classes": [],
-      "_model_module": "@jupyter-widgets/controls",
-      "_model_module_version": "1.5.0",
-      "_model_name": "HTMLModel",
-      "_view_count": null,
-      "_view_module": "@jupyter-widgets/controls",
-      "_view_module_version": "1.5.0",
-      "_view_name": "HTMLView",
-      "description": "",
-      "description_tooltip": null,
-      "layout": "IPY_MODEL_69d53136a5cb4ac79d4c71b47d975880",
-      "placeholder": "​",
-      "style": "IPY_MODEL_2c0bd33fdffc48bf9c7aa721403d5dd3",
-      "value": " 435/435 [00:00&lt;00:00, 44.3kB/s]"
-     }
-    }
-   }
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 4
-}
diff --git a/docs/getting_started/customization.rst b/docs/getting_started/customization.rst
deleted file mode 100644
index 2bd8362a150fd0ac6f20f084a4d80f1b78a2ba23..0000000000000000000000000000000000000000
--- a/docs/getting_started/customization.rst
+++ /dev/null
@@ -1,172 +0,0 @@
-Customization Tutorial
-======================
-.. tip::
-    If you haven't already, `install LlamaIndex <installation.html>`_ and complete the `starter tutorial <starter_example.html>`_. If you run into terms you don't recognize, check out the `high-level concepts <concepts.html>`_.
-
-In this tutorial, we start with the code you wrote for the `starter example <starter_example.html>`_ and show you the most common ways you might want to customize it for your use case:
-
-.. code-block:: python
-
-    from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
-
-    documents = SimpleDirectoryReader("data").load_data()
-    index = VectorStoreIndex.from_documents(documents)
-    query_engine = index.as_query_engine()
-    response = query_engine.query("What did the author do growing up?")
-    print(response)
-
------------------
-
-**"I want to parse my documents into smaller chunks"**
-
-.. code-block:: python
-
-    # Global settings
-    from llama_index.core import Settings
-
-    Settings.chunk_size = 512
-
-    # Local settings
-    from llama_index.core.node_parser import SentenceSplitter
-
-    index = VectorStoreIndex.from_documents(
-        documents, transformations=[SentenceSplitter(chunk_size=512)]
-    )
-
------------------
-
-**"I want to use a different vector store"**
-
-First, you can install the vector store you want to use. For example, to use Chroma as the vector store, you can install it using pip:
-
-.. code-block:: shell
-
-    pip install llama-index-vector-stores-chroma
-
-
-To learn more about all integrations available, check out `LlamaHub <https://llamahub.ai>`_.
-
-Then, you can use it in your code:
-
-.. code-block:: python
-
-    import chromadb
-    from llama_index.vector_stores.chroma import ChromaVectorStore
-    from llama_index.core import StorageContext
-
-    chroma_client = chromadb.PersistentClient()
-    chroma_collection = chroma_client.create_collection("quickstart")
-    vector_store = ChromaVectorStore(chroma_collection=chroma_collection)
-    storage_context = StorageContext.from_defaults(vector_store=vector_store)
-
-`StorageContext` defines the storage backend for where the documents, embeddings, and indexes are stored. You can learn more about `storage <../module_guides/storing/storing.html>`_ and `how to customize it <../module_guides/storing/customization.html>`_.
-
-.. code-block:: python
-    :emphasize-lines: 4
-
-    from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
-
-    documents = SimpleDirectoryReader("data").load_data()
-    index = VectorStoreIndex.from_documents(
-        documents, storage_context=storage_context
-    )
-    query_engine = index.as_query_engine()
-    response = query_engine.query("What did the author do growing up?")
-    print(response)
-
------------------
-
-**"I want to retrieve more context when I query"**
-
-.. code-block:: python
-    :emphasize-lines: 5
-
-    from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
-
-    documents = SimpleDirectoryReader("data").load_data()
-    index = VectorStoreIndex.from_documents(documents)
-    query_engine = index.as_query_engine(similarity_top_k=5)
-    response = query_engine.query("What did the author do growing up?")
-    print(response)
-
-`as_query_engine` builds a default `retriever` and `query engine` on top of the index. You can configure the retriever and query engine by passing in keyword arguments. Here, we configure the retriever to return the top 5 most similar documents (instead of the default of 2). You can learn more about `retrievers <../module_guides/querying/retriever/retrievers.html>`_ and `query engines <../module_guides/querying/retriever/root.html>`_
-
------------------
-
-**"I want to use a different LLM"**
-
-.. code-block:: python
-
-    # Global settings
-    from llama_index.core import Settings
-    from llama_index.llms.ollama import Ollama
-
-    Settings.llm = Ollama(model="mistral", request_timeout=60.0)
-
-    # Local settings
-    index.as_query_engine(llm=Ollama(model="mistral", request_timeout=60.0))
-
-You can learn more about `customizing LLMs <../module_guides/models/llms.html>`_.
-
------------------
-
-**"I want to use a different response mode"**
-
-
-.. code-block:: python
-    :emphasize-lines: 5
-
-    from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
-
-    documents = SimpleDirectoryReader("data").load_data()
-    index = VectorStoreIndex.from_documents(documents)
-    query_engine = index.as_query_engine(response_mode="tree_summarize")
-    response = query_engine.query("What did the author do growing up?")
-    print(response)
-
-You can learn more about `query engines <../module_guides/querying/querying.html>`_ and `response modes <../module_guides/deploying/query_engine/response_modes.html>`_.
-
------------------
-
-**"I want to stream the response back"**
-
-
-.. code-block:: python
-    :emphasize-lines: 5, 7
-
-    from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
-
-    documents = SimpleDirectoryReader("data").load_data()
-    index = VectorStoreIndex.from_documents(documents)
-    query_engine = index.as_query_engine(streaming=True)
-    response = query_engine.query("What did the author do growing up?")
-    response.print_response_stream()
-
-You can learn more about `streaming responses <../module_guides/deploying/query_engine/streaming.html>`_.
-
------------------
-
-**"I want a chatbot instead of Q&A"**
-
-.. code-block:: python
-    :emphasize-lines: 5, 6, 9
-
-    from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
-
-    documents = SimpleDirectoryReader("data").load_data()
-    index = VectorStoreIndex.from_documents(documents)
-    query_engine = index.as_chat_engine()
-    response = query_engine.chat("What did the author do growing up?")
-    print(response)
-
-    response = query_engine.chat("Oh interesting, tell me more.")
-    print(response)
-
-Learn more about the `chat engine <../module_guides/deploying/chat_engines/usage_pattern.html>`_.
-
------------------
-
-.. admonition:: Next Steps
-
-    * want a thorough walkthrough of (almost) everything you can configure? Get started with `Understanding LlamaIndex <../understanding/understanding.html>`_.
-    * want more in-depth understanding of specific modules? Check out the module guides in the left nav 👈
diff --git a/docs/getting_started/reading.md b/docs/getting_started/reading.md
deleted file mode 100644
index 10187869bbd488469c61ef3cc1fa5433be871b07..0000000000000000000000000000000000000000
--- a/docs/getting_started/reading.md
+++ /dev/null
@@ -1,33 +0,0 @@
-# How to read these docs
-
-Welcome to the LlamaIndex documentation! We've tried hard to make these docs approachable regardless of your experience level with LlamaIndex and with LLMs and generative AI in general.
-
-## Before you start
-
-LlamaIndex is a Python library, so you should have Python [installed](https://www.python.org/downloads/) and a basic working understanding of how to write it. If you prefer JavaScript, we recommend trying out our [TypeScript package](https://ts.llamaindex.ai/).
-
-Many of our examples are formatted as Notebooks, by which we mean Jupyter-style notebooks. You don't have to have Jupyter installed; you can try out most of our examples on a hosted service like [Google Colab](https://colab.research.google.com/).
-
-## Structure of these docs
-
-Our docs are structured so you should be able to roughly progress simply by moving down the sidebar on the left, or just hitting the "next" link at the bottom of each page.
-
-1. **Getting started**
-
-   The section you're in right now. We can get you going from knowing nothing about LlamaIndex and LLMs. [Install the library](installation.md), write your first demo in [five lines of code](starter_example.md), learn more about the [high level concepts](concepts.md) of LLM applications, and then see how you can [customize the five-line example](customization.rst) to meet your needs.
-
-2. **Use cases**
-
-   If you're a dev trying to figure out whether LlamaIndex will work for your use case, we have an overview of the types of things you can build.
-
-3. **Understanding LlamaIndex**
-
-   Once you've completed the Getting Started section, this is the next place to go. In a series of bite-sized tutorials, we'll walk you through every stage of building a production LlamaIndex application and help you level up on the concepts of the library and LLMs in general as you go.
-
-4. **Optimizing**
-
-   Already got a working LlamaIndex application and looking to further refine it? Our optimizing section will walk you through the [first things you should try](/optimizing/basic_strategies/basic_strategies.md) like your embedding model and chunk size through progressively more complex and subtle customizations all the way to [fine tuning](/optimizing/fine-tuning/fine-tuning.md) your model.
-
-5. **Module guides**
-
-   Arranged in the same order of building an LLM application as our Understanding section, these are comprehensive, lower-level guides to the individual components of LlamaIndex and how to use them.
diff --git a/docs/index.rst b/docs/index.rst
deleted file mode 100644
index cf411e0dab5cf0fee1ed3613aeca017a506fcb2a..0000000000000000000000000000000000000000
--- a/docs/index.rst
+++ /dev/null
@@ -1,198 +0,0 @@
-Welcome to LlamaIndex 🦙 !
-##########################
-
-LlamaIndex is a data framework for `LLM <https://en.wikipedia.org/wiki/Large_language_model>`_-based applications which benefit from context augmentation. Such LLM systems have been termed as RAG systems, standing for "Retrieval-Augmented Generation". LlamaIndex provides the essential abstractions to more easily ingest, structure, and access private or domain-specific data in order to inject these safely and reliably into LLMs for more accurate text generation. It's available in Python (these docs) and `Typescript <https://ts.llamaindex.ai/>`_.
-
-.. tip::
-   Updating to LlamaIndex v0.10.0? Check out the `migration guide <./getting_started/v0_10_0_migration.html>`_.
-
-🚀 Why Context Augmentation?
-******************
-
-LLMs offer a natural language interface between humans and data. Widely available models come pre-trained on huge amounts of publicly available data like Wikipedia, mailing lists, textbooks, source code and more.
-
-However, while LLMs are trained on a great deal of data, they are not trained on **your** data, which may be private or specific to the problem you're trying to solve. It's behind APIs, in SQL databases, or trapped in PDFs and slide decks.
-
-You may choose to **fine-tune** a LLM with your data, but:
-
-- Training a LLM is **expensive**.
-- Due to the cost to train, it's **hard to update** a LLM with latest information.
-- **Observability** is lacking. When you ask a LLM a question, it's not obvious how the LLM arrived at its answer.
-
-Instead of fine-tuning, one can use a context augmentation pattern called `Retrieval-Augmented Generation (RAG) <./getting_started/concepts.html>`_ to obtain more accurate text generation relevant to your specific data. RAG involves the following high level steps:
-
-1. Retrieve information from your data sources first,
-2. Add it to your question as context, and
-3. Ask the LLM to answer based on the enriched prompt.
-
-In doing so, RAG overcomes all three weaknesses of the fine-tuning approach:
-
-- There's no training involved, so it's **cheap**.
-- Data is fetched only when you ask for them, so it's **always up to date**.
-- LlamaIndex can show you the retrieved documents, so it's **more trustworthy**.
-
-🦙 Why LlamaIndex for Context Augmentation?
-***************************
-
-Firstly, LlamaIndex imposes no restriction on how you use LLMs. You can still use LLMs as auto-complete, chatbots, semi-autonomous agents, and more (see Use Cases on the left). It only makes LLMs more relevant to you.
-
-LlamaIndex provides the following tools to help you quickly stand up production-ready RAG systems:
-
-- **Data connectors** ingest your existing data from their native source and format. These could be APIs, PDFs, SQL, and (much) more.
-- **Data indexes** structure your data in intermediate representations that are easy and performant for LLMs to consume.
-- **Engines** provide natural language access to your data. For example:
-
-  - Query engines are powerful retrieval interfaces for knowledge-augmented output.
-  - Chat engines are conversational interfaces for multi-message, "back and forth" interactions with your data.
-- **Data agents** are LLM-powered knowledge workers augmented by tools, from simple helper functions to API integrations and more.
-- **Application integrations** tie LlamaIndex back into the rest of your ecosystem. This could be LangChain, Flask, Docker, ChatGPT, or… anything else!
-
-👨‍👩‍👧‍👦 Who is LlamaIndex for?
-*******************************************
-
-LlamaIndex provides tools for beginners, advanced users, and everyone in between.
-
-Our high-level API allows beginner users to use LlamaIndex to ingest and query their data in 5 lines of code.
-
-For more complex applications, our lower-level APIs allow advanced users to customize and extend any module—data connectors, indices, retrievers, query engines, reranking modules—to fit their needs.
-
-Getting Started
-****************
-
-To install the library:
-
-``pip install llama-index``
-
-We recommend starting at `how to read these docs <./getting_started/reading.html>`_, which will point you to the right place based on your experience level.
-
-🗺️ Ecosystem
-************
-
-To download or contribute, find LlamaIndex on:
-
-- Github: https://github.com/run-llama/llama_index
-- PyPi:
-
-  - LlamaIndex: https://pypi.org/project/llama-index/.
-  - GPT Index (duplicate): https://pypi.org/project/gpt-index/.
-
-- NPM (Typescript/Javascript):
-   - Github: https://github.com/run-llama/LlamaIndexTS
-   - Docs: https://ts.llamaindex.ai/
-   - LlamaIndex.TS: https://www.npmjs.com/package/llamaindex
-
-Community
----------
-Need help? Have a feature suggestion? Join the LlamaIndex community:
-
-- Twitter: https://twitter.com/llama_index
-- Discord https://discord.gg/dGcwcsnxhU
-
-Associated projects
--------------------
-
-- 🏡 LlamaHub: https://llamahub.ai | The central hub of all integrations and templates within the LlamaIndex ecosystem (LLMs, embeddings, data loaders, vector stores, LlamaPacks).
-- 🧪 LlamaLab: https://github.com/run-llama/llama-lab | Ambitious projects built on top of LlamaIndex
-- 🌤️ LlamaCloud: https://cloud.llamaindex.ai/ | Platform for advanced document RAG
-   - 📑 LlamaParse Python Client: https://github.com/run-llama/llama_parse | Client for advanced document parsing (part of LlamaCloud)
-
-.. toctree::
-   :maxdepth: 1
-   :caption: Getting Started
-   :hidden:
-
-   getting_started/installation.md
-   getting_started/reading.md
-   getting_started/starter_example.md
-   getting_started/concepts.md
-   getting_started/customization.rst
-   getting_started/discover_llamaindex.md
-
-.. toctree::
-   :maxdepth: 2
-   :caption: Use Cases
-   :hidden:
-
-   use_cases/q_and_a/root.md
-   use_cases/chatbots.md
-   use_cases/agents.md
-   use_cases/extraction.md
-   use_cases/multimodal.md
-
-.. toctree::
-   :maxdepth: 2
-   :caption: Understanding
-   :hidden:
-
-   understanding/understanding.md
-   understanding/using_llms/using_llms.md
-   understanding/loading/loading.md
-   understanding/indexing/indexing.md
-   understanding/storing/storing.md
-   understanding/querying/querying.md
-   understanding/putting_it_all_together/putting_it_all_together.md
-   understanding/tracing_and_debugging/tracing_and_debugging.md
-   understanding/evaluating/evaluating.md
-
-.. toctree::
-   :maxdepth: 2
-   :caption: Optimizing
-   :hidden:
-
-   optimizing/basic_strategies/basic_strategies.md
-   optimizing/advanced_retrieval/advanced_retrieval.md
-   optimizing/agentic_strategies/agentic_strategies.md
-   optimizing/evaluation/evaluation.md
-   optimizing/fine-tuning/fine-tuning.md
-   optimizing/production_rag.md
-   optimizing/custom_modules.md
-   optimizing/building_rag_from_scratch.md
-.. toctree::
-   :maxdepth: 2
-   :caption: Module Guides
-   :hidden:
-
-   module_guides/models/models.md
-   module_guides/models/prompts.md
-   module_guides/loading/loading.md
-   module_guides/indexing/indexing.md
-   module_guides/storing/storing.md
-   module_guides/querying/querying.md
-   module_guides/deploying/agents/root.md
-   module_guides/observability/instrumentation.md
-   module_guides/observability/observability.md
-   module_guides/evaluating/root.md
-   module_guides/supporting_modules/supporting_modules.md
-
-
-.. toctree::
-   :maxdepth: 1
-   :caption: API Reference
-   :hidden:
-
-   api_reference/index.rst
-
-.. toctree::
-   :maxdepth: 2
-   :caption: Community
-   :hidden:
-
-   community/integrations.md
-   community/frequently_asked_questions.md
-   community/full_stack_projects.md
-
-.. toctree::
-   :maxdepth: 2
-   :caption: Contributing
-   :hidden:
-
-   contributing/contributing.rst
-   contributing/documentation.rst
-
-.. toctree::
-   :maxdepth: 2
-   :caption: Changes
-   :hidden:
-
-   changes/changelog.rst
-   changes/deprecated_terms.md
diff --git a/docs/make.bat b/docs/make.bat
deleted file mode 100644
index 32bb24529f92346af26219baed295b7488b77534..0000000000000000000000000000000000000000
--- a/docs/make.bat
+++ /dev/null
@@ -1,35 +0,0 @@
-@ECHO OFF
-
-pushd %~dp0
-
-REM Command file for Sphinx documentation
-
-if "%SPHINXBUILD%" == "" (
-	set SPHINXBUILD=sphinx-build
-)
-set SOURCEDIR=.
-set BUILDDIR=_build
-
-%SPHINXBUILD% >NUL 2>NUL
-if errorlevel 9009 (
-	echo.
-	echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
-	echo.installed, then set the SPHINXBUILD environment variable to point
-	echo.to the full path of the 'sphinx-build' executable. Alternatively you
-	echo.may add the Sphinx directory to PATH.
-	echo.
-	echo.If you don't have Sphinx installed, grab it from
-	echo.https://www.sphinx-doc.org/
-	exit /b 1
-)
-
-if "%1" == "" goto help
-
-%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
-goto end
-
-:help
-%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
-
-:end
-popd
diff --git a/docs/manage_retrieval_benchmark.ipynb b/docs/manage_retrieval_benchmark.ipynb
deleted file mode 100644
index 293ef561106b3f7f5223ec49b260353b6119f2cd..0000000000000000000000000000000000000000
--- a/docs/manage_retrieval_benchmark.ipynb
+++ /dev/null
@@ -1,1686 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "<a href=\"https://colab.research.google.com/github/run-llama/llama_index/blob/main/docs/examples/managed/manage_retrieval_benchmark.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "# Semantic Retriever Benchmark\n",
-    "\n",
-    "In this notebook, we will compare different Retrieval Strategies including\n",
-    "* Google Semantic Retrieval\n",
-    "* LlamaIndex Retrieval\n",
-    "* Vectara Managed Retrieval\n",
-    "* ColBERT-V2 end-to-end Retrieval"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## Installation"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "%pip install llama-index\n",
-    "%pip install \"google-ai-generativelanguage>=0.4,<=1.0\"\n",
-    "%pip install torch sentence-transformers"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "### Google Authentication Overview\n",
-    "\n",
-    "The Google Semantic Retriever API lets you perform semantic search on your own data. Since it's **your data**, this needs stricter access controls than API Keys. Authenticate with OAuth through service accounts or through your user credentials. This quickstart uses a simplified authentication approach for a testing environment, and service account setup are typically easier to start. For a production environment, learn about [authentication and authorization](https://developers.google.com/workspace/guides/auth-overview) before choosing the [access credentials](https://developers.google.com/workspace/guides/create-credentials#choose_the_access_credential_that_is_right_for_you) that are appropriate for your app.\n",
-    "\n",
-    "Demo recording for authenticating using service accounts: [Demo](https://drive.google.com/file/d/199LzrdhuuiordS15MJAxVrPKAwEJGPOh/view?usp=sharing)\n",
-    "\n",
-    "**Note**: At this time, the Google Generative AI Semantic Retriever API is [only available in certain regions](https://ai.google.dev/available_regions)."
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "#### Authentication (Option 1): OAuth using service accounts\n",
-    "\n",
-    "Google Auth [service accounts](https://cloud.google.com/iam/docs/service-account-overview) let an application authenticate to make authorized Google API calls. To OAuth using service accounts, follow the steps below:\n",
-    "\n",
-    "1. Enable the `Generative Language API`: [Documentation](https://developers.generativeai.google/tutorials/oauth_quickstart#1_enable_the_api)\n",
-    "\n",
-    "1. Create the Service Account by following the [documentation](https://developers.google.com/identity/protocols/oauth2/service-account#creatinganaccount).\n",
-    "\n",
-    " * After creating the service account, generate a service account key.\n",
-    "\n",
-    "1. Upload your service account file by using the file icon on the left sidebar, then the upload icon, as shown in the screenshot below.\n",
-    "\n",
-    "<img width=400 src=\"https://developers.generativeai.google/tutorials/images/colab_upload.png\">"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "%pip install google-auth-oauthlib"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "from google.oauth2 import service_account\n",
-    "from llama_index.indices.managed.google.generativeai import (\n",
-    "    GoogleIndex,\n",
-    "    set_google_config,\n",
-    ")\n",
-    "\n",
-    "credentials = service_account.Credentials.from_service_account_file(\n",
-    "    \"service_account_key.json\",\n",
-    "    scopes=[\n",
-    "        \"https://www.googleapis.com/auth/cloud-platform\",\n",
-    "        \"https://www.googleapis.com/auth/generative-language.retriever\",\n",
-    "    ],\n",
-    ")\n",
-    "\n",
-    "set_google_config(auth_credentials=credentials)"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "#### Authentication (Option 2): OAuth using user credentials\n",
-    "\n",
-    "Please follow [OAuth Quickstart](https://developers.generativeai.google/tutorials/oauth_quickstart) to setup OAuth using user credentials. Below are overview of steps from the documentation that are required.\n",
-    "\n",
-    "1. Enable the `Generative Language API`: [Documentation](https://developers.generativeai.google/tutorials/oauth_quickstart#1_enable_the_api)\n",
-    "\n",
-    "1. Configure the OAuth consent screen: [Documentation](https://developers.generativeai.google/tutorials/oauth_quickstart#2_configure_the_oauth_consent_screen)\n",
-    "\n",
-    "1. Authorize credentials for a desktop application: [Documentation](https://developers.generativeai.google/tutorials/oauth_quickstart#3_authorize_credentials_for_a_desktop_application)\n",
-    "  * If you want to run this notebook in Colab start by uploading your\n",
-    "`client_secret*.json` file using the \"File > Upload\" option.\n",
-    "\n",
-    " * Rename the uploaded file to `client_secret.json` or change the variable `client_file_name` in the code below.\n",
-    "\n",
-    "<img width=400 src=\"https://developers.generativeai.google/tutorials/images/colab_upload.png\">\n",
-    "\n",
-    "\n",
-    "**Note**: At this time, the Google Generative AI Semantic Retriever API is [only available in certain regions](https://developers.generativeai.google/available_regions)."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# Replace TODO-your-project-name with the project used in the OAuth Quickstart\n",
-    "project_name = \"TODO-your-project-name\"  #  @param {type:\"string\"}\n",
-    "# Replace TODO-your-email@gmail.com with the email added as a test user in the OAuth Quickstart\n",
-    "email = \"ht@runllama.ai\"  #  @param {type:\"string\"}\n",
-    "# Replace client_secret.json with the client_secret_* file name you uploaded.\n",
-    "client_file_name = \"client_secret.json\"\n",
-    "\n",
-    "# IMPORTANT: Follow the instructions from the output - you must copy the command\n",
-    "# to your terminal and copy the output after authentication back here.\n",
-    "!gcloud config set project $project_name\n",
-    "!gcloud config set account $email\n",
-    "\n",
-    "# NOTE: The simplified project setup in this tutorial triggers a \"Google hasn't verified this app.\" dialog.\n",
-    "# This is normal, click \"Advanced\" -> \"Go to [app name] (unsafe)\"\n",
-    "!gcloud auth application-default login --no-browser --client-id-file=$client_file_name --scopes=\"https://www.googleapis.com/auth/generative-language.retriever,https://www.googleapis.com/auth/cloud-platform\""
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "This will provide you with a URL, which you should enter into your local browser.\n",
-    "Follow the instruction to complete the authentication and authorization."
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## Download Paul Graham Data"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "!mkdir -p 'data/paul_graham/'\n",
-    "!wget 'https://raw.githubusercontent.com/run-llama/llama_index/main/docs/examples/data/paul_graham/paul_graham_essay.txt' -O 'data/paul_graham/paul_graham_essay.txt'"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "### Ground truth for the query `\"which program did this author attend?\"`\n",
-    "\n",
-    "Wiki Link: https://en.wikipedia.org/wiki/Paul_Graham_(programmer)\n",
-    "\n",
-    "Answer from Wiki:\n",
-    "\n",
-    "```\n",
-    "Graham and his family moved to Pittsburgh, Pennsylvania in 1968, where he later attended Gateway High School. Graham gained interest in science and mathematics from his father who was a nuclear physicist.[8]\n",
-    "\n",
-    "Graham received a Bachelor of Arts with a major in philosophy from Cornell University in 1986.[9][10][11] He then received a Master of Science in 1988 and a Doctor of Philosophy in 1990, both in computer science from Harvard University.[9][12]\n",
-    "\n",
-    "Graham has also studied painting at the Rhode Island School of Design and at the Accademia di Belle Arti in Florence.[9][12]\n",
-    "```"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## Google Semantic Retrieval"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "import os\n",
-    "\n",
-    "GOOGLE_API_KEY = \"\"  # add your GOOGLE API key here\n",
-    "os.environ[\"GOOGLE_API_KEY\"] = GOOGLE_API_KEY"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "from llama_index import SimpleDirectoryReader\n",
-    "from llama_index.indices.managed.google.generativeai import GoogleIndex\n",
-    "\n",
-    "# Create a Google corpus.\n",
-    "google_index = GoogleIndex.create_corpus(display_name=\"My first corpus!\")\n",
-    "print(f\"Newly created corpus ID is {google_index.corpus_id}.\")\n",
-    "\n",
-    "# Ingestion.\n",
-    "documents = SimpleDirectoryReader(\"./data/paul_graham/\").load_data()\n",
-    "google_index.insert_documents(documents)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# load Google index corpus from corpus_id\n",
-    "# Don't need to load it again if you have already done the ingestion step\n",
-    "google_index = GoogleIndex.from_corpus(corpus_id=\"\")"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "### Google Semantic Retrieval: Using the default query engine"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "This author attended Cornell and Harvard.\n"
-     ]
-    }
-   ],
-   "source": [
-    "query_engine = google_index.as_query_engine()\n",
-    "response = query_engine.query(\"which program did this author attend?\")\n",
-    "print(response)"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "### Show the nodes from the response"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/markdown": [
-       "**Node ID:** f9604355-015f-432c-9274-f08ab4d9ffef<br>**Similarity:** None<br>**Text:** I couldn't have put this into words when I was 18. All I knew at the time was that I kept taking philosophy courses and they kept being boring. So I decided to switch to AI.\n",
-       "\n",
-       "AI was in the air in the mid 1980s, but there were two things especially that made me want to work on it: a novel by Heinlein called The Moon is a Harsh Mistress, which featured an intelligent computer called Mike, and a PBS documentary that showed Terry Winograd using SHRDLU. I haven't tried rereading The Moon is a Harsh Mistress, so I don't know how well it has aged, but when I read it I was drawn entirely into its world. It seemed only a matter of time before we'd have Mike, and when I saw Winograd using SHRDLU, it seemed like that time would be a few years at most. All you had to do was teach SHRDLU more words.\n",
-       "\n",
-       "There weren't any classes in AI at Cornell then, not even graduate classes, so I started trying to teach myself. Which meant learning Lisp, since in those days Lisp was regarded as the language of A...<br>"
-      ],
-      "text/plain": [
-       "<IPython.core.display.Markdown object>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    },
-    {
-     "data": {
-      "text/markdown": [
-       "**Node ID:** e4b7d7lestm2<br>**Similarity:** 0.6522269248962402<br>**Text:** What I Worked On\n",
-       "\n",
-       "February 2021\n",
-       "\n",
-       "Before college the two main things I worked on, outside of school, were writing and programming. I didn't write essays. I wrote what beginning writers were supposed to write then, and probably still are: short stories. My stories were awful. They had hardly any plot, just characters with strong feelings, which I imagined made them deep.\n",
-       "\n",
-       "The first programs I tried writing were on the IBM 1401 that our school district used for what was then called \"data processing.\" This was in 9th grade, so I was 13 or 14. The school district's 1401 happened to be in the basement of our junior high school, and my friend Rich Draves and I got permission to use it. It was like a mini Bond villain's lair down there, with all these alien-looking machines — CPU, disk drives, printer, card reader — sitting up on a raised floor under bright fluorescent lights.\n",
-       "\n",
-       "The language we used was an early version of Fortran. You had to type programs on punch cards, then stack them in ...<br>"
-      ],
-      "text/plain": [
-       "<IPython.core.display.Markdown object>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    },
-    {
-     "data": {
-      "text/markdown": [
-       "**Node ID:** mmshdy59as8n<br>**Similarity:** 0.6290713548660278<br>**Text:** I couldn't have put this into words when I was 18. All I knew at the time was that I kept taking philosophy courses and they kept being boring. So I decided to switch to AI.\n",
-       "\n",
-       "AI was in the air in the mid 1980s, but there were two things especially that made me want to work on it: a novel by Heinlein called The Moon is a Harsh Mistress, which featured an intelligent computer called Mike, and a PBS documentary that showed Terry Winograd using SHRDLU. I haven't tried rereading The Moon is a Harsh Mistress, so I don't know how well it has aged, but when I read it I was drawn entirely into its world. It seemed only a matter of time before we'd have Mike, and when I saw Winograd using SHRDLU, it seemed like that time would be a few years at most. All you had to do was teach SHRDLU more words.\n",
-       "\n",
-       "There weren't any classes in AI at Cornell then, not even graduate classes, so I started trying to teach myself. Which meant learning Lisp, since in those days Lisp was regarded as the language of A...<br>"
-      ],
-      "text/plain": [
-       "<IPython.core.display.Markdown object>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    }
-   ],
-   "source": [
-    "from llama_index.response.notebook_utils import display_source_node\n",
-    "\n",
-    "for r in response.source_nodes:\n",
-    "    display_source_node(r, source_length=1000)"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "### Google Semantic Retrieval: Using `Verbose` Answer Style"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "The author attended Cornell University for their undergraduate studies, where they majored in Computer Science and minored in Philosophy. They then attended Harvard University for their graduate studies, where they studied Computer Science and wrote their dissertation on Lisp programming.\n"
-     ]
-    }
-   ],
-   "source": [
-    "from google.ai.generativelanguage import (\n",
-    "    GenerateAnswerRequest,\n",
-    ")\n",
-    "\n",
-    "query_engine = google_index.as_query_engine(\n",
-    "    # Extra parameters specific to the Google query engine.\n",
-    "    temperature=0.3,\n",
-    "    answer_style=GenerateAnswerRequest.AnswerStyle.VERBOSE,\n",
-    ")\n",
-    "\n",
-    "response = query_engine.query(\"Which program did this author attend?\")\n",
-    "print(response)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/markdown": [
-       "**Node ID:** 40f9cdc5-8ff8-4f46-a7f4-7c65c9da3fd1<br>**Similarity:** None<br>**Text:** What I Worked On\n",
-       "\n",
-       "February 2021\n",
-       "\n",
-       "Before college the two main things I worked on, outside of school, were writing and programming. I didn't write essays. I wrote what beginning writers were supposed to write then, and probably still are: short stories. My stories were awful. They had hardly any plot, just characters with strong feelings, which I imagined made them deep.\n",
-       "\n",
-       "The first programs I tried writing were on the IBM 1401 that our school district used for what was then called \"data processing.\" This was in 9th grade, so I was 13 or 14. The school district's 1401 happened to be in the basement of our junior high school, and my friend Rich Draves and I got permission to use it. It was like a mini Bond villain's lair down there, with all these alien-looking machines — CPU, disk drives, printer, card reader — sitting up on a raised floor under bright fluorescent lights.\n",
-       "\n",
-       "The language we used was an early version of Fortran. You had to type programs on punch cards, then stack them in ...<br>"
-      ],
-      "text/plain": [
-       "<IPython.core.display.Markdown object>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    },
-    {
-     "data": {
-      "text/markdown": [
-       "**Node ID:** 3b867c25-e4e8-407a-95fe-95fe8f430507<br>**Similarity:** None<br>**Text:** I couldn't have put this into words when I was 18. All I knew at the time was that I kept taking philosophy courses and they kept being boring. So I decided to switch to AI.\n",
-       "\n",
-       "AI was in the air in the mid 1980s, but there were two things especially that made me want to work on it: a novel by Heinlein called The Moon is a Harsh Mistress, which featured an intelligent computer called Mike, and a PBS documentary that showed Terry Winograd using SHRDLU. I haven't tried rereading The Moon is a Harsh Mistress, so I don't know how well it has aged, but when I read it I was drawn entirely into its world. It seemed only a matter of time before we'd have Mike, and when I saw Winograd using SHRDLU, it seemed like that time would be a few years at most. All you had to do was teach SHRDLU more words.\n",
-       "\n",
-       "There weren't any classes in AI at Cornell then, not even graduate classes, so I started trying to teach myself. Which meant learning Lisp, since in those days Lisp was regarded as the language of A...<br>"
-      ],
-      "text/plain": [
-       "<IPython.core.display.Markdown object>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    },
-    {
-     "data": {
-      "text/markdown": [
-       "**Node ID:** e4b7d7lestm2<br>**Similarity:** 0.6296358108520508<br>**Text:** What I Worked On\n",
-       "\n",
-       "February 2021\n",
-       "\n",
-       "Before college the two main things I worked on, outside of school, were writing and programming. I didn't write essays. I wrote what beginning writers were supposed to write then, and probably still are: short stories. My stories were awful. They had hardly any plot, just characters with strong feelings, which I imagined made them deep.\n",
-       "\n",
-       "The first programs I tried writing were on the IBM 1401 that our school district used for what was then called \"data processing.\" This was in 9th grade, so I was 13 or 14. The school district's 1401 happened to be in the basement of our junior high school, and my friend Rich Draves and I got permission to use it. It was like a mini Bond villain's lair down there, with all these alien-looking machines — CPU, disk drives, printer, card reader — sitting up on a raised floor under bright fluorescent lights.\n",
-       "\n",
-       "The language we used was an early version of Fortran. You had to type programs on punch cards, then stack them in ...<br>"
-      ],
-      "text/plain": [
-       "<IPython.core.display.Markdown object>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    },
-    {
-     "data": {
-      "text/markdown": [
-       "**Node ID:** mmshdy59as8n<br>**Similarity:** 0.616265058517456<br>**Text:** I couldn't have put this into words when I was 18. All I knew at the time was that I kept taking philosophy courses and they kept being boring. So I decided to switch to AI.\n",
-       "\n",
-       "AI was in the air in the mid 1980s, but there were two things especially that made me want to work on it: a novel by Heinlein called The Moon is a Harsh Mistress, which featured an intelligent computer called Mike, and a PBS documentary that showed Terry Winograd using SHRDLU. I haven't tried rereading The Moon is a Harsh Mistress, so I don't know how well it has aged, but when I read it I was drawn entirely into its world. It seemed only a matter of time before we'd have Mike, and when I saw Winograd using SHRDLU, it seemed like that time would be a few years at most. All you had to do was teach SHRDLU more words.\n",
-       "\n",
-       "There weren't any classes in AI at Cornell then, not even graduate classes, so I started trying to teach myself. Which meant learning Lisp, since in those days Lisp was regarded as the language of A...<br>"
-      ],
-      "text/plain": [
-       "<IPython.core.display.Markdown object>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    }
-   ],
-   "source": [
-    "from llama_index.response.notebook_utils import display_source_node\n",
-    "\n",
-    "for r in response.source_nodes:\n",
-    "    display_source_node(r, source_length=1000)"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "### Google Semantic Retrieval: Using `Abstractive` Answer Style"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "The author attended Cornell and Harvard.\n"
-     ]
-    }
-   ],
-   "source": [
-    "from google.ai.generativelanguage import (\n",
-    "    GenerateAnswerRequest,\n",
-    ")\n",
-    "\n",
-    "query_engine = google_index.as_query_engine(\n",
-    "    # Extra parameters specific to the Google query engine.\n",
-    "    temperature=0.3,\n",
-    "    answer_style=GenerateAnswerRequest.AnswerStyle.ABSTRACTIVE,\n",
-    ")\n",
-    "\n",
-    "response = query_engine.query(\"Which program did this author attend?\")\n",
-    "print(response)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/markdown": [
-       "**Node ID:** 62f33668-0e70-4b5b-bbbf-dfebb6e5669e<br>**Similarity:** None<br>**Text:** I couldn't have put this into words when I was 18. All I knew at the time was that I kept taking philosophy courses and they kept being boring. So I decided to switch to AI.\n",
-       "\n",
-       "AI was in the air in the mid 1980s, but there were two things especially that made me want to work on it: a novel by Heinlein called The Moon is a Harsh Mistress, which featured an intelligent computer called Mike, and a PBS documentary that showed Terry Winograd using SHRDLU. I haven't tried rereading The Moon is a Harsh Mistress, so I don't know how well it has aged, but when I read it I was drawn entirely into its world. It seemed only a matter of time before we'd have Mike, and when I saw Winograd using SHRDLU, it seemed like that time would be a few years at most. All you had to do was teach SHRDLU more words.\n",
-       "\n",
-       "There weren't any classes in AI at Cornell then, not even graduate classes, so I started trying to teach myself. Which meant learning Lisp, since in those days Lisp was regarded as the language of A...<br>"
-      ],
-      "text/plain": [
-       "<IPython.core.display.Markdown object>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    },
-    {
-     "data": {
-      "text/markdown": [
-       "**Node ID:** e4b7d7lestm2<br>**Similarity:** 0.6296358108520508<br>**Text:** What I Worked On\n",
-       "\n",
-       "February 2021\n",
-       "\n",
-       "Before college the two main things I worked on, outside of school, were writing and programming. I didn't write essays. I wrote what beginning writers were supposed to write then, and probably still are: short stories. My stories were awful. They had hardly any plot, just characters with strong feelings, which I imagined made them deep.\n",
-       "\n",
-       "The first programs I tried writing were on the IBM 1401 that our school district used for what was then called \"data processing.\" This was in 9th grade, so I was 13 or 14. The school district's 1401 happened to be in the basement of our junior high school, and my friend Rich Draves and I got permission to use it. It was like a mini Bond villain's lair down there, with all these alien-looking machines — CPU, disk drives, printer, card reader — sitting up on a raised floor under bright fluorescent lights.\n",
-       "\n",
-       "The language we used was an early version of Fortran. You had to type programs on punch cards, then stack them in ...<br>"
-      ],
-      "text/plain": [
-       "<IPython.core.display.Markdown object>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    },
-    {
-     "data": {
-      "text/markdown": [
-       "**Node ID:** mmshdy59as8n<br>**Similarity:** 0.616265058517456<br>**Text:** I couldn't have put this into words when I was 18. All I knew at the time was that I kept taking philosophy courses and they kept being boring. So I decided to switch to AI.\n",
-       "\n",
-       "AI was in the air in the mid 1980s, but there were two things especially that made me want to work on it: a novel by Heinlein called The Moon is a Harsh Mistress, which featured an intelligent computer called Mike, and a PBS documentary that showed Terry Winograd using SHRDLU. I haven't tried rereading The Moon is a Harsh Mistress, so I don't know how well it has aged, but when I read it I was drawn entirely into its world. It seemed only a matter of time before we'd have Mike, and when I saw Winograd using SHRDLU, it seemed like that time would be a few years at most. All you had to do was teach SHRDLU more words.\n",
-       "\n",
-       "There weren't any classes in AI at Cornell then, not even graduate classes, so I started trying to teach myself. Which meant learning Lisp, since in those days Lisp was regarded as the language of A...<br>"
-      ],
-      "text/plain": [
-       "<IPython.core.display.Markdown object>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    }
-   ],
-   "source": [
-    "from llama_index.response.notebook_utils import display_source_node\n",
-    "\n",
-    "for r in response.source_nodes:\n",
-    "    display_source_node(r, source_length=1000)"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "### Google Semantic Retrieval: Using `Extractive` Answer Style"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Cornell\n"
-     ]
-    }
-   ],
-   "source": [
-    "from google.ai.generativelanguage import (\n",
-    "    GenerateAnswerRequest,\n",
-    ")\n",
-    "\n",
-    "query_engine = google_index.as_query_engine(\n",
-    "    # Extra parameters specific to the Google query engine.\n",
-    "    temperature=0.3,\n",
-    "    answer_style=GenerateAnswerRequest.AnswerStyle.EXTRACTIVE,\n",
-    ")\n",
-    "\n",
-    "response = query_engine.query(\"Which program did this author attend?\")\n",
-    "print(response)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/markdown": [
-       "**Node ID:** 0dd287af-2f39-4ad7-85a8-89b1085e5a4f<br>**Similarity:** None<br>**Text:** I couldn't have put this into words when I was 18. All I knew at the time was that I kept taking philosophy courses and they kept being boring. So I decided to switch to AI.\n",
-       "\n",
-       "AI was in the air in the mid 1980s, but there were two things especially that made me want to work on it: a novel by Heinlein called The Moon is a Harsh Mistress, which featured an intelligent computer called Mike, and a PBS documentary that showed Terry Winograd using SHRDLU. I haven't tried rereading The Moon is a Harsh Mistress, so I don't know how well it has aged, but when I read it I was drawn entirely into its world. It seemed only a matter of time before we'd have Mike, and when I saw Winograd using SHRDLU, it seemed like that time would be a few years at most. All you had to do was teach SHRDLU more words.\n",
-       "\n",
-       "There weren't any classes in AI at Cornell then, not even graduate classes, so I started trying to teach myself. Which meant learning Lisp, since in those days Lisp was regarded as the language of A...<br>"
-      ],
-      "text/plain": [
-       "<IPython.core.display.Markdown object>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    },
-    {
-     "data": {
-      "text/markdown": [
-       "**Node ID:** e4b7d7lestm2<br>**Similarity:** 0.6296358108520508<br>**Text:** What I Worked On\n",
-       "\n",
-       "February 2021\n",
-       "\n",
-       "Before college the two main things I worked on, outside of school, were writing and programming. I didn't write essays. I wrote what beginning writers were supposed to write then, and probably still are: short stories. My stories were awful. They had hardly any plot, just characters with strong feelings, which I imagined made them deep.\n",
-       "\n",
-       "The first programs I tried writing were on the IBM 1401 that our school district used for what was then called \"data processing.\" This was in 9th grade, so I was 13 or 14. The school district's 1401 happened to be in the basement of our junior high school, and my friend Rich Draves and I got permission to use it. It was like a mini Bond villain's lair down there, with all these alien-looking machines — CPU, disk drives, printer, card reader — sitting up on a raised floor under bright fluorescent lights.\n",
-       "\n",
-       "The language we used was an early version of Fortran. You had to type programs on punch cards, then stack them in ...<br>"
-      ],
-      "text/plain": [
-       "<IPython.core.display.Markdown object>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    },
-    {
-     "data": {
-      "text/markdown": [
-       "**Node ID:** mmshdy59as8n<br>**Similarity:** 0.616265058517456<br>**Text:** I couldn't have put this into words when I was 18. All I knew at the time was that I kept taking philosophy courses and they kept being boring. So I decided to switch to AI.\n",
-       "\n",
-       "AI was in the air in the mid 1980s, but there were two things especially that made me want to work on it: a novel by Heinlein called The Moon is a Harsh Mistress, which featured an intelligent computer called Mike, and a PBS documentary that showed Terry Winograd using SHRDLU. I haven't tried rereading The Moon is a Harsh Mistress, so I don't know how well it has aged, but when I read it I was drawn entirely into its world. It seemed only a matter of time before we'd have Mike, and when I saw Winograd using SHRDLU, it seemed like that time would be a few years at most. All you had to do was teach SHRDLU more words.\n",
-       "\n",
-       "There weren't any classes in AI at Cornell then, not even graduate classes, so I started trying to teach myself. Which meant learning Lisp, since in those days Lisp was regarded as the language of A...<br>"
-      ],
-      "text/plain": [
-       "<IPython.core.display.Markdown object>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    }
-   ],
-   "source": [
-    "from llama_index.response.notebook_utils import display_source_node\n",
-    "\n",
-    "for r in response.source_nodes:\n",
-    "    display_source_node(r, source_length=1000)"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "### Google Semantic Retrieval: Advanced Retrieval with LlamaIndex Reranking and Synthesizer\n",
-    "* `Gemini as Reranker` LLM\n",
-    "* Or using `Sentence BERT` cross encoder for Reranking\n",
-    "* Adopt `Abstractive` Answer Style for Response \n",
-    "\n",
-    "For the 1st example of reranking, we tried using `Gemini` as LLM for reranking the retrieved nodes."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "from llama_index.response_synthesizers.google.generativeai import (\n",
-    "    GoogleTextSynthesizer,\n",
-    ")\n",
-    "from llama_index.vector_stores.google.generativeai import (\n",
-    "    GoogleVectorStore,\n",
-    "    google_service_context,\n",
-    ")\n",
-    "from llama_index import ServiceContext, VectorStoreIndex\n",
-    "from llama_index.llms import Gemini\n",
-    "from llama_index.postprocessor import LLMRerank\n",
-    "from llama_index.query_engine import RetrieverQueryEngine\n",
-    "from llama_index.retrievers import VectorIndexRetriever\n",
-    "from llama_index.embeddings import GeminiEmbedding\n",
-    "\n",
-    "\n",
-    "# Set up the query engine with a LLM as reranker.\n",
-    "response_synthesizer = GoogleTextSynthesizer.from_defaults(\n",
-    "    temperature=0.7, answer_style=GenerateAnswerRequest.AnswerStyle.ABSTRACTIVE\n",
-    ")\n",
-    "\n",
-    "embed_model = GeminiEmbedding(\n",
-    "    model_name=\"models/embedding-001\", api_key=GOOGLE_API_KEY\n",
-    ")\n",
-    "\n",
-    "reranker = LLMRerank(\n",
-    "    top_n=5,\n",
-    "    service_context=ServiceContext.from_defaults(\n",
-    "        llm=Gemini(api_key=GOOGLE_API_KEY), embed_model=embed_model\n",
-    "    ),\n",
-    ")\n",
-    "retriever = google_index.as_retriever(similarity_top_k=5)\n",
-    "query_engine = RetrieverQueryEngine.from_args(\n",
-    "    retriever=retriever,\n",
-    "    response_synthesizer=response_synthesizer,\n",
-    "    node_postprocessors=[reranker],\n",
-    ")\n",
-    "\n",
-    "# Query for better result!\n",
-    "response = query_engine.query(\"Which program did this author attend?\")"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "The author attended Cornell, Harvard, RISD, and the Accademia di Belli Arti in Florence.\n"
-     ]
-    }
-   ],
-   "source": [
-    "print(response.response)"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "### For the 2nd example of reranking, we use `SentenceTransformer` for cross-encoder reranking the retrieved nodes"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "from llama_index.postprocessor import SentenceTransformerRerank\n",
-    "\n",
-    "sbert_rerank = SentenceTransformerRerank(\n",
-    "    model=\"cross-encoder/ms-marco-MiniLM-L-2-v2\", top_n=5\n",
-    ")"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "from llama_index.response_synthesizers.google.generativeai import (\n",
-    "    GoogleTextSynthesizer,\n",
-    ")\n",
-    "from llama_index.vector_stores.google.generativeai import (\n",
-    "    GoogleVectorStore,\n",
-    "    google_service_context,\n",
-    ")\n",
-    "from llama_index import ServiceContext, VectorStoreIndex\n",
-    "from llama_index.llms import Gemini\n",
-    "from llama_index.postprocessor import LLMRerank\n",
-    "from llama_index.query_engine import RetrieverQueryEngine\n",
-    "from llama_index.retrievers import VectorIndexRetriever\n",
-    "from llama_index.embeddings import GeminiEmbedding\n",
-    "\n",
-    "\n",
-    "# Set up the query engine with a LLM as reranker.\n",
-    "response_synthesizer = GoogleTextSynthesizer.from_defaults(\n",
-    "    temperature=0.1, answer_style=GenerateAnswerRequest.AnswerStyle.ABSTRACTIVE\n",
-    ")\n",
-    "\n",
-    "retriever = google_index.as_retriever(similarity_top_k=5)\n",
-    "query_engine = RetrieverQueryEngine.from_args(\n",
-    "    retriever=retriever,\n",
-    "    response_synthesizer=response_synthesizer,\n",
-    "    node_postprocessors=[sbert_rerank],\n",
-    ")\n",
-    "\n",
-    "# Query for better result!\n",
-    "response = query_engine.query(\"Which program did this author attend?\")"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "This author attended Cornell, Harvard, RISD, and the Accademia di Belli Arti in Florence.\n"
-     ]
-    }
-   ],
-   "source": [
-    "print(response.response)"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "### `Observation` for `Google Semantic Retrieval`\n",
-    "* `Google Semantic Retrieval` supports different `AnswerStyle`. Different style could yield different retrieval and final synthesis results. \n",
-    "* The results are mostly partly correct without reranker.\n",
-    "* After applying either `Gemini as LLM` or `SBERT as cross-encoder` reranker, the results are more comprehensive and accurate.\n",
-    "\n"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## LlamaIndex Default Baseline with OpenAI embedding and GPT as LLM for Synthesizer "
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "import os\n",
-    "\n",
-    "OPENAI_API_TOKEN = \"sk-\"\n",
-    "os.environ[\"OPENAI_API_KEY\"] = OPENAI_API_TOKEN"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stderr",
-     "output_type": "stream",
-     "text": [
-      "huggingface/tokenizers: The current process just got forked, after parallelism has already been used. Disabling parallelism to avoid deadlocks...\n",
-      "To disable this warning, you can either:\n",
-      "\t- Avoid using `tokenizers` before the fork if possible\n",
-      "\t- Explicitly set the environment variable TOKENIZERS_PARALLELISM=(true | false)\n"
-     ]
-    }
-   ],
-   "source": [
-    "from llama_index import VectorStoreIndex, StorageContext, ServiceContext\n",
-    "from llama_index.vector_stores import QdrantVectorStore\n",
-    "from llama_index import StorageContext\n",
-    "import qdrant_client\n",
-    "\n",
-    "# documents = SimpleDirectoryReader(\"./data/paul_graham/\").load_data()\n",
-    "\n",
-    "# Create a local Qdrant vector store\n",
-    "client = qdrant_client.QdrantClient(path=\"qdrant_retrieval_2\")\n",
-    "\n",
-    "vector_store = QdrantVectorStore(client=client, collection_name=\"collection\")\n",
-    "qdrant_index = VectorStoreIndex.from_documents(documents)\n",
-    "\n",
-    "service_context = ServiceContext.from_defaults(chunk_size=256)\n",
-    "storage_context = StorageContext.from_defaults(vector_store=vector_store)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "The author attended the Accademia di Belli Arti.\n"
-     ]
-    }
-   ],
-   "source": [
-    "query_engine = qdrant_index.as_query_engine()\n",
-    "response = query_engine.query(\"Which program did this author attend?\")\n",
-    "print(response)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/markdown": [
-       "**Node ID:** 24709216-afd5-41c4-bdcf-5adf9761b93c<br>**Similarity:** 0.8373684056731672<br>**Text:** What I Worked On\n",
-       "\n",
-       "February 2021\n",
-       "\n",
-       "Before college the two main things I worked on, outside of school, were writing and programming. I didn't write essays. I wrote what beginning writers were supposed to write then, and probably still are: short stories. My stories were awful. They had hardly any plot, just characters with strong feelings, which I imagined made them deep.\n",
-       "\n",
-       "The first programs I tried writing were on the IBM 1401 that our school district used for what was then called \"data processing.\" This was in 9th grade, so I was 13 or 14. The school district's 1401 happened to be in the basement of our junior high school, and my friend Rich Draves and I got permission to use it. It was like a mini Bond villain's lair down there, with all these alien-looking machines — CPU, disk drives, printer, card reader — sitting up on a raised floor under bright fluorescent lights.\n",
-       "\n",
-       "The language we used was an early version of Fortran. You had to type programs on punch cards, then stack them in ...<br>"
-      ],
-      "text/plain": [
-       "<IPython.core.display.Markdown object>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    },
-    {
-     "data": {
-      "text/markdown": [
-       "**Node ID:** 9ba0e798-b802-41c5-9353-32cdb0419ff7<br>**Similarity:** 0.8259537663110694<br>**Text:** I didn't want to drop out of grad school, but how else was I going to get out? I remember when my friend Robert Morris got kicked out of Cornell for writing the internet worm of 1988, I was envious that he'd found such a spectacular way to get out of grad school.\n",
-       "\n",
-       "Then one day in April 1990 a crack appeared in the wall. I ran into professor Cheatham and he asked if I was far enough along to graduate that June. I didn't have a word of my dissertation written, but in what must have been the quickest bit of thinking in my life, I decided to take a shot at writing one in the 5 weeks or so that remained before the deadline, reusing parts of On Lisp where I could, and I was able to respond, with no perceptible delay \"Yes, I think so. I'll give you something to read in a few days.\"\n",
-       "\n",
-       "I picked applications of continuations as the topic. In retrospect I should have written about macros and embedded languages. There's a whole world there that's barely been explored. But all I wanted was to get...<br>"
-      ],
-      "text/plain": [
-       "<IPython.core.display.Markdown object>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    }
-   ],
-   "source": [
-    "for r in response.source_nodes:\n",
-    "    display_source_node(r, source_length=1000)"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "#### Rewrite the Query to include more entities related to `program`"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "The author attended Cornell University for grad school and later applied to RISD (Rhode Island School of Design) for the BFA program.\n"
-     ]
-    }
-   ],
-   "source": [
-    "query_engine = qdrant_index.as_query_engine()\n",
-    "response = query_engine.query(\n",
-    "    \"Which universities or schools or programs did this author attend?\"\n",
-    ")\n",
-    "print(response)"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## LlamaIndex Default Configuration with LLM Reranker and Tree Summarize for Response"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "from llama_index import get_response_synthesizer\n",
-    "\n",
-    "\n",
-    "reranker = LLMRerank(top_n=3, service_context=service_context)\n",
-    "retriever = qdrant_index.as_retriever(similarity_top_k=3)\n",
-    "query_engine = RetrieverQueryEngine.from_args(\n",
-    "    retriever=retriever,\n",
-    "    response_synthesizer=get_response_synthesizer(\n",
-    "        service_context=service_context,\n",
-    "        response_mode=\"tree_summarize\",\n",
-    "    ),\n",
-    "    node_postprocessors=[reranker],\n",
-    ")\n",
-    "\n",
-    "response = query_engine.query(\n",
-    "    \"Which universities or schools or programs did this author attend?\"\n",
-    ")"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "The author attended Cornell University for grad school and later applied to RISD (Rhode Island School of Design) for the BFA program. The author also mentioned studying at the Accademia di Belli Arti in Florence.\n"
-     ]
-    }
-   ],
-   "source": [
-    "print(response.response)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "from llama_index import get_response_synthesizer\n",
-    "\n",
-    "\n",
-    "sbert_rerank = SentenceTransformerRerank(\n",
-    "    model=\"cross-encoder/ms-marco-MiniLM-L-2-v2\", top_n=5\n",
-    ")\n",
-    "retriever = qdrant_index.as_retriever(similarity_top_k=5)\n",
-    "query_engine = RetrieverQueryEngine.from_args(\n",
-    "    retriever=retriever,\n",
-    "    response_synthesizer=get_response_synthesizer(\n",
-    "        service_context=service_context,\n",
-    "        response_mode=\"tree_summarize\",\n",
-    "    ),\n",
-    "    node_postprocessors=[sbert_rerank],\n",
-    ")\n",
-    "\n",
-    "response = query_engine.query(\n",
-    "    \"Which universities or schools or programs did this author attend?\"\n",
-    ")"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "The author attended Cornell University, Harvard University, RISD (Rhode Island School of Design), and the Accademia di Belli Arti in Florence.\n"
-     ]
-    }
-   ],
-   "source": [
-    "print(response.response)"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "### `Observation` for LlamaIndex default retrieval\n",
-    "* the default query engine from LlamaIndex could only yield partly correct answer\n",
-    "* With `Query Rewrite`, the results getting better.\n",
-    "* With `Reranking` with top-5 retrieved results, the results get `100% accurate`."
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## Vectara Managed Index and Retrieval"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "from llama_index import SimpleDirectoryReader\n",
-    "from llama_index.indices import VectaraIndex"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "vectara_customer_id = \"\"\n",
-    "vectara_corpus_id = \"\"\n",
-    "vectara_api_key = \"\"\n",
-    "\n",
-    "documents = SimpleDirectoryReader(\"./data/paul_graham/\").load_data()\n",
-    "vectara_index = VectaraIndex.from_documents(\n",
-    "    documents,\n",
-    "    vectara_customer_id=vectara_customer_id,\n",
-    "    vectara_corpus_id=vectara_corpus_id,\n",
-    "    vectara_api_key=vectara_api_key,\n",
-    ")"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "The author mentioned attending a program at Cornell University [4], where they pursued their undergraduate studies. They also mentioned being accepted to Harvard [3] for their graduate studies. Additionally, the author applied to RISD [5] but ended up attending and doing the foundation program at RISD in the BFA program. However, it is unclear which specific program they attended at Cornell or Harvard.\n"
-     ]
-    }
-   ],
-   "source": [
-    "vectara_query_engine = vectara_index.as_query_engine(similarity_top_k=5)\n",
-    "response = vectara_query_engine.query(\"Which program did this author attend?\")\n",
-    "\n",
-    "print(response)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/markdown": [
-       "**Node ID:** 97ffee3f12b053ee7e3aa5a4b514a8d79cb6c698fb4aa563046a86afce81d1d19cd6e93d12ba2090866419ec9c873f0980c4de6f6e150c3f001c4ee8d6106fdd<br>**Similarity:** 0.88113284<br>**Text:** I knew what I was going to do. For my undergraduate thesis, I reverse-engineered SHRDLU. My God did I love working on that program. It was a pleasing bit of code, but what made it even more exciting was my belief — hard to imagine now, but not unique in 1985 — that it was already climbing the lower slopes of intelligence. I had gotten into a program at Cornell that didn't make you choose a major.<br>"
-      ],
-      "text/plain": [
-       "<IPython.core.display.Markdown object>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    },
-    {
-     "data": {
-      "text/markdown": [
-       "**Node ID:** 97ffee3f12b053ee7e3aa5a4b514a8d79cb6c698fb4aa563046a86afce81d1d19cd6e93d12ba2090866419ec9c873f0980c4de6f6e150c3f001c4ee8d6106fdd<br>**Similarity:** 0.7821562<br>**Text:** Only Harvard accepted me, so that was where I went. I don't remember the moment it happened, or if there even was a specific moment, but during the first year of grad school I realized that AI, as practiced at the time, was a hoax. By which I mean the sort of AI in which a program that's told \"the dog is sitting on the chair\" translates this into some formal representation and adds it to the list of things it knows. What these programs really showed was that there's a subset of natural language that's a formal language. But a very proper subset.<br>"
-      ],
-      "text/plain": [
-       "<IPython.core.display.Markdown object>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    },
-    {
-     "data": {
-      "text/markdown": [
-       "**Node ID:** 97ffee3f12b053ee7e3aa5a4b514a8d79cb6c698fb4aa563046a86afce81d1d19cd6e93d12ba2090866419ec9c873f0980c4de6f6e150c3f001c4ee8d6106fdd<br>**Similarity:** 0.76425356<br>**Text:** I applied to two: RISD in the US, and the Accademia di Belli Arti in Florence, which, because it was the oldest art school, I imagined would be good. RISD accepted me, and I never heard back from the Accademia, so off to Providence I went. I'd applied for the BFA program at RISD, which meant in effect that I had to go to college again. This was not as strange as it sounds, because I was only 25, and art schools are full of people of different ages. RISD counted me as a transfer sophomore and said I had to do the foundation that summer.<br>"
-      ],
-      "text/plain": [
-       "<IPython.core.display.Markdown object>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    },
-    {
-     "data": {
-      "text/markdown": [
-       "**Node ID:** 97ffee3f12b053ee7e3aa5a4b514a8d79cb6c698fb4aa563046a86afce81d1d19cd6e93d12ba2090866419ec9c873f0980c4de6f6e150c3f001c4ee8d6106fdd<br>**Similarity:** 0.7245674<br>**Text:** The subset I would build as an open source project was the new Lisp, whose parentheses I now wouldn't even have to hide. A lot of Lisp hackers dream of building a new Lisp, partly because one of the distinctive features of the language is that it has dialects, and partly, I think, because we have in our minds a Platonic form of Lisp that all existing dialects fall short of. I certainly did. So at the end of the summer Dan and I switched to working on this new dialect of Lisp, which I called Arc, in a house I bought in Cambridge. The following spring, lightning struck. I was invited to give a talk at a Lisp conference, so I gave one about how we'd used Lisp at Viaweb.<br>"
-      ],
-      "text/plain": [
-       "<IPython.core.display.Markdown object>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    },
-    {
-     "data": {
-      "text/markdown": [
-       "**Node ID:** 97ffee3f12b053ee7e3aa5a4b514a8d79cb6c698fb4aa563046a86afce81d1d19cd6e93d12ba2090866419ec9c873f0980c4de6f6e150c3f001c4ee8d6106fdd<br>**Similarity:** 0.7108299<br>**Text:** Grad students could take classes in any department, and my advisor, Tom Cheatham, was very easy going. If he even knew about the strange classes I was taking, he never said anything. So now I was in a PhD program in computer science, yet planning to be an artist, yet also genuinely in love with Lisp hacking and working away at On Lisp. In other words, like many a grad student, I was working energetically on multiple projects that were not my thesis. I didn't see a way out of this situation.<br>"
-      ],
-      "text/plain": [
-       "<IPython.core.display.Markdown object>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    }
-   ],
-   "source": [
-    "for r in response.source_nodes:\n",
-    "    display_source_node(r, source_length=1000)"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "### `Observation` for Vectara\n",
-    "* Vectara could provide somehow accurate results with citations, but it misses `Accademia di Belle Arti in Florence`."
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## ColBERT-V2 Managed Index and Retrieval"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Already up to date.\n"
-     ]
-    }
-   ],
-   "source": [
-    "!git -C ColBERT/ pull || git clone https://github.com/stanford-futuredata/ColBERT.git\n",
-    "import sys\n",
-    "\n",
-    "sys.path.insert(0, \"ColBERT/\")"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Requirement already satisfied: faiss-cpu in /Users/haotianzhang/llama_index/venv/lib/python3.11/site-packages (1.7.4)\n",
-      "Requirement already satisfied: torch in /Users/haotianzhang/llama_index/venv/lib/python3.11/site-packages (2.1.2)\n",
-      "Requirement already satisfied: filelock in /Users/haotianzhang/llama_index/venv/lib/python3.11/site-packages (from torch) (3.13.1)\n",
-      "Requirement already satisfied: typing-extensions in /Users/haotianzhang/llama_index/venv/lib/python3.11/site-packages (from torch) (4.9.0)\n",
-      "Requirement already satisfied: sympy in /Users/haotianzhang/llama_index/venv/lib/python3.11/site-packages (from torch) (1.12)\n",
-      "Requirement already satisfied: networkx in /Users/haotianzhang/llama_index/venv/lib/python3.11/site-packages (from torch) (3.2.1)\n",
-      "Requirement already satisfied: jinja2 in /Users/haotianzhang/llama_index/venv/lib/python3.11/site-packages (from torch) (3.1.2)\n",
-      "Requirement already satisfied: fsspec in /Users/haotianzhang/llama_index/venv/lib/python3.11/site-packages (from torch) (2023.10.0)\n",
-      "Requirement already satisfied: MarkupSafe>=2.0 in /Users/haotianzhang/llama_index/venv/lib/python3.11/site-packages (from jinja2->torch) (2.1.3)\n",
-      "Requirement already satisfied: mpmath>=0.19 in /Users/haotianzhang/llama_index/venv/lib/python3.11/site-packages (from sympy->torch) (1.3.0)\n"
-     ]
-    }
-   ],
-   "source": [
-    "!pip install faiss-cpu torch"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "from llama_index import SimpleDirectoryReader, ServiceContext\n",
-    "from llama_index.indices import ColbertIndex\n",
-    "from llama_index.llms import OpenAI"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "import os\n",
-    "\n",
-    "OPENAI_API_TOKEN = \"sk-\"\n",
-    "os.environ[\"OPENAI_API_KEY\"] = OPENAI_API_TOKEN"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "### Build ColBERT-V2 end-to-end Index"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "\n",
-      "\n",
-      "[Dec 21, 15:49:02] #> Creating directory storage/colbert_index/ \n",
-      "\n",
-      "\n",
-      "#> Starting...\n",
-      "{\n",
-      "    \"query_token_id\": \"[unused0]\",\n",
-      "    \"doc_token_id\": \"[unused1]\",\n",
-      "    \"query_token\": \"[Q]\",\n",
-      "    \"doc_token\": \"[D]\",\n",
-      "    \"ncells\": null,\n",
-      "    \"centroid_score_threshold\": null,\n",
-      "    \"ndocs\": null,\n",
-      "    \"load_index_with_mmap\": false,\n",
-      "    \"index_path\": null,\n",
-      "    \"nbits\": 2,\n",
-      "    \"kmeans_niters\": 4,\n",
-      "    \"resume\": false,\n",
-      "    \"similarity\": \"cosine\",\n",
-      "    \"bsize\": 64,\n",
-      "    \"accumsteps\": 1,\n",
-      "    \"lr\": 3e-6,\n",
-      "    \"maxsteps\": 500000,\n",
-      "    \"save_every\": null,\n",
-      "    \"warmup\": null,\n",
-      "    \"warmup_bert\": null,\n",
-      "    \"relu\": false,\n",
-      "    \"nway\": 2,\n",
-      "    \"use_ib_negatives\": false,\n",
-      "    \"reranker\": false,\n",
-      "    \"distillation_alpha\": 1.0,\n",
-      "    \"ignore_scores\": false,\n",
-      "    \"model_name\": null,\n",
-      "    \"query_maxlen\": 60,\n",
-      "    \"attend_to_mask_tokens\": false,\n",
-      "    \"interaction\": \"colbert\",\n",
-      "    \"dim\": 128,\n",
-      "    \"doc_maxlen\": 120,\n",
-      "    \"mask_punctuation\": true,\n",
-      "    \"checkpoint\": \"colbert-ir\\/colbertv2.0\",\n",
-      "    \"triples\": null,\n",
-      "    \"collection\": [\n",
-      "        \"What I Worked On\\n\\nFebruary 2021\\n\\nBefore college the two main things I worked on, outside of school, were writing and programming. I didn't write essays. I wrote what beginning writers were supposed to write then, and probably still are: short stories. My stories were awful. They had hardly any plot, just characters with strong feelings, which I imagined made them deep.\\n\\nThe first programs I tried writing were on the IBM 1401 that our school district used for what was then called \\\"data processing.\\\" This was in 9th grade, so I was 13 or 14. The school district's 1401 happened to be in the basement of our junior high school, and my friend Rich Draves and I got permission to use it. It was like a mini Bond villain's lair down there, with all these alien-looking machines \\u2014 CPU, disk drives, printer, card reader \\u2014 sitting up on a raised floor under bright fluorescent lights.\\n\\nThe language we used was an early version of Fortran. You had to type programs on punch cards, then stack them in the card reader and press a button to load the program into memory and run it. The result would ordinarily be to print something on the spectacularly loud printer.\\n\\nI was puzzled by the 1401. I couldn't figure out what to do with it. And in retrospect there's not much I could have done with it. The only form of input to programs was data stored on punched cards, and I didn't have any data stored on punched cards. The only other option was to do things that didn't rely on any input, like calculate approximations of pi, but I didn't know enough math to do anything interesting of that type. So I'm not surprised I can't remember any programs I wrote, because they can't have done much. My clearest memory is of the moment I learned it was possible for programs not to terminate, when one of mine didn't. On a machine without time-sharing, this was a social as well as a technical error, as the data center manager's expression made clear.\\n\\nWith microcomputers, everything changed. Now you could have a computer sitting right in front of you, on a desk, that could respond to your keystrokes as it was running instead of just churning through a stack of punch cards and then stopping. [1]\\n\\nThe first of my friends to get a microcomputer built it himself. It was sold as a kit by Heathkit. I remember vividly how impressed and envious I felt watching him sitting in front of it, typing programs right into the computer.\\n\\nComputers were expensive in those days and it took me years of nagging before I convinced my father to buy one, a TRS-80, in about 1980. The gold standard then was the Apple II, but a TRS-80 was good enough. This was when I really started programming. I wrote simple games, a program to predict how high my model rockets would fly, and a word processor that my father used to write at least one book. There was only room in memory for about 2 pages of text, so he'd write 2 pages at a time and then print them out, but it was a lot better than a typewriter.\\n\\nThough I liked programming, I didn't plan to study it in college. In college I was going to study philosophy, which sounded much more powerful. It seemed, to my naive high school self, to be the study of the ultimate truths, compared to which the things studied in other fields would be mere domain knowledge. What I discovered when I got to college was that the other fields took up so much of the space of ideas that there wasn't much left for these supposed ultimate truths. All that seemed left for philosophy were edge cases that people in other fields felt could safely be ignored.\\n\\nI couldn't have put this into words when I was 18. All I knew at the time was that I kept taking philosophy courses and they kept being boring. So I decided to switch to AI.\\n\\nAI was in the air in the mid 1980s, but there were two things especially that made me want to work on it: a novel by Heinlein called The Moon is a Harsh Mistress, which featured an intelligent computer called Mike, and a PBS documentary that showed Terry Winograd using SHRDLU. I haven't tried rereading The Moon is a Harsh Mistress, so I don't know how well it has aged, but when I read it I was drawn entirely into its world. It seemed only a matter of time before we'd have Mike, and when I saw Winograd using SHRDLU, it seemed like that time would be a few years at most.\",\n",
-      "        \"I couldn't have put this into words when I was 18. All I knew at the time was that I kept taking philosophy courses and they kept being boring. So I decided to switch to AI.\\n\\nAI was in the air in the mid 1980s, but there were two things especially that made me want to work on it: a novel by Heinlein called The Moon is a Harsh Mistress, which featured an intelligent computer called Mike, and a PBS documentary that showed Terry Winograd using SHRDLU. I haven't tried rereading The Moon is a Harsh Mistress, so I don't know how well it has aged, but when I read it I was drawn entirely into its world. It seemed only a matter of time before we'd have Mike, and when I saw Winograd using SHRDLU, it seemed like that time would be a few years at most. All you had to do was teach SHRDLU more words.\\n\\nThere weren't any classes in AI at Cornell then, not even graduate classes, so I started trying to teach myself. Which meant learning Lisp, since in those days Lisp was regarded as the language of AI. The commonly used programming languages then were pretty primitive, and programmers' ideas correspondingly so. The default language at Cornell was a Pascal-like language called PL\\/I, and the situation was similar elsewhere. Learning Lisp expanded my concept of a program so fast that it was years before I started to have a sense of where the new limits were. This was more like it; this was what I had expected college to do. It wasn't happening in a class, like it was supposed to, but that was ok. For the next couple years I was on a roll. I knew what I was going to do.\\n\\nFor my undergraduate thesis, I reverse-engineered SHRDLU. My God did I love working on that program. It was a pleasing bit of code, but what made it even more exciting was my belief \\u2014 hard to imagine now, but not unique in 1985 \\u2014 that it was already climbing the lower slopes of intelligence.\\n\\nI had gotten into a program at Cornell that didn't make you choose a major. You could take whatever classes you liked, and choose whatever you liked to put on your degree. I of course chose \\\"Artificial Intelligence.\\\" When I got the actual physical diploma, I was dismayed to find that the quotes had been included, which made them read as scare-quotes. At the time this bothered me, but now it seems amusingly accurate, for reasons I was about to discover.\\n\\nI applied to 3 grad schools: MIT and Yale, which were renowned for AI at the time, and Harvard, which I'd visited because Rich Draves went there, and was also home to Bill Woods, who'd invented the type of parser I used in my SHRDLU clone. Only Harvard accepted me, so that was where I went.\\n\\nI don't remember the moment it happened, or if there even was a specific moment, but during the first year of grad school I realized that AI, as practiced at the time, was a hoax. By which I mean the sort of AI in which a program that's told \\\"the dog is sitting on the chair\\\" translates this into some formal representation and adds it to the list of things it knows.\\n\\nWhat these programs really showed was that there's a subset of natural language that's a formal language. But a very proper subset. It was clear that there was an unbridgeable gap between what they could do and actually understanding natural language. It was not, in fact, simply a matter of teaching SHRDLU more words. That whole way of doing AI, with explicit data structures representing concepts, was not going to work. Its brokenness did, as so often happens, generate a lot of opportunities to write papers about various band-aids that could be applied to it, but it was never going to get us Mike.\\n\\nSo I looked around to see what I could salvage from the wreckage of my plans, and there was Lisp. I knew from experience that Lisp was interesting for its own sake and not just for its association with AI, even though that was the main reason people cared about it at the time. So I decided to focus on Lisp. In fact, I decided to write a book about Lisp hacking. It's scary to think how little I knew about Lisp hacking when I started writing that book. But there's nothing like writing a book about something to help you learn it. The book, On Lisp, wasn't published till 1993, but I wrote much of it in grad school.\\n\\nComputer Science is an uneasy alliance between two halves, theory and systems. The theory people prove things, and the systems people build things. I wanted to build things.\",\n",
-      "        \"So I looked around to see what I could salvage from the wreckage of my plans, and there was Lisp. I knew from experience that Lisp was interesting for its own sake and not just for its association with AI, even though that was the main reason people cared about it at the time. So I decided to focus on Lisp. In fact, I decided to write a book about Lisp hacking. It's scary to think how little I knew about Lisp hacking when I started writing that book. But there's nothing like writing a book about something to help you learn it. The book, On Lisp, wasn't published till 1993, but I wrote much of it in grad school.\\n\\nComputer Science is an uneasy alliance between two halves, theory and systems. The theory people prove things, and the systems people build things. I wanted to build things. I had plenty of respect for theory \\u2014 indeed, a sneaking suspicion that it was the more admirable of the two halves \\u2014 but building things seemed so much more exciting.\\n\\nThe problem with systems work, though, was that it didn't last. Any program you wrote today, no matter how good, would be obsolete in a couple decades at best. People might mention your software in footnotes, but no one would actually use it. And indeed, it would seem very feeble work. Only people with a sense of the history of the field would even realize that, in its time, it had been good.\\n\\nThere were some surplus Xerox Dandelions floating around the computer lab at one point. Anyone who wanted one to play around with could have one. I was briefly tempted, but they were so slow by present standards; what was the point? No one else wanted one either, so off they went. That was what happened to systems work.\\n\\nI wanted not just to build things, but to build things that would last.\\n\\nIn this dissatisfied state I went in 1988 to visit Rich Draves at CMU, where he was in grad school. One day I went to visit the Carnegie Institute, where I'd spent a lot of time as a kid. While looking at a painting there I realized something that might seem obvious, but was a big surprise to me. There, right on the wall, was something you could make that would last. Paintings didn't become obsolete. Some of the best ones were hundreds of years old.\\n\\nAnd moreover this was something you could make a living doing. Not as easily as you could by writing software, of course, but I thought if you were really industrious and lived really cheaply, it had to be possible to make enough to survive. And as an artist you could be truly independent. You wouldn't have a boss, or even need to get research funding.\\n\\nI had always liked looking at paintings. Could I make them? I had no idea. I'd never imagined it was even possible. I knew intellectually that people made art \\u2014 that it didn't just appear spontaneously \\u2014 but it was as if the people who made it were a different species. They either lived long ago or were mysterious geniuses doing strange things in profiles in Life magazine. The idea of actually being able to make art, to put that verb before that noun, seemed almost miraculous.\\n\\nThat fall I started taking art classes at Harvard. Grad students could take classes in any department, and my advisor, Tom Cheatham, was very easy going. If he even knew about the strange classes I was taking, he never said anything.\\n\\nSo now I was in a PhD program in computer science, yet planning to be an artist, yet also genuinely in love with Lisp hacking and working away at On Lisp. In other words, like many a grad student, I was working energetically on multiple projects that were not my thesis.\\n\\nI didn't see a way out of this situation. I didn't want to drop out of grad school, but how else was I going to get out? I remember when my friend Robert Morris got kicked out of Cornell for writing the internet worm of 1988, I was envious that he'd found such a spectacular way to get out of grad school.\\n\\nThen one day in April 1990 a crack appeared in the wall. I ran into professor Cheatham and he asked if I was far enough along to graduate that June. I didn't have a word of my dissertation written, but in what must have been the quickest bit of thinking in my life, I decided to take a shot at writing one in the 5 weeks or so that remained before the deadline, reusing parts of On Lisp where I could, and I was able to respond, with no perceptible delay \\\"Yes, I think so. I'll give you something to read in a few days.\\\"\",\n",
-      "        \"I didn't want to drop out of grad school, but how else was I going to get out? I remember when my friend Robert Morris got kicked out of Cornell for writing the internet worm of 1988, I was envious that he'd found such a spectacular way to get out of grad school.\\n\\nThen one day in April 1990 a crack appeared in the wall. I ran into professor Cheatham and he asked if I was far enough along to graduate that June. I didn't have a word of my dissertation written, but in what must have been the quickest bit of thinking in my life, I decided to take a shot at writing one in the 5 weeks or so that remained before the deadline, reusing parts of On Lisp where I could, and I was able to respond, with no perceptible delay \\\"Yes, I think so. I'll give you something to read in a few days.\\\"\\n\\nI picked applications of continuations as the topic. In retrospect I should have written about macros and embedded languages. There's a whole world there that's barely been explored. But all I wanted was to get out of grad school, and my rapidly written dissertation sufficed, just barely.\\n\\nMeanwhile I was applying to art schools. I applied to two: RISD in the US, and the Accademia di Belli Arti in Florence, which, because it was the oldest art school, I imagined would be good. RISD accepted me, and I never heard back from the Accademia, so off to Providence I went.\\n\\nI'd applied for the BFA program at RISD, which meant in effect that I had to go to college again. This was not as strange as it sounds, because I was only 25, and art schools are full of people of different ages. RISD counted me as a transfer sophomore and said I had to do the foundation that summer. The foundation means the classes that everyone has to take in fundamental subjects like drawing, color, and design.\\n\\nToward the end of the summer I got a big surprise: a letter from the Accademia, which had been delayed because they'd sent it to Cambridge England instead of Cambridge Massachusetts, inviting me to take the entrance exam in Florence that fall. This was now only weeks away. My nice landlady let me leave my stuff in her attic. I had some money saved from consulting work I'd done in grad school; there was probably enough to last a year if I lived cheaply. Now all I had to do was learn Italian.\\n\\nOnly stranieri (foreigners) had to take this entrance exam. In retrospect it may well have been a way of excluding them, because there were so many stranieri attracted by the idea of studying art in Florence that the Italian students would otherwise have been outnumbered. I was in decent shape at painting and drawing from the RISD foundation that summer, but I still don't know how I managed to pass the written exam. I remember that I answered the essay question by writing about Cezanne, and that I cranked up the intellectual level as high as I could to make the most of my limited vocabulary. [2]\\n\\nI'm only up to age 25 and already there are such conspicuous patterns. Here I was, yet again about to attend some august institution in the hopes of learning about some prestigious subject, and yet again about to be disappointed. The students and faculty in the painting department at the Accademia were the nicest people you could imagine, but they had long since arrived at an arrangement whereby the students wouldn't require the faculty to teach anything, and in return the faculty wouldn't require the students to learn anything. And at the same time all involved would adhere outwardly to the conventions of a 19th century atelier. We actually had one of those little stoves, fed with kindling, that you see in 19th century studio paintings, and a nude model sitting as close to it as possible without getting burned. Except hardly anyone else painted her besides me. The rest of the students spent their time chatting or occasionally trying to imitate things they'd seen in American art magazines.\\n\\nOur model turned out to live just down the street from me. She made a living from a combination of modelling and making fakes for a local antique dealer. She'd copy an obscure old painting out of a book, and then he'd take the copy and maltreat it to make it look old. [3]\\n\\nWhile I was a student at the Accademia I started painting still lives in my bedroom at night. These paintings were tiny, because the room was, and because I painted them on leftover scraps of canvas, which was all I could afford at the time.\",\n",
-      "        \"We actually had one of those little stoves, fed with kindling, that you see in 19th century studio paintings, and a nude model sitting as close to it as possible without getting burned. Except hardly anyone else painted her besides me. The rest of the students spent their time chatting or occasionally trying to imitate things they'd seen in American art magazines.\\n\\nOur model turned out to live just down the street from me. She made a living from a combination of modelling and making fakes for a local antique dealer. She'd copy an obscure old painting out of a book, and then he'd take the copy and maltreat it to make it look old. [3]\\n\\nWhile I was a student at the Accademia I started painting still lives in my bedroom at night. These paintings were tiny, because the room was, and because I painted them on leftover scraps of canvas, which was all I could afford at the time. Painting still lives is different from painting people, because the subject, as its name suggests, can't move. People can't sit for more than about 15 minutes at a time, and when they do they don't sit very still. So the traditional m.o. for painting people is to know how to paint a generic person, which you then modify to match the specific person you're painting. Whereas a still life you can, if you want, copy pixel by pixel from what you're seeing. You don't want to stop there, of course, or you get merely photographic accuracy, and what makes a still life interesting is that it's been through a head. You want to emphasize the visual cues that tell you, for example, that the reason the color changes suddenly at a certain point is that it's the edge of an object. By subtly emphasizing such things you can make paintings that are more realistic than photographs not just in some metaphorical sense, but in the strict information-theoretic sense. [4]\\n\\nI liked painting still lives because I was curious about what I was seeing. In everyday life, we aren't consciously aware of much we're seeing. Most visual perception is handled by low-level processes that merely tell your brain \\\"that's a water droplet\\\" without telling you details like where the lightest and darkest points are, or \\\"that's a bush\\\" without telling you the shape and position of every leaf. This is a feature of brains, not a bug. In everyday life it would be distracting to notice every leaf on every bush. But when you have to paint something, you have to look more closely, and when you do there's a lot to see. You can still be noticing new things after days of trying to paint something people usually take for granted, just as you can after days of trying to write an essay about something people usually take for granted.\\n\\nThis is not the only way to paint. I'm not 100% sure it's even a good way to paint. But it seemed a good enough bet to be worth trying.\\n\\nOur teacher, professor Ulivi, was a nice guy. He could see I worked hard, and gave me a good grade, which he wrote down in a sort of passport each student had. But the Accademia wasn't teaching me anything except Italian, and my money was running out, so at the end of the first year I went back to the US.\\n\\nI wanted to go back to RISD, but I was now broke and RISD was very expensive, so I decided to get a job for a year and then return to RISD the next fall. I got one at a company called Interleaf, which made software for creating documents. You mean like Microsoft Word? Exactly. That was how I learned that low end software tends to eat high end software. But Interleaf still had a few years to live yet. [5]\\n\\nInterleaf had done something pretty bold. Inspired by Emacs, they'd added a scripting language, and even made the scripting language a dialect of Lisp. Now they wanted a Lisp hacker to write things in it. This was the closest thing I've had to a normal job, and I hereby apologize to my boss and coworkers, because I was a bad employee. Their Lisp was the thinnest icing on a giant C cake, and since I didn't know C and didn't want to learn it, I never understood most of the software. Plus I was terribly irresponsible. This was back when a programming job meant showing up every day during certain working hours. That seemed unnatural to me, and on this point the rest of the world is coming around to my way of thinking, but at the time it caused a lot of friction.\",\n",
-      "        \"But Interleaf still had a few years to live yet. [5]\\n\\nInterleaf had done something pretty bold. Inspired by Emacs, they'd added a scripting language, and even made the scripting language a dialect of Lisp. Now they wanted a Lisp hacker to write things in it. This was the closest thing I've had to a normal job, and I hereby apologize to my boss and coworkers, because I was a bad employee. Their Lisp was the thinnest icing on a giant C cake, and since I didn't know C and didn't want to learn it, I never understood most of the software. Plus I was terribly irresponsible. This was back when a programming job meant showing up every day during certain working hours. That seemed unnatural to me, and on this point the rest of the world is coming around to my way of thinking, but at the time it caused a lot of friction. Toward the end of the year I spent much of my time surreptitiously working on On Lisp, which I had by this time gotten a contract to publish.\\n\\nThe good part was that I got paid huge amounts of money, especially by art student standards. In Florence, after paying my part of the rent, my budget for everything else had been $7 a day. Now I was getting paid more than 4 times that every hour, even when I was just sitting in a meeting. By living cheaply I not only managed to save enough to go back to RISD, but also paid off my college loans.\\n\\nI learned some useful things at Interleaf, though they were mostly about what not to do. I learned that it's better for technology companies to be run by product people than sales people (though sales is a real skill and people who are good at it are really good at it), that it leads to bugs when code is edited by too many people, that cheap office space is no bargain if it's depressing, that planned meetings are inferior to corridor conversations, that big, bureaucratic customers are a dangerous source of money, and that there's not much overlap between conventional office hours and the optimal time for hacking, or conventional offices and the optimal place for it.\\n\\nBut the most important thing I learned, and which I used in both Viaweb and Y Combinator, is that the low end eats the high end: that it's good to be the \\\"entry level\\\" option, even though that will be less prestigious, because if you're not, someone else will be, and will squash you against the ceiling. Which in turn means that prestige is a danger sign.\\n\\nWhen I left to go back to RISD the next fall, I arranged to do freelance work for the group that did projects for customers, and this was how I survived for the next several years. When I came back to visit for a project later on, someone told me about a new thing called HTML, which was, as he described it, a derivative of SGML. Markup language enthusiasts were an occupational hazard at Interleaf and I ignored him, but this HTML thing later became a big part of my life.\\n\\nIn the fall of 1992 I moved back to Providence to continue at RISD. The foundation had merely been intro stuff, and the Accademia had been a (very civilized) joke. Now I was going to see what real art school was like. But alas it was more like the Accademia than not. Better organized, certainly, and a lot more expensive, but it was now becoming clear that art school did not bear the same relationship to art that medical school bore to medicine. At least not the painting department. The textile department, which my next door neighbor belonged to, seemed to be pretty rigorous. No doubt illustration and architecture were too. But painting was post-rigorous. Painting students were supposed to express themselves, which to the more worldly ones meant to try to cook up some sort of distinctive signature style.\\n\\nA signature style is the visual equivalent of what in show business is known as a \\\"schtick\\\": something that immediately identifies the work as yours and no one else's. For example, when you see a painting that looks like a certain kind of cartoon, you know it's by Roy Lichtenstein. So if you see a big painting of this type hanging in the apartment of a hedge fund manager, you know he paid millions of dollars for it. That's not always why artists have a signature style, but it's usually why buyers pay a lot for such work. [6]\\n\\nThere were plenty of earnest students too: kids who \\\"could draw\\\" in high school, and now had come to what was supposed to be the best art school in the country, to learn to draw even better.\",\n",
-      "        \"Painting students were supposed to express themselves, which to the more worldly ones meant to try to cook up some sort of distinctive signature style.\\n\\nA signature style is the visual equivalent of what in show business is known as a \\\"schtick\\\": something that immediately identifies the work as yours and no one else's. For example, when you see a painting that looks like a certain kind of cartoon, you know it's by Roy Lichtenstein. So if you see a big painting of this type hanging in the apartment of a hedge fund manager, you know he paid millions of dollars for it. That's not always why artists have a signature style, but it's usually why buyers pay a lot for such work. [6]\\n\\nThere were plenty of earnest students too: kids who \\\"could draw\\\" in high school, and now had come to what was supposed to be the best art school in the country, to learn to draw even better. They tended to be confused and demoralized by what they found at RISD, but they kept going, because painting was what they did. I was not one of the kids who could draw in high school, but at RISD I was definitely closer to their tribe than the tribe of signature style seekers.\\n\\nI learned a lot in the color class I took at RISD, but otherwise I was basically teaching myself to paint, and I could do that for free. So in 1993 I dropped out. I hung around Providence for a bit, and then my college friend Nancy Parmet did me a big favor. A rent-controlled apartment in a building her mother owned in New York was becoming vacant. Did I want it? It wasn't much more than my current place, and New York was supposed to be where the artists were. So yes, I wanted it! [7]\\n\\nAsterix comics begin by zooming in on a tiny corner of Roman Gaul that turns out not to be controlled by the Romans. You can do something similar on a map of New York City: if you zoom in on the Upper East Side, there's a tiny corner that's not rich, or at least wasn't in 1993. It's called Yorkville, and that was my new home. Now I was a New York artist \\u2014 in the strictly technical sense of making paintings and living in New York.\\n\\nI was nervous about money, because I could sense that Interleaf was on the way down. Freelance Lisp hacking work was very rare, and I didn't want to have to program in another language, which in those days would have meant C++ if I was lucky. So with my unerring nose for financial opportunity, I decided to write another book on Lisp. This would be a popular book, the sort of book that could be used as a textbook. I imagined myself living frugally off the royalties and spending all my time painting. (The painting on the cover of this book, ANSI Common Lisp, is one that I painted around this time.)\\n\\nThe best thing about New York for me was the presence of Idelle and Julian Weber. Idelle Weber was a painter, one of the early photorealists, and I'd taken her painting class at Harvard. I've never known a teacher more beloved by her students. Large numbers of former students kept in touch with her, including me. After I moved to New York I became her de facto studio assistant.\\n\\nShe liked to paint on big, square canvases, 4 to 5 feet on a side. One day in late 1994 as I was stretching one of these monsters there was something on the radio about a famous fund manager. He wasn't that much older than me, and was super rich. The thought suddenly occurred to me: why don't I become rich? Then I'll be able to work on whatever I want.\\n\\nMeanwhile I'd been hearing more and more about this new thing called the World Wide Web. Robert Morris showed it to me when I visited him in Cambridge, where he was now in grad school at Harvard. It seemed to me that the web would be a big deal. I'd seen what graphical user interfaces had done for the popularity of microcomputers. It seemed like the web would do the same for the internet.\\n\\nIf I wanted to get rich, here was the next train leaving the station. I was right about that part. What I got wrong was the idea. I decided we should start a company to put art galleries online. I can't honestly say, after reading so many Y Combinator applications, that this was the worst startup idea ever, but it was up there. Art galleries didn't want to be online, and still don't, not the fancy ones. That's not how they sell.\",\n",
-      "        \"Meanwhile I'd been hearing more and more about this new thing called the World Wide Web. Robert Morris showed it to me when I visited him in Cambridge, where he was now in grad school at Harvard. It seemed to me that the web would be a big deal. I'd seen what graphical user interfaces had done for the popularity of microcomputers. It seemed like the web would do the same for the internet.\\n\\nIf I wanted to get rich, here was the next train leaving the station. I was right about that part. What I got wrong was the idea. I decided we should start a company to put art galleries online. I can't honestly say, after reading so many Y Combinator applications, that this was the worst startup idea ever, but it was up there. Art galleries didn't want to be online, and still don't, not the fancy ones. That's not how they sell. I wrote some software to generate web sites for galleries, and Robert wrote some to resize images and set up an http server to serve the pages. Then we tried to sign up galleries. To call this a difficult sale would be an understatement. It was difficult to give away. A few galleries let us make sites for them for free, but none paid us.\\n\\nThen some online stores started to appear, and I realized that except for the order buttons they were identical to the sites we'd been generating for galleries. This impressive-sounding thing called an \\\"internet storefront\\\" was something we already knew how to build.\\n\\nSo in the summer of 1995, after I submitted the camera-ready copy of ANSI Common Lisp to the publishers, we started trying to write software to build online stores. At first this was going to be normal desktop software, which in those days meant Windows software. That was an alarming prospect, because neither of us knew how to write Windows software or wanted to learn. We lived in the Unix world. But we decided we'd at least try writing a prototype store builder on Unix. Robert wrote a shopping cart, and I wrote a new site generator for stores \\u2014 in Lisp, of course.\\n\\nWe were working out of Robert's apartment in Cambridge. His roommate was away for big chunks of time, during which I got to sleep in his room. For some reason there was no bed frame or sheets, just a mattress on the floor. One morning as I was lying on this mattress I had an idea that made me sit up like a capital L. What if we ran the software on the server, and let users control it by clicking on links? Then we'd never have to write anything to run on users' computers. We could generate the sites on the same server we'd serve them from. Users wouldn't need anything more than a browser.\\n\\nThis kind of software, known as a web app, is common now, but at the time it wasn't clear that it was even possible. To find out, we decided to try making a version of our store builder that you could control through the browser. A couple days later, on August 12, we had one that worked. The UI was horrible, but it proved you could build a whole store through the browser, without any client software or typing anything into the command line on the server.\\n\\nNow we felt like we were really onto something. I had visions of a whole new generation of software working this way. You wouldn't need versions, or ports, or any of that crap. At Interleaf there had been a whole group called Release Engineering that seemed to be at least as big as the group that actually wrote the software. Now you could just update the software right on the server.\\n\\nWe started a new company we called Viaweb, after the fact that our software worked via the web, and we got $10,000 in seed funding from Idelle's husband Julian. In return for that and doing the initial legal work and giving us business advice, we gave him 10% of the company. Ten years later this deal became the model for Y Combinator's. We knew founders needed something like this, because we'd needed it ourselves.\\n\\nAt this stage I had a negative net worth, because the thousand dollars or so I had in the bank was more than counterbalanced by what I owed the government in taxes. (Had I diligently set aside the proper proportion of the money I'd made consulting for Interleaf? No, I had not.) So although Robert had his graduate student stipend, I needed that seed funding to live on.\\n\\nWe originally hoped to launch in September, but we got more ambitious about the software as we worked on it.\",\n",
-      "        \"In return for that and doing the initial legal work and giving us business advice, we gave him 10% of the company. Ten years later this deal became the model for Y Combinator's. We knew founders needed something like this, because we'd needed it ourselves.\\n\\nAt this stage I had a negative net worth, because the thousand dollars or so I had in the bank was more than counterbalanced by what I owed the government in taxes. (Had I diligently set aside the proper proportion of the money I'd made consulting for Interleaf? No, I had not.) So although Robert had his graduate student stipend, I needed that seed funding to live on.\\n\\nWe originally hoped to launch in September, but we got more ambitious about the software as we worked on it. Eventually we managed to build a WYSIWYG site builder, in the sense that as you were creating pages, they looked exactly like the static ones that would be generated later, except that instead of leading to static pages, the links all referred to closures stored in a hash table on the server.\\n\\nIt helped to have studied art, because the main goal of an online store builder is to make users look legit, and the key to looking legit is high production values. If you get page layouts and fonts and colors right, you can make a guy running a store out of his bedroom look more legit than a big company.\\n\\n(If you're curious why my site looks so old-fashioned, it's because it's still made with this software. It may look clunky today, but in 1996 it was the last word in slick.)\\n\\nIn September, Robert rebelled. \\\"We've been working on this for a month,\\\" he said, \\\"and it's still not done.\\\" This is funny in retrospect, because he would still be working on it almost 3 years later. But I decided it might be prudent to recruit more programmers, and I asked Robert who else in grad school with him was really good. He recommended Trevor Blackwell, which surprised me at first, because at that point I knew Trevor mainly for his plan to reduce everything in his life to a stack of notecards, which he carried around with him. But Rtm was right, as usual. Trevor turned out to be a frighteningly effective hacker.\\n\\nIt was a lot of fun working with Robert and Trevor. They're the two most independent-minded people I know, and in completely different ways. If you could see inside Rtm's brain it would look like a colonial New England church, and if you could see inside Trevor's it would look like the worst excesses of Austrian Rococo.\\n\\nWe opened for business, with 6 stores, in January 1996. It was just as well we waited a few months, because although we worried we were late, we were actually almost fatally early. There was a lot of talk in the press then about ecommerce, but not many people actually wanted online stores. [8]\\n\\nThere were three main parts to the software: the editor, which people used to build sites and which I wrote, the shopping cart, which Robert wrote, and the manager, which kept track of orders and statistics, and which Trevor wrote. In its time, the editor was one of the best general-purpose site builders. I kept the code tight and didn't have to integrate with any other software except Robert's and Trevor's, so it was quite fun to work on. If all I'd had to do was work on this software, the next 3 years would have been the easiest of my life. Unfortunately I had to do a lot more, all of it stuff I was worse at than programming, and the next 3 years were instead the most stressful.\\n\\nThere were a lot of startups making ecommerce software in the second half of the 90s. We were determined to be the Microsoft Word, not the Interleaf. Which meant being easy to use and inexpensive. It was lucky for us that we were poor, because that caused us to make Viaweb even more inexpensive than we realized. We charged $100 a month for a small store and $300 a month for a big one. This low price was a big attraction, and a constant thorn in the sides of competitors, but it wasn't because of some clever insight that we set the price low. We had no idea what businesses paid for things. $300 a month seemed like a lot of money to us.\\n\\nWe did a lot of things right by accident like that. For example, we did what's now called \\\"doing things that don't scale,\\\" although at the time we would have described it as \\\"being so lame that we're driven to the most desperate measures to get users.\\\" The most common of which was building stores for them.\",\n",
-      "        \"Which meant being easy to use and inexpensive. It was lucky for us that we were poor, because that caused us to make Viaweb even more inexpensive than we realized. We charged $100 a month for a small store and $300 a month for a big one. This low price was a big attraction, and a constant thorn in the sides of competitors, but it wasn't because of some clever insight that we set the price low. We had no idea what businesses paid for things. $300 a month seemed like a lot of money to us.\\n\\nWe did a lot of things right by accident like that. For example, we did what's now called \\\"doing things that don't scale,\\\" although at the time we would have described it as \\\"being so lame that we're driven to the most desperate measures to get users.\\\" The most common of which was building stores for them. This seemed particularly humiliating, since the whole raison d'etre of our software was that people could use it to make their own stores. But anything to get users.\\n\\nWe learned a lot more about retail than we wanted to know. For example, that if you could only have a small image of a man's shirt (and all images were small then by present standards), it was better to have a closeup of the collar than a picture of the whole shirt. The reason I remember learning this was that it meant I had to rescan about 30 images of men's shirts. My first set of scans were so beautiful too.\\n\\nThough this felt wrong, it was exactly the right thing to be doing. Building stores for users taught us about retail, and about how it felt to use our software. I was initially both mystified and repelled by \\\"business\\\" and thought we needed a \\\"business person\\\" to be in charge of it, but once we started to get users, I was converted, in much the same way I was converted to fatherhood once I had kids. Whatever users wanted, I was all theirs. Maybe one day we'd have so many users that I couldn't scan their images for them, but in the meantime there was nothing more important to do.\\n\\nAnother thing I didn't get at the time is that growth rate is the ultimate test of a startup. Our growth rate was fine. We had about 70 stores at the end of 1996 and about 500 at the end of 1997. I mistakenly thought the thing that mattered was the absolute number of users. And that is the thing that matters in the sense that that's how much money you're making, and if you're not making enough, you might go out of business. But in the long term the growth rate takes care of the absolute number. If we'd been a startup I was advising at Y Combinator, I would have said: Stop being so stressed out, because you're doing fine. You're growing 7x a year. Just don't hire too many more people and you'll soon be profitable, and then you'll control your own destiny.\\n\\nAlas I hired lots more people, partly because our investors wanted me to, and partly because that's what startups did during the Internet Bubble. A company with just a handful of employees would have seemed amateurish. So we didn't reach breakeven until about when Yahoo bought us in the summer of 1998. Which in turn meant we were at the mercy of investors for the entire life of the company. And since both we and our investors were noobs at startups, the result was a mess even by startup standards.\\n\\nIt was a huge relief when Yahoo bought us. In principle our Viaweb stock was valuable. It was a share in a business that was profitable and growing rapidly. But it didn't feel very valuable to me; I had no idea how to value a business, but I was all too keenly aware of the near-death experiences we seemed to have every few months. Nor had I changed my grad student lifestyle significantly since we started. So when Yahoo bought us it felt like going from rags to riches. Since we were going to California, I bought a car, a yellow 1998 VW GTI. I remember thinking that its leather seats alone were by far the most luxurious thing I owned.\\n\\nThe next year, from the summer of 1998 to the summer of 1999, must have been the least productive of my life. I didn't realize it at the time, but I was worn out from the effort and stress of running Viaweb. For a while after I got to California I tried to continue my usual m.o.\",\n",
-      "        \"But it didn't feel very valuable to me; I had no idea how to value a business, but I was all too keenly aware of the near-death experiences we seemed to have every few months. Nor had I changed my grad student lifestyle significantly since we started. So when Yahoo bought us it felt like going from rags to riches. Since we were going to California, I bought a car, a yellow 1998 VW GTI. I remember thinking that its leather seats alone were by far the most luxurious thing I owned.\\n\\nThe next year, from the summer of 1998 to the summer of 1999, must have been the least productive of my life. I didn't realize it at the time, but I was worn out from the effort and stress of running Viaweb. For a while after I got to California I tried to continue my usual m.o. of programming till 3 in the morning, but fatigue combined with Yahoo's prematurely aged culture and grim cube farm in Santa Clara gradually dragged me down. After a few months it felt disconcertingly like working at Interleaf.\\n\\nYahoo had given us a lot of options when they bought us. At the time I thought Yahoo was so overvalued that they'd never be worth anything, but to my astonishment the stock went up 5x in the next year. I hung on till the first chunk of options vested, then in the summer of 1999 I left. It had been so long since I'd painted anything that I'd half forgotten why I was doing this. My brain had been entirely full of software and men's shirts for 4 years. But I had done this to get rich so I could paint, I reminded myself, and now I was rich, so I should go paint.\\n\\nWhen I said I was leaving, my boss at Yahoo had a long conversation with me about my plans. I told him all about the kinds of pictures I wanted to paint. At the time I was touched that he took such an interest in me. Now I realize it was because he thought I was lying. My options at that point were worth about $2 million a month. If I was leaving that kind of money on the table, it could only be to go and start some new startup, and if I did, I might take people with me. This was the height of the Internet Bubble, and Yahoo was ground zero of it. My boss was at that moment a billionaire. Leaving then to start a new startup must have seemed to him an insanely, and yet also plausibly, ambitious plan.\\n\\nBut I really was quitting to paint, and I started immediately. There was no time to lose. I'd already burned 4 years getting rich. Now when I talk to founders who are leaving after selling their companies, my advice is always the same: take a vacation. That's what I should have done, just gone off somewhere and done nothing for a month or two, but the idea never occurred to me.\\n\\nSo I tried to paint, but I just didn't seem to have any energy or ambition. Part of the problem was that I didn't know many people in California. I'd compounded this problem by buying a house up in the Santa Cruz Mountains, with a beautiful view but miles from anywhere. I stuck it out for a few more months, then in desperation I went back to New York, where unless you understand about rent control you'll be surprised to hear I still had my apartment, sealed up like a tomb of my old life. Idelle was in New York at least, and there were other people trying to paint there, even though I didn't know any of them.\\n\\nWhen I got back to New York I resumed my old life, except now I was rich. It was as weird as it sounds. I resumed all my old patterns, except now there were doors where there hadn't been. Now when I was tired of walking, all I had to do was raise my hand, and (unless it was raining) a taxi would stop to pick me up. Now when I walked past charming little restaurants I could go in and order lunch. It was exciting for a while. Painting started to go better. I experimented with a new kind of still life where I'd paint one painting in the old way, then photograph it and print it, blown up, on canvas, and then use that as the underpainting for a second still life, painted from the same objects (which hopefully hadn't rotted yet).\\n\\nMeanwhile I looked for an apartment to buy. Now I could actually choose what neighborhood to live in. Where, I asked myself and various real estate agents, is the Cambridge of New York?\",\n",
-      "        \"It was as weird as it sounds. I resumed all my old patterns, except now there were doors where there hadn't been. Now when I was tired of walking, all I had to do was raise my hand, and (unless it was raining) a taxi would stop to pick me up. Now when I walked past charming little restaurants I could go in and order lunch. It was exciting for a while. Painting started to go better. I experimented with a new kind of still life where I'd paint one painting in the old way, then photograph it and print it, blown up, on canvas, and then use that as the underpainting for a second still life, painted from the same objects (which hopefully hadn't rotted yet).\\n\\nMeanwhile I looked for an apartment to buy. Now I could actually choose what neighborhood to live in. Where, I asked myself and various real estate agents, is the Cambridge of New York? Aided by occasional visits to actual Cambridge, I gradually realized there wasn't one. Huh.\\n\\nAround this time, in the spring of 2000, I had an idea. It was clear from our experience with Viaweb that web apps were the future. Why not build a web app for making web apps? Why not let people edit code on our server through the browser, and then host the resulting applications for them? [9] You could run all sorts of services on the servers that these applications could use just by making an API call: making and receiving phone calls, manipulating images, taking credit card payments, etc.\\n\\nI got so excited about this idea that I couldn't think about anything else. It seemed obvious that this was the future. I didn't particularly want to start another company, but it was clear that this idea would have to be embodied as one, so I decided to move to Cambridge and start it. I hoped to lure Robert into working on it with me, but there I ran into a hitch. Robert was now a postdoc at MIT, and though he'd made a lot of money the last time I'd lured him into working on one of my schemes, it had also been a huge time sink. So while he agreed that it sounded like a plausible idea, he firmly refused to work on it.\\n\\nHmph. Well, I'd do it myself then. I recruited Dan Giffin, who had worked for Viaweb, and two undergrads who wanted summer jobs, and we got to work trying to build what it's now clear is about twenty companies and several open source projects worth of software. The language for defining applications would of course be a dialect of Lisp. But I wasn't so naive as to assume I could spring an overt Lisp on a general audience; we'd hide the parentheses, like Dylan did.\\n\\nBy then there was a name for the kind of company Viaweb was, an \\\"application service provider,\\\" or ASP. This name didn't last long before it was replaced by \\\"software as a service,\\\" but it was current for long enough that I named this new company after it: it was going to be called Aspra.\\n\\nI started working on the application builder, Dan worked on network infrastructure, and the two undergrads worked on the first two services (images and phone calls). But about halfway through the summer I realized I really didn't want to run a company \\u2014 especially not a big one, which it was looking like this would have to be. I'd only started Viaweb because I needed the money. Now that I didn't need money anymore, why was I doing this? If this vision had to be realized as a company, then screw the vision. I'd build a subset that could be done as an open source project.\\n\\nMuch to my surprise, the time I spent working on this stuff was not wasted after all. After we started Y Combinator, I would often encounter startups working on parts of this new architecture, and it was very useful to have spent so much time thinking about it and even trying to write some of it.\\n\\nThe subset I would build as an open source project was the new Lisp, whose parentheses I now wouldn't even have to hide. A lot of Lisp hackers dream of building a new Lisp, partly because one of the distinctive features of the language is that it has dialects, and partly, I think, because we have in our minds a Platonic form of Lisp that all existing dialects fall short of. I certainly did. So at the end of the summer Dan and I switched to working on this new dialect of Lisp, which I called Arc, in a house I bought in Cambridge.\\n\\nThe following spring, lightning struck.\",\n",
-      "        \"Much to my surprise, the time I spent working on this stuff was not wasted after all. After we started Y Combinator, I would often encounter startups working on parts of this new architecture, and it was very useful to have spent so much time thinking about it and even trying to write some of it.\\n\\nThe subset I would build as an open source project was the new Lisp, whose parentheses I now wouldn't even have to hide. A lot of Lisp hackers dream of building a new Lisp, partly because one of the distinctive features of the language is that it has dialects, and partly, I think, because we have in our minds a Platonic form of Lisp that all existing dialects fall short of. I certainly did. So at the end of the summer Dan and I switched to working on this new dialect of Lisp, which I called Arc, in a house I bought in Cambridge.\\n\\nThe following spring, lightning struck. I was invited to give a talk at a Lisp conference, so I gave one about how we'd used Lisp at Viaweb. Afterward I put a postscript file of this talk online, on paulgraham.com, which I'd created years before using Viaweb but had never used for anything. In one day it got 30,000 page views. What on earth had happened? The referring urls showed that someone had posted it on Slashdot. [10]\\n\\nWow, I thought, there's an audience. If I write something and put it on the web, anyone can read it. That may seem obvious now, but it was surprising then. In the print era there was a narrow channel to readers, guarded by fierce monsters known as editors. The only way to get an audience for anything you wrote was to get it published as a book, or in a newspaper or magazine. Now anyone could publish anything.\\n\\nThis had been possible in principle since 1993, but not many people had realized it yet. I had been intimately involved with building the infrastructure of the web for most of that time, and a writer as well, and it had taken me 8 years to realize it. Even then it took me several years to understand the implications. It meant there would be a whole new generation of essays. [11]\\n\\nIn the print era, the channel for publishing essays had been vanishingly small. Except for a few officially anointed thinkers who went to the right parties in New York, the only people allowed to publish essays were specialists writing about their specialties. There were so many essays that had never been written, because there had been no way to publish them. Now they could be, and I was going to write them. [12]\\n\\nI've worked on several different things, but to the extent there was a turning point where I figured out what to work on, it was when I started publishing essays online. From then on I knew that whatever else I did, I'd always write essays too.\\n\\nI knew that online essays would be a marginal medium at first. Socially they'd seem more like rants posted by nutjobs on their GeoCities sites than the genteel and beautifully typeset compositions published in The New Yorker. But by this point I knew enough to find that encouraging instead of discouraging.\\n\\nOne of the most conspicuous patterns I've noticed in my life is how well it has worked, for me at least, to work on things that weren't prestigious. Still life has always been the least prestigious form of painting. Viaweb and Y Combinator both seemed lame when we started them. I still get the glassy eye from strangers when they ask what I'm writing, and I explain that it's an essay I'm going to publish on my web site. Even Lisp, though prestigious intellectually in something like the way Latin is, also seems about as hip.\\n\\nIt's not that unprestigious types of work are good per se. But when you find yourself drawn to some kind of work despite its current lack of prestige, it's a sign both that there's something real to be discovered there, and that you have the right kind of motives. Impure motives are a big danger for the ambitious. If anything is going to lead you astray, it will be the desire to impress people. So while working on things that aren't prestigious doesn't guarantee you're on the right track, it at least guarantees you're not on the most common type of wrong one.\\n\\nOver the next several years I wrote lots of essays about all kinds of different topics. O'Reilly reprinted a collection of them as a book, called Hackers & Painters after one of the essays in it. I also worked on spam filters, and did some more painting.\",\n",
-      "        \"It's not that unprestigious types of work are good per se. But when you find yourself drawn to some kind of work despite its current lack of prestige, it's a sign both that there's something real to be discovered there, and that you have the right kind of motives. Impure motives are a big danger for the ambitious. If anything is going to lead you astray, it will be the desire to impress people. So while working on things that aren't prestigious doesn't guarantee you're on the right track, it at least guarantees you're not on the most common type of wrong one.\\n\\nOver the next several years I wrote lots of essays about all kinds of different topics. O'Reilly reprinted a collection of them as a book, called Hackers & Painters after one of the essays in it. I also worked on spam filters, and did some more painting. I used to have dinners for a group of friends every thursday night, which taught me how to cook for groups. And I bought another building in Cambridge, a former candy factory (and later, twas said, porn studio), to use as an office.\\n\\nOne night in October 2003 there was a big party at my house. It was a clever idea of my friend Maria Daniels, who was one of the thursday diners. Three separate hosts would all invite their friends to one party. So for every guest, two thirds of the other guests would be people they didn't know but would probably like. One of the guests was someone I didn't know but would turn out to like a lot: a woman called Jessica Livingston. A couple days later I asked her out.\\n\\nJessica was in charge of marketing at a Boston investment bank. This bank thought it understood startups, but over the next year, as she met friends of mine from the startup world, she was surprised how different reality was. And how colorful their stories were. So she decided to compile a book of interviews with startup founders.\\n\\nWhen the bank had financial problems and she had to fire half her staff, she started looking for a new job. In early 2005 she interviewed for a marketing job at a Boston VC firm. It took them weeks to make up their minds, and during this time I started telling her about all the things that needed to be fixed about venture capital. They should make a larger number of smaller investments instead of a handful of giant ones, they should be funding younger, more technical founders instead of MBAs, they should let the founders remain as CEO, and so on.\\n\\nOne of my tricks for writing essays had always been to give talks. The prospect of having to stand up in front of a group of people and tell them something that won't waste their time is a great spur to the imagination. When the Harvard Computer Society, the undergrad computer club, asked me to give a talk, I decided I would tell them how to start a startup. Maybe they'd be able to avoid the worst of the mistakes we'd made.\\n\\nSo I gave this talk, in the course of which I told them that the best sources of seed funding were successful startup founders, because then they'd be sources of advice too. Whereupon it seemed they were all looking expectantly at me. Horrified at the prospect of having my inbox flooded by business plans (if I'd only known), I blurted out \\\"But not me!\\\" and went on with the talk. But afterward it occurred to me that I should really stop procrastinating about angel investing. I'd been meaning to since Yahoo bought us, and now it was 7 years later and I still hadn't done one angel investment.\\n\\nMeanwhile I had been scheming with Robert and Trevor about projects we could work on together. I missed working with them, and it seemed like there had to be something we could collaborate on.\\n\\nAs Jessica and I were walking home from dinner on March 11, at the corner of Garden and Walker streets, these three threads converged. Screw the VCs who were taking so long to make up their minds. We'd start our own investment firm and actually implement the ideas we'd been talking about. I'd fund it, and Jessica could quit her job and work for it, and we'd get Robert and Trevor as partners too. [13]\\n\\nOnce again, ignorance worked in our favor. We had no idea how to be angel investors, and in Boston in 2005 there were no Ron Conways to learn from. So we just made what seemed like the obvious choices, and some of the things we did turned out to be novel.\\n\\nThere are multiple components to Y Combinator, and we didn't figure them all out at once. The part we got first was to be an angel firm.\",\n",
-      "        \"As Jessica and I were walking home from dinner on March 11, at the corner of Garden and Walker streets, these three threads converged. Screw the VCs who were taking so long to make up their minds. We'd start our own investment firm and actually implement the ideas we'd been talking about. I'd fund it, and Jessica could quit her job and work for it, and we'd get Robert and Trevor as partners too. [13]\\n\\nOnce again, ignorance worked in our favor. We had no idea how to be angel investors, and in Boston in 2005 there were no Ron Conways to learn from. So we just made what seemed like the obvious choices, and some of the things we did turned out to be novel.\\n\\nThere are multiple components to Y Combinator, and we didn't figure them all out at once. The part we got first was to be an angel firm. In those days, those two words didn't go together. There were VC firms, which were organized companies with people whose job it was to make investments, but they only did big, million dollar investments. And there were angels, who did smaller investments, but these were individuals who were usually focused on other things and made investments on the side. And neither of them helped founders enough in the beginning. We knew how helpless founders were in some respects, because we remembered how helpless we'd been. For example, one thing Julian had done for us that seemed to us like magic was to get us set up as a company. We were fine writing fairly difficult software, but actually getting incorporated, with bylaws and stock and all that stuff, how on earth did you do that? Our plan was not only to make seed investments, but to do for startups everything Julian had done for us.\\n\\nYC was not organized as a fund. It was cheap enough to run that we funded it with our own money. That went right by 99% of readers, but professional investors are thinking \\\"Wow, that means they got all the returns.\\\" But once again, this was not due to any particular insight on our part. We didn't know how VC firms were organized. It never occurred to us to try to raise a fund, and if it had, we wouldn't have known where to start. [14]\\n\\nThe most distinctive thing about YC is the batch model: to fund a bunch of startups all at once, twice a year, and then to spend three months focusing intensively on trying to help them. That part we discovered by accident, not merely implicitly but explicitly due to our ignorance about investing. We needed to get experience as investors. What better way, we thought, than to fund a whole bunch of startups at once? We knew undergrads got temporary jobs at tech companies during the summer. Why not organize a summer program where they'd start startups instead? We wouldn't feel guilty for being in a sense fake investors, because they would in a similar sense be fake founders. So while we probably wouldn't make much money out of it, we'd at least get to practice being investors on them, and they for their part would probably have a more interesting summer than they would working at Microsoft.\\n\\nWe'd use the building I owned in Cambridge as our headquarters. We'd all have dinner there once a week \\u2014 on tuesdays, since I was already cooking for the thursday diners on thursdays \\u2014 and after dinner we'd bring in experts on startups to give talks.\\n\\nWe knew undergrads were deciding then about summer jobs, so in a matter of days we cooked up something we called the Summer Founders Program, and I posted an announcement on my site, inviting undergrads to apply. I had never imagined that writing essays would be a way to get \\\"deal flow,\\\" as investors call it, but it turned out to be the perfect source. [15] We got 225 applications for the Summer Founders Program, and we were surprised to find that a lot of them were from people who'd already graduated, or were about to that spring. Already this SFP thing was starting to feel more serious than we'd intended.\\n\\nWe invited about 20 of the 225 groups to interview in person, and from those we picked 8 to fund. They were an impressive group. That first batch included reddit, Justin Kan and Emmett Shear, who went on to found Twitch, Aaron Swartz, who had already helped write the RSS spec and would a few years later become a martyr for open access, and Sam Altman, who would later become the second president of YC. I don't think it was entirely luck that the first batch was so good.\",\n",
-      "        \"[15] We got 225 applications for the Summer Founders Program, and we were surprised to find that a lot of them were from people who'd already graduated, or were about to that spring. Already this SFP thing was starting to feel more serious than we'd intended.\\n\\nWe invited about 20 of the 225 groups to interview in person, and from those we picked 8 to fund. They were an impressive group. That first batch included reddit, Justin Kan and Emmett Shear, who went on to found Twitch, Aaron Swartz, who had already helped write the RSS spec and would a few years later become a martyr for open access, and Sam Altman, who would later become the second president of YC. I don't think it was entirely luck that the first batch was so good. You had to be pretty bold to sign up for a weird thing like the Summer Founders Program instead of a summer job at a legit place like Microsoft or Goldman Sachs.\\n\\nThe deal for startups was based on a combination of the deal we did with Julian ($10k for 10%) and what Robert said MIT grad students got for the summer ($6k). We invested $6k per founder, which in the typical two-founder case was $12k, in return for 6%. That had to be fair, because it was twice as good as the deal we ourselves had taken. Plus that first summer, which was really hot, Jessica brought the founders free air conditioners. [16]\\n\\nFairly quickly I realized that we had stumbled upon the way to scale startup funding. Funding startups in batches was more convenient for us, because it meant we could do things for a lot of startups at once, but being part of a batch was better for the startups too. It solved one of the biggest problems faced by founders: the isolation. Now you not only had colleagues, but colleagues who understood the problems you were facing and could tell you how they were solving them.\\n\\nAs YC grew, we started to notice other advantages of scale. The alumni became a tight community, dedicated to helping one another, and especially the current batch, whose shoes they remembered being in. We also noticed that the startups were becoming one another's customers. We used to refer jokingly to the \\\"YC GDP,\\\" but as YC grows this becomes less and less of a joke. Now lots of startups get their initial set of customers almost entirely from among their batchmates.\\n\\nI had not originally intended YC to be a full-time job. I was going to do three things: hack, write essays, and work on YC. As YC grew, and I grew more excited about it, it started to take up a lot more than a third of my attention. But for the first few years I was still able to work on other things.\\n\\nIn the summer of 2006, Robert and I started working on a new version of Arc. This one was reasonably fast, because it was compiled into Scheme. To test this new Arc, I wrote Hacker News in it. It was originally meant to be a news aggregator for startup founders and was called Startup News, but after a few months I got tired of reading about nothing but startups. Plus it wasn't startup founders we wanted to reach. It was future startup founders. So I changed the name to Hacker News and the topic to whatever engaged one's intellectual curiosity.\\n\\nHN was no doubt good for YC, but it was also by far the biggest source of stress for me. If all I'd had to do was select and help founders, life would have been so easy. And that implies that HN was a mistake. Surely the biggest source of stress in one's work should at least be something close to the core of the work. Whereas I was like someone who was in pain while running a marathon not from the exertion of running, but because I had a blister from an ill-fitting shoe. When I was dealing with some urgent problem during YC, there was about a 60% chance it had to do with HN, and a 40% chance it had do with everything else combined. [17]\\n\\nAs well as HN, I wrote all of YC's internal software in Arc. But while I continued to work a good deal in Arc, I gradually stopped working on Arc, partly because I didn't have time to, and partly because it was a lot less attractive to mess around with the language now that we had all this infrastructure depending on it. So now my three projects were reduced to two: writing essays and working on YC.\\n\\nYC was different from other kinds of work I've done. Instead of deciding for myself what to work on, the problems came to me.\",\n",
-      "        \"When I was dealing with some urgent problem during YC, there was about a 60% chance it had to do with HN, and a 40% chance it had do with everything else combined. [17]\\n\\nAs well as HN, I wrote all of YC's internal software in Arc. But while I continued to work a good deal in Arc, I gradually stopped working on Arc, partly because I didn't have time to, and partly because it was a lot less attractive to mess around with the language now that we had all this infrastructure depending on it. So now my three projects were reduced to two: writing essays and working on YC.\\n\\nYC was different from other kinds of work I've done. Instead of deciding for myself what to work on, the problems came to me. Every 6 months there was a new batch of startups, and their problems, whatever they were, became our problems. It was very engaging work, because their problems were quite varied, and the good founders were very effective. If you were trying to learn the most you could about startups in the shortest possible time, you couldn't have picked a better way to do it.\\n\\nThere were parts of the job I didn't like. Disputes between cofounders, figuring out when people were lying to us, fighting with people who maltreated the startups, and so on. But I worked hard even at the parts I didn't like. I was haunted by something Kevin Hale once said about companies: \\\"No one works harder than the boss.\\\" He meant it both descriptively and prescriptively, and it was the second part that scared me. I wanted YC to be good, so if how hard I worked set the upper bound on how hard everyone else worked, I'd better work very hard.\\n\\nOne day in 2010, when he was visiting California for interviews, Robert Morris did something astonishing: he offered me unsolicited advice. I can only remember him doing that once before. One day at Viaweb, when I was bent over double from a kidney stone, he suggested that it would be a good idea for him to take me to the hospital. That was what it took for Rtm to offer unsolicited advice. So I remember his exact words very clearly. \\\"You know,\\\" he said, \\\"you should make sure Y Combinator isn't the last cool thing you do.\\\"\\n\\nAt the time I didn't understand what he meant, but gradually it dawned on me that he was saying I should quit. This seemed strange advice, because YC was doing great. But if there was one thing rarer than Rtm offering advice, it was Rtm being wrong. So this set me thinking. It was true that on my current trajectory, YC would be the last thing I did, because it was only taking up more of my attention. It had already eaten Arc, and was in the process of eating essays too. Either YC was my life's work or I'd have to leave eventually. And it wasn't, so I would.\\n\\nIn the summer of 2012 my mother had a stroke, and the cause turned out to be a blood clot caused by colon cancer. The stroke destroyed her balance, and she was put in a nursing home, but she really wanted to get out of it and back to her house, and my sister and I were determined to help her do it. I used to fly up to Oregon to visit her regularly, and I had a lot of time to think on those flights. On one of them I realized I was ready to hand YC over to someone else.\\n\\nI asked Jessica if she wanted to be president, but she didn't, so we decided we'd try to recruit Sam Altman. We talked to Robert and Trevor and we agreed to make it a complete changing of the guard. Up till that point YC had been controlled by the original LLC we four had started. But we wanted YC to last for a long time, and to do that it couldn't be controlled by the founders. So if Sam said yes, we'd let him reorganize YC. Robert and I would retire, and Jessica and Trevor would become ordinary partners.\\n\\nWhen we asked Sam if he wanted to be president of YC, initially he said no. He wanted to start a startup to make nuclear reactors. But I kept at it, and in October 2013 he finally agreed. We decided he'd take over starting with the winter 2014 batch. For the rest of 2013 I left running YC more and more to Sam, partly so he could learn the job, and partly because I was focused on my mother, whose cancer had returned.\",\n",
-      "        \"Up till that point YC had been controlled by the original LLC we four had started. But we wanted YC to last for a long time, and to do that it couldn't be controlled by the founders. So if Sam said yes, we'd let him reorganize YC. Robert and I would retire, and Jessica and Trevor would become ordinary partners.\\n\\nWhen we asked Sam if he wanted to be president of YC, initially he said no. He wanted to start a startup to make nuclear reactors. But I kept at it, and in October 2013 he finally agreed. We decided he'd take over starting with the winter 2014 batch. For the rest of 2013 I left running YC more and more to Sam, partly so he could learn the job, and partly because I was focused on my mother, whose cancer had returned.\\n\\nShe died on January 15, 2014. We knew this was coming, but it was still hard when it did.\\n\\nI kept working on YC till March, to help get that batch of startups through Demo Day, then I checked out pretty completely. (I still talk to alumni and to new startups working on things I'm interested in, but that only takes a few hours a week.)\\n\\nWhat should I do next? Rtm's advice hadn't included anything about that. I wanted to do something completely different, so I decided I'd paint. I wanted to see how good I could get if I really focused on it. So the day after I stopped working on YC, I started painting. I was rusty and it took a while to get back into shape, but it was at least completely engaging. [18]\\n\\nI spent most of the rest of 2014 painting. I'd never been able to work so uninterruptedly before, and I got to be better than I had been. Not good enough, but better. Then in November, right in the middle of a painting, I ran out of steam. Up till that point I'd always been curious to see how the painting I was working on would turn out, but suddenly finishing this one seemed like a chore. So I stopped working on it and cleaned my brushes and haven't painted since. So far anyway.\\n\\nI realize that sounds rather wimpy. But attention is a zero sum game. If you can choose what to work on, and you choose a project that's not the best one (or at least a good one) for you, then it's getting in the way of another project that is. And at 50 there was some opportunity cost to screwing around.\\n\\nI started writing essays again, and wrote a bunch of new ones over the next few months. I even wrote a couple that weren't about startups. Then in March 2015 I started working on Lisp again.\\n\\nThe distinctive thing about Lisp is that its core is a language defined by writing an interpreter in itself. It wasn't originally intended as a programming language in the ordinary sense. It was meant to be a formal model of computation, an alternative to the Turing machine. If you want to write an interpreter for a language in itself, what's the minimum set of predefined operators you need? The Lisp that John McCarthy invented, or more accurately discovered, is an answer to that question. [19]\\n\\nMcCarthy didn't realize this Lisp could even be used to program computers till his grad student Steve Russell suggested it. Russell translated McCarthy's interpreter into IBM 704 machine language, and from that point Lisp started also to be a programming language in the ordinary sense. But its origins as a model of computation gave it a power and elegance that other languages couldn't match. It was this that attracted me in college, though I didn't understand why at the time.\\n\\nMcCarthy's 1960 Lisp did nothing more than interpret Lisp expressions. It was missing a lot of things you'd want in a programming language. So these had to be added, and when they were, they weren't defined using McCarthy's original axiomatic approach. That wouldn't have been feasible at the time. McCarthy tested his interpreter by hand-simulating the execution of programs. But it was already getting close to the limit of interpreters you could test that way \\u2014 indeed, there was a bug in it that McCarthy had overlooked. To test a more complicated interpreter, you'd have had to run it, and computers then weren't powerful enough.\\n\\nNow they are, though. Now you could continue using McCarthy's axiomatic approach till you'd defined a complete programming language. And as long as every change you made to McCarthy's Lisp was a discoveredness-preserving transformation, you could, in principle, end up with a complete language that had this quality.\",\n",
-      "        \"It was missing a lot of things you'd want in a programming language. So these had to be added, and when they were, they weren't defined using McCarthy's original axiomatic approach. That wouldn't have been feasible at the time. McCarthy tested his interpreter by hand-simulating the execution of programs. But it was already getting close to the limit of interpreters you could test that way \\u2014 indeed, there was a bug in it that McCarthy had overlooked. To test a more complicated interpreter, you'd have had to run it, and computers then weren't powerful enough.\\n\\nNow they are, though. Now you could continue using McCarthy's axiomatic approach till you'd defined a complete programming language. And as long as every change you made to McCarthy's Lisp was a discoveredness-preserving transformation, you could, in principle, end up with a complete language that had this quality. Harder to do than to talk about, of course, but if it was possible in principle, why not try? So I decided to take a shot at it. It took 4 years, from March 26, 2015 to October 12, 2019. It was fortunate that I had a precisely defined goal, or it would have been hard to keep at it for so long.\\n\\nI wrote this new Lisp, called Bel, in itself in Arc. That may sound like a contradiction, but it's an indication of the sort of trickery I had to engage in to make this work. By means of an egregious collection of hacks I managed to make something close enough to an interpreter written in itself that could actually run. Not fast, but fast enough to test.\\n\\nI had to ban myself from writing essays during most of this time, or I'd never have finished. In late 2015 I spent 3 months writing essays, and when I went back to working on Bel I could barely understand the code. Not so much because it was badly written as because the problem is so convoluted. When you're working on an interpreter written in itself, it's hard to keep track of what's happening at what level, and errors can be practically encrypted by the time you get them.\\n\\nSo I said no more essays till Bel was done. But I told few people about Bel while I was working on it. So for years it must have seemed that I was doing nothing, when in fact I was working harder than I'd ever worked on anything. Occasionally after wrestling for hours with some gruesome bug I'd check Twitter or HN and see someone asking \\\"Does Paul Graham still code?\\\"\\n\\nWorking on Bel was hard but satisfying. I worked on it so intensively that at any given time I had a decent chunk of the code in my head and could write more there. I remember taking the boys to the coast on a sunny day in 2015 and figuring out how to deal with some problem involving continuations while I watched them play in the tide pools. It felt like I was doing life right. I remember that because I was slightly dismayed at how novel it felt. The good news is that I had more moments like this over the next few years.\\n\\nIn the summer of 2016 we moved to England. We wanted our kids to see what it was like living in another country, and since I was a British citizen by birth, that seemed the obvious choice. We only meant to stay for a year, but we liked it so much that we still live there. So most of Bel was written in England.\\n\\nIn the fall of 2019, Bel was finally finished. Like McCarthy's original Lisp, it's a spec rather than an implementation, although like McCarthy's Lisp it's a spec expressed as code.\\n\\nNow that I could write essays again, I wrote a bunch about topics I'd had stacked up. I kept writing essays through 2020, but I also started to think about other things I could work on. How should I choose what to do? Well, how had I chosen what to work on in the past? I wrote an essay for myself to answer that question, and I was surprised how long and messy the answer turned out to be. If this surprised me, who'd lived it, then I thought perhaps it would be interesting to other people, and encouraging to those with similarly messy lives. So I wrote a more detailed version for others to read, and this is the last sentence of it.\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nNotes\\n\\n[1] My experience skipped a step in the evolution of computers: time-sharing machines with interactive OSes. I went straight from batch processing to microcomputers, which made microcomputers seem all the more exciting.\",\n",
-      "        \"Now that I could write essays again, I wrote a bunch about topics I'd had stacked up. I kept writing essays through 2020, but I also started to think about other things I could work on. How should I choose what to do? Well, how had I chosen what to work on in the past? I wrote an essay for myself to answer that question, and I was surprised how long and messy the answer turned out to be. If this surprised me, who'd lived it, then I thought perhaps it would be interesting to other people, and encouraging to those with similarly messy lives. So I wrote a more detailed version for others to read, and this is the last sentence of it.\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nNotes\\n\\n[1] My experience skipped a step in the evolution of computers: time-sharing machines with interactive OSes. I went straight from batch processing to microcomputers, which made microcomputers seem all the more exciting.\\n\\n[2] Italian words for abstract concepts can nearly always be predicted from their English cognates (except for occasional traps like polluzione). It's the everyday words that differ. So if you string together a lot of abstract concepts with a few simple verbs, you can make a little Italian go a long way.\\n\\n[3] I lived at Piazza San Felice 4, so my walk to the Accademia went straight down the spine of old Florence: past the Pitti, across the bridge, past Orsanmichele, between the Duomo and the Baptistery, and then up Via Ricasoli to Piazza San Marco. I saw Florence at street level in every possible condition, from empty dark winter evenings to sweltering summer days when the streets were packed with tourists.\\n\\n[4] You can of course paint people like still lives if you want to, and they're willing. That sort of portrait is arguably the apex of still life painting, though the long sitting does tend to produce pained expressions in the sitters.\\n\\n[5] Interleaf was one of many companies that had smart people and built impressive technology, and yet got crushed by Moore's Law. In the 1990s the exponential growth in the power of commodity (i.e. Intel) processors rolled up high-end, special-purpose hardware and software companies like a bulldozer.\\n\\n[6] The signature style seekers at RISD weren't specifically mercenary. In the art world, money and coolness are tightly coupled. Anything expensive comes to be seen as cool, and anything seen as cool will soon become equally expensive.\\n\\n[7] Technically the apartment wasn't rent-controlled but rent-stabilized, but this is a refinement only New Yorkers would know or care about. The point is that it was really cheap, less than half market price.\\n\\n[8] Most software you can launch as soon as it's done. But when the software is an online store builder and you're hosting the stores, if you don't have any users yet, that fact will be painfully obvious. So before we could launch publicly we had to launch privately, in the sense of recruiting an initial set of users and making sure they had decent-looking stores.\\n\\n[9] We'd had a code editor in Viaweb for users to define their own page styles. They didn't know it, but they were editing Lisp expressions underneath. But this wasn't an app editor, because the code ran when the merchants' sites were generated, not when shoppers visited them.\\n\\n[10] This was the first instance of what is now a familiar experience, and so was what happened next, when I read the comments and found they were full of angry people. How could I claim that Lisp was better than other languages? Weren't they all Turing complete? People who see the responses to essays I write sometimes tell me how sorry they feel for me, but I'm not exaggerating when I reply that it has always been like this, since the very beginning. It comes with the territory. An essay must tell readers things they don't already know, and some people dislike being told such things.\\n\\n[11] People put plenty of stuff on the internet in the 90s of course, but putting something online is not the same as publishing it online. Publishing online means you treat the online version as the (or at least a) primary version.\\n\\n[12] There is a general lesson here that our experience with Y Combinator also teaches: Customs continue to constrain you long after the restrictions that caused them have disappeared. Customary VC practice had once, like the customs about publishing essays, been based on real constraints. Startups had once been much more expensive to start, and proportionally rare.\",\n",
-      "        \"People who see the responses to essays I write sometimes tell me how sorry they feel for me, but I'm not exaggerating when I reply that it has always been like this, since the very beginning. It comes with the territory. An essay must tell readers things they don't already know, and some people dislike being told such things.\\n\\n[11] People put plenty of stuff on the internet in the 90s of course, but putting something online is not the same as publishing it online. Publishing online means you treat the online version as the (or at least a) primary version.\\n\\n[12] There is a general lesson here that our experience with Y Combinator also teaches: Customs continue to constrain you long after the restrictions that caused them have disappeared. Customary VC practice had once, like the customs about publishing essays, been based on real constraints. Startups had once been much more expensive to start, and proportionally rare. Now they could be cheap and common, but the VCs' customs still reflected the old world, just as customs about writing essays still reflected the constraints of the print era.\\n\\nWhich in turn implies that people who are independent-minded (i.e. less influenced by custom) will have an advantage in fields affected by rapid change (where customs are more likely to be obsolete).\\n\\nHere's an interesting point, though: you can't always predict which fields will be affected by rapid change. Obviously software and venture capital will be, but who would have predicted that essay writing would be?\\n\\n[13] Y Combinator was not the original name. At first we were called Cambridge Seed. But we didn't want a regional name, in case someone copied us in Silicon Valley, so we renamed ourselves after one of the coolest tricks in the lambda calculus, the Y combinator.\\n\\nI picked orange as our color partly because it's the warmest, and partly because no VC used it. In 2005 all the VCs used staid colors like maroon, navy blue, and forest green, because they were trying to appeal to LPs, not founders. The YC logo itself is an inside joke: the Viaweb logo had been a white V on a red circle, so I made the YC logo a white Y on an orange square.\\n\\n[14] YC did become a fund for a couple years starting in 2009, because it was getting so big I could no longer afford to fund it personally. But after Heroku got bought we had enough money to go back to being self-funded.\\n\\n[15] I've never liked the term \\\"deal flow,\\\" because it implies that the number of new startups at any given time is fixed. This is not only false, but it's the purpose of YC to falsify it, by causing startups to be founded that would not otherwise have existed.\\n\\n[16] She reports that they were all different shapes and sizes, because there was a run on air conditioners and she had to get whatever she could, but that they were all heavier than she could carry now.\\n\\n[17] Another problem with HN was a bizarre edge case that occurs when you both write essays and run a forum. When you run a forum, you're assumed to see if not every conversation, at least every conversation involving you. And when you write essays, people post highly imaginative misinterpretations of them on forums. Individually these two phenomena are tedious but bearable, but the combination is disastrous. You actually have to respond to the misinterpretations, because the assumption that you're present in the conversation means that not responding to any sufficiently upvoted misinterpretation reads as a tacit admission that it's correct. But that in turn encourages more; anyone who wants to pick a fight with you senses that now is their chance.\\n\\n[18] The worst thing about leaving YC was not working with Jessica anymore. We'd been working on YC almost the whole time we'd known each other, and we'd neither tried nor wanted to separate it from our personal lives, so leaving was like pulling up a deeply rooted tree.\\n\\n[19] One way to get more precise about the concept of invented vs discovered is to talk about space aliens. Any sufficiently advanced alien civilization would certainly know about the Pythagorean theorem, for example. I believe, though with less certainty, that they would also know about the Lisp in McCarthy's 1960 paper.\\n\\nBut if so there's no reason to suppose that this is the limit of the language that might be known to them. Presumably aliens need numbers and errors and I\\/O too. So it seems likely there exists at least one path out of McCarthy's Lisp along which discoveredness is preserved.\",\n",
-      "        \"[18] The worst thing about leaving YC was not working with Jessica anymore. We'd been working on YC almost the whole time we'd known each other, and we'd neither tried nor wanted to separate it from our personal lives, so leaving was like pulling up a deeply rooted tree.\\n\\n[19] One way to get more precise about the concept of invented vs discovered is to talk about space aliens. Any sufficiently advanced alien civilization would certainly know about the Pythagorean theorem, for example. I believe, though with less certainty, that they would also know about the Lisp in McCarthy's 1960 paper.\\n\\nBut if so there's no reason to suppose that this is the limit of the language that might be known to them. Presumably aliens need numbers and errors and I\\/O too. So it seems likely there exists at least one path out of McCarthy's Lisp along which discoveredness is preserved.\\n\\n\\n\\nThanks to Trevor Blackwell, John Collison, Patrick Collison, Daniel Gackle, Ralph Hazell, Jessica Livingston, Robert Morris, and Harj Taggar for reading drafts of this.\"\n",
-      "    ],\n",
-      "    \"queries\": null,\n",
-      "    \"index_name\": \"\",\n",
-      "    \"overwrite\": false,\n",
-      "    \"root\": \"\\/Users\\/haotianzhang\\/llama_index\\/docs\\/examples\\/managed\\/experiments\",\n",
-      "    \"experiment\": \"default\",\n",
-      "    \"index_root\": \"storage\\/colbert_index\",\n",
-      "    \"name\": \"2023-12\\/21\\/15.49.01\",\n",
-      "    \"rank\": 0,\n",
-      "    \"nranks\": 1,\n",
-      "    \"amp\": true,\n",
-      "    \"gpus\": 0\n",
-      "}\n",
-      "[Dec 21, 15:49:04] Loading segmented_maxsim_cpp extension (set COLBERT_LOAD_TORCH_EXTENSION_VERBOSE=True for more info)...\n"
-     ]
-    },
-    {
-     "name": "stderr",
-     "output_type": "stream",
-     "text": [
-      "/Users/haotianzhang/llama_index/venv/lib/python3.11/site-packages/torch/cuda/amp/grad_scaler.py:125: UserWarning: torch.cuda.amp.GradScaler is enabled, but CUDA is not available.  Disabling.\n",
-      "  warnings.warn(\n",
-      "  0%|          | 0/1 [00:00<?, ?it/s]/Users/haotianzhang/llama_index/venv/lib/python3.11/site-packages/torch/amp/autocast_mode.py:250: UserWarning: User provided device_type of 'cuda', but CUDA is not available. Disabling\n",
-      "  warnings.warn(\n"
-     ]
-    },
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "[Dec 21, 15:49:10] [0] \t\t # of sampled PIDs = 22 \t sampled_pids[:3] = [13, 0, 9]\n",
-      "[Dec 21, 15:49:10] [0] \t\t #> Encoding 22 passages..\n"
-     ]
-    },
-    {
-     "name": "stderr",
-     "output_type": "stream",
-     "text": [
-      "100%|██████████| 1/1 [00:00<00:00,  1.32it/s]\n",
-      "WARNING clustering 2233 points to 512 centroids: please provide at least 19968 training points\n",
-      "0it [00:00, ?it/s]\n",
-      "  0%|          | 0/1 [00:00<?, ?it/s]\u001b[A/Users/haotianzhang/llama_index/venv/lib/python3.11/site-packages/torch/amp/autocast_mode.py:250: UserWarning: User provided device_type of 'cuda', but CUDA is not available. Disabling\n",
-      "  warnings.warn(\n"
-     ]
-    },
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "[Dec 21, 15:49:11] [0] \t\t avg_doclen_est = 106.81818389892578 \t len(local_sample) = 22\n",
-      "[Dec 21, 15:49:11] [0] \t\t Creaing 512 partitions.\n",
-      "[Dec 21, 15:49:11] [0] \t\t *Estimated* 2,350 embeddings.\n",
-      "[Dec 21, 15:49:11] [0] \t\t #> Saving the indexing plan to storage/colbert_index/plan.json ..\n",
-      "Clustering 2233 points in 128D to 512 clusters, redo 1 times, 4 iterations\n",
-      "  Preprocessing in 0.00 s\n",
-      "  Iteration 3 (0.01 s, search 0.01 s): objective=474.902 imbalance=1.585 nsplit=0       \n",
-      "[0.043, 0.039, 0.037, 0.041, 0.038, 0.047, 0.041, 0.041, 0.036, 0.035, 0.04, 0.041, 0.037, 0.052, 0.04, 0.043, 0.04, 0.035, 0.039, 0.037, 0.038, 0.04, 0.038, 0.042, 0.037, 0.04, 0.04, 0.035, 0.04, 0.045, 0.04, 0.045, 0.049, 0.038, 0.04, 0.04, 0.034, 0.036, 0.043, 0.046, 0.044, 0.041, 0.041, 0.041, 0.036, 0.036, 0.036, 0.043, 0.045, 0.044, 0.043, 0.043, 0.037, 0.045, 0.038, 0.041, 0.038, 0.04, 0.043, 0.039, 0.037, 0.04, 0.04, 0.041, 0.042, 0.037, 0.045, 0.041, 0.034, 0.044, 0.047, 0.035, 0.039, 0.034, 0.045, 0.042, 0.037, 0.046, 0.042, 0.044, 0.042, 0.036, 0.031, 0.044, 0.038, 0.037, 0.034, 0.045, 0.04, 0.044, 0.041, 0.043, 0.038, 0.046, 0.043, 0.046, 0.045, 0.041, 0.038, 0.038, 0.045, 0.039, 0.048, 0.038, 0.041, 0.037, 0.043, 0.037, 0.047, 0.034, 0.039, 0.038, 0.041, 0.035, 0.042, 0.041, 0.046, 0.044, 0.038, 0.037, 0.042, 0.039, 0.041, 0.041, 0.037, 0.049, 0.04, 0.035]\n",
-      "[Dec 21, 15:49:11] #> Got bucket_cutoffs_quantiles = tensor([0.2500, 0.5000, 0.7500]) and bucket_weights_quantiles = tensor([0.1250, 0.3750, 0.6250, 0.8750])\n",
-      "[Dec 21, 15:49:11] #> Got bucket_cutoffs = tensor([-0.0301,  0.0007,  0.0316]) and bucket_weights = tensor([-0.0553, -0.0131,  0.0149,  0.0567])\n",
-      "[Dec 21, 15:49:11] avg_residual = 0.04047335684299469\n",
-      "[Dec 21, 15:49:11] [0] \t\t #> Encoding 22 passages..\n"
-     ]
-    },
-    {
-     "name": "stderr",
-     "output_type": "stream",
-     "text": [
-      "\n",
-      "100%|██████████| 1/1 [00:00<00:00,  1.97it/s]\u001b[A\n",
-      "1it [00:00,  1.91it/s]\n",
-      "100%|██████████| 1/1 [00:00<00:00, 5745.62it/s]\n",
-      "100%|██████████| 512/512 [00:00<00:00, 247805.64it/s]\n"
-     ]
-    },
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "[Dec 21, 15:49:12] [0] \t\t #> Saving chunk 0: \t 22 passages and 2,350 embeddings. From #0 onward.\n",
-      "[Dec 21, 15:49:12] [0] \t\t #> Checking all files were saved...\n",
-      "[Dec 21, 15:49:12] [0] \t\t Found all files!\n",
-      "[Dec 21, 15:49:12] [0] \t\t #> Building IVF...\n",
-      "[Dec 21, 15:49:12] [0] \t\t #> Loading codes...\n",
-      "[Dec 21, 15:49:12] [0] \t\t Sorting codes...\n",
-      "[Dec 21, 15:49:12] [0] \t\t Getting unique codes...\n",
-      "[Dec 21, 15:49:12] #> Optimizing IVF to store map from centroids to list of pids..\n",
-      "[Dec 21, 15:49:12] #> Building the emb2pid mapping..\n",
-      "[Dec 21, 15:49:12] len(emb2pid) = 2350\n",
-      "[Dec 21, 15:49:12] #> Saved optimized IVF to storage/colbert_index/ivf.pid.pt\n",
-      "[Dec 21, 15:49:12] [0] \t\t #> Saving the indexing metadata to storage/colbert_index/metadata.json ..\n",
-      "#> Joined...\n",
-      "[Dec 21, 15:49:12] Loading segmented_maxsim_cpp extension (set COLBERT_LOAD_TORCH_EXTENSION_VERBOSE=True for more info)...\n",
-      "[Dec 21, 15:49:13] #> Loading codec...\n",
-      "[Dec 21, 15:49:13] #> Loading IVF...\n",
-      "[Dec 21, 15:49:13] Loading segmented_lookup_cpp extension (set COLBERT_LOAD_TORCH_EXTENSION_VERBOSE=True for more info)...\n"
-     ]
-    },
-    {
-     "name": "stderr",
-     "output_type": "stream",
-     "text": [
-      "/Users/haotianzhang/llama_index/venv/lib/python3.11/site-packages/torch/cuda/amp/grad_scaler.py:125: UserWarning: torch.cuda.amp.GradScaler is enabled, but CUDA is not available.  Disabling.\n",
-      "  warnings.warn(\n"
-     ]
-    },
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "[Dec 21, 15:49:18] #> Loading doclens...\n"
-     ]
-    },
-    {
-     "name": "stderr",
-     "output_type": "stream",
-     "text": [
-      "100%|██████████| 1/1 [00:00<00:00, 4718.00it/s]"
-     ]
-    },
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "[Dec 21, 15:49:18] #> Loading codes and residuals...\n"
-     ]
-    },
-    {
-     "name": "stderr",
-     "output_type": "stream",
-     "text": [
-      "\n",
-      "100%|██████████| 1/1 [00:00<00:00, 510.38it/s]"
-     ]
-    },
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "[Dec 21, 15:49:18] Loading filter_pids_cpp extension (set COLBERT_LOAD_TORCH_EXTENSION_VERBOSE=True for more info)...\n"
-     ]
-    },
-    {
-     "name": "stderr",
-     "output_type": "stream",
-     "text": [
-      "\n"
-     ]
-    },
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "[Dec 21, 15:49:24] Loading decompress_residuals_cpp extension (set COLBERT_LOAD_TORCH_EXTENSION_VERBOSE=True for more info)...\n"
-     ]
-    }
-   ],
-   "source": [
-    "llm = OpenAI(temperature=0, model=\"gpt-3.5-turbo\")\n",
-    "service_context = ServiceContext.from_defaults(llm=llm)\n",
-    "\n",
-    "documents = SimpleDirectoryReader(\"./data/paul_graham/\").load_data()\n",
-    "index = ColbertIndex.from_documents(\n",
-    "    documents=documents, service_context=service_context\n",
-    ")"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "### Query the ColBERT-V2 index with question"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "The author attended the Accademia di Belli Arti.\n"
-     ]
-    }
-   ],
-   "source": [
-    "query_engine = index.as_query_engine(similarity_top_k=3)\n",
-    "response = query_engine.query(\"Which program did this author attend?\")\n",
-    "print(response.response)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Node ID: 561fc633-2ab7-499d-a991-2823a653f87d\n",
-      "Text: What I Worked On  February 2021  Before college the two main\n",
-      "things I worked on, outside of school, were writing and programming. I\n",
-      "didn't write essays. I wrote what beginning writers were supposed to\n",
-      "write then, and probably still are: short stories. My stories were\n",
-      "awful. They had hardly any plot, just characters with strong feelings,\n",
-      "which I ...\n",
-      "Score:  30.306\n",
-      "\n",
-      "Node ID: 5ba2808a-6bd7-489e-82b4-d8a1894d05b3\n",
-      "Text: I didn't want to drop out of grad school, but how else was I\n",
-      "going to get out? I remember when my friend Robert Morris got kicked\n",
-      "out of Cornell for writing the internet worm of 1988, I was envious\n",
-      "that he'd found such a spectacular way to get out of grad school.\n",
-      "Then one day in April 1990 a crack appeared in the wall. I ran into\n",
-      "professor Chea...\n",
-      "Score:  26.641\n",
-      "\n",
-      "Node ID: af4bc370-436f-4796-b288-28480390b501\n",
-      "Text: I couldn't have put this into words when I was 18. All I knew at\n",
-      "the time was that I kept taking philosophy courses and they kept being\n",
-      "boring. So I decided to switch to AI.  AI was in the air in the mid\n",
-      "1980s, but there were two things especially that made me want to work\n",
-      "on it: a novel by Heinlein called The Moon is a Harsh Mistress, which\n",
-      "fea...\n",
-      "Score:  25.735\n",
-      "\n"
-     ]
-    }
-   ],
-   "source": [
-    "for node in response.source_nodes:\n",
-    "    print(node)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "The author attended a junior high school, an art school called RISD, and Cornell University for his undergraduate degree. He then went on to attend Harvard University for his graduate studies.\n"
-     ]
-    }
-   ],
-   "source": [
-    "response = query_engine.query(\n",
-    "    \"Which universities or schools or programs did this author attend?\"\n",
-    ")\n",
-    "print(response.response)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Node ID: 561fc633-2ab7-499d-a991-2823a653f87d\n",
-      "Text: What I Worked On  February 2021  Before college the two main\n",
-      "things I worked on, outside of school, were writing and programming. I\n",
-      "didn't write essays. I wrote what beginning writers were supposed to\n",
-      "write then, and probably still are: short stories. My stories were\n",
-      "awful. They had hardly any plot, just characters with strong feelings,\n",
-      "which I ...\n",
-      "Score:  30.660\n",
-      "\n",
-      "Node ID: 5ba2808a-6bd7-489e-82b4-d8a1894d05b3\n",
-      "Text: I didn't want to drop out of grad school, but how else was I\n",
-      "going to get out? I remember when my friend Robert Morris got kicked\n",
-      "out of Cornell for writing the internet worm of 1988, I was envious\n",
-      "that he'd found such a spectacular way to get out of grad school.\n",
-      "Then one day in April 1990 a crack appeared in the wall. I ran into\n",
-      "professor Chea...\n",
-      "Score:  28.439\n",
-      "\n",
-      "Node ID: af4bc370-436f-4796-b288-28480390b501\n",
-      "Text: I couldn't have put this into words when I was 18. All I knew at\n",
-      "the time was that I kept taking philosophy courses and they kept being\n",
-      "boring. So I decided to switch to AI.  AI was in the air in the mid\n",
-      "1980s, but there were two things especially that made me want to work\n",
-      "on it: a novel by Heinlein called The Moon is a Harsh Mistress, which\n",
-      "fea...\n",
-      "Score:  23.615\n",
-      "\n"
-     ]
-    }
-   ],
-   "source": [
-    "for node in response.source_nodes:\n",
-    "    print(node)"
-   ]
-  }
- ],
- "metadata": {
-  "kernelspec": {
-   "display_name": ".venv",
-   "language": "python",
-   "name": "python3"
-  },
-  "language_info": {
-   "codemirror_mode": {
-    "name": "ipython",
-    "version": 3
-   },
-   "file_extension": ".py",
-   "mimetype": "text/x-python",
-   "name": "python",
-   "nbconvert_exporter": "python",
-   "pygments_lexer": "ipython3"
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 2
-}
diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml
new file mode 100644
index 0000000000000000000000000000000000000000..2c3e401bd87ec4679c8152f6b56e0f737afd4a96
--- /dev/null
+++ b/docs/mkdocs.yml
@@ -0,0 +1,1786 @@
+extra:
+  analytics:
+    property: G-BYVB1ZVE6J
+    provider: google
+extra_css:
+  - css/style.css
+extra_javascript:
+  - javascript/mendablesearch.js
+markdown_extensions:
+  - admonition
+  - pymdownx.details
+  - pymdownx.superfences
+  - md_in_html
+  - toc:
+      permalink: "#"
+nav:
+  - Home:
+      - LlamaIndex: index.md
+      - getting_started/concepts.md
+      - getting_started/installation.md
+      - getting_started/reading.md
+      - Starter Examples:
+          - getting_started/starter_example.md
+          - getting_started/starter_example_local.md
+      - getting_started/discover_llamaindex.md
+      - getting_started/customization.md
+  - Learn:
+      - Building an LLM Application: ./understanding/index.md
+      - Using LLMs: ./understanding/using_llms/using_llms.md
+      - Loading & Ingestion:
+          - ./understanding/loading/loading.md
+          - ./understanding/loading/llamahub.md
+      - Indexing & Embedding: ./understanding/indexing/indexing.md
+      - Storing: ./understanding/storing/storing.md
+      - Querying: ./understanding/querying/querying.md
+      - Tracing and Debugging: ./understanding/tracing_and_debugging/tracing_and_debugging.md
+      - Evaluating:
+          - ./understanding/evaluating/evaluating.md
+          - Cost Analysis:
+              - ./understanding/evaluating/cost_analysis/index.md
+              - ./understanding/evaluating/cost_analysis/usage_pattern.md
+      - Putting it all Together: ./understanding/putting_it_all_together/
+  - Use Cases:
+      - ./use_cases/index.md
+      - Agents: ./use_cases/agents.md
+      - Chatbots: ./use_cases/chatbots.md
+      - Multi-Modal Applications: ./use_cases/multimodal.md
+      - Structured Data Extraction: ./use_cases/extraction.md
+      - General Q&A: ./use_cases/q_and_a/index.md
+      - Fine-Tuning: ./use_cases/fine_tuning.md
+  - Examples:
+      - ./examples/index.md
+      - Agents:
+          - ./examples/agent/Chatbot_SEC.ipynb
+          - ./examples/agent/openai_agent.ipynb
+          - ./examples/agent/openai_forced_function_call.ipynb
+          - ./examples/agent/custom_agent.ipynb
+          - ./examples/agent/openai_assistant_query_cookbook.ipynb
+          - ./examples/agent/agent_runner/query_pipeline_agent.ipynb
+          - ./examples/agent/agent_runner/agent_runner.ipynb
+          - ./examples/agent/agent_runner/agent_runner_rag.ipynb
+          - ./examples/agent/agent_runner/agent_runner_rag_controllable.ipynb
+          - ./examples/agent/openai_agent_retrieval.ipynb
+          - ./examples/agent/react_agent_with_query_engine.ipynb
+          - ./examples/agent/openai_assistant_agent.ipynb
+          - ./examples/agent/multi_document_agents-v1.ipynb
+          - ./examples/agent/openai_agent_parallel_function_calling.ipynb
+          - ./examples/agent/react_agent.ipynb
+          - ./examples/agent/agent_builder.ipynb
+          - ./examples/agent/openai_agent_context_retrieval.ipynb
+          - ./examples/agent/multi_document_agents.ipynb
+          - ./examples/agent/openai_agent_with_query_engine.ipynb
+          - ./examples/agent/openai_agent_query_cookbook.ipynb
+          - ./examples/agent/openai_agent_query_plan.ipynb
+          - ./examples/agent/openai_retrieval_benchmark.ipynb
+          - ./examples/agent/agent_runner/agent_around_query_pipeline_with_HyDE_for_PDFs.ipynb
+      - Callbacks:
+          - ./examples/callbacks/HoneyHiveLlamaIndexTracer.ipynb
+          - ./examples/callbacks/PromptLayerHandler.ipynb
+          - ./examples/callbacks/TokenCountingHandler.ipynb
+          - ./examples/callbacks/LlamaDebugHandler.ipynb
+          - ./examples/callbacks/OpenLLMetry.ipynb
+          - ./examples/callbacks/UpTrainCallback.ipynb
+          - ./examples/callbacks/WandbCallbackHandler.ipynb
+          - ./examples/callbacks/AimCallback.ipynb
+          - ./examples/callbacks/OpenInferenceCallback.ipynb
+          - ./examples/callbacks/LangfuseCallbackHandler.ipynb
+      - Chat Engines:
+          - ./examples/chat_engine/chat_engine_personality.ipynb
+          - ./examples/chat_engine/chat_engine_openai.ipynb
+          - ./examples/chat_engine/chat_engine_context.ipynb
+          - ./examples/chat_engine/chat_engine_best.ipynb
+          - ./examples/chat_engine/chat_engine_react.ipynb
+          - ./examples/chat_engine/chat_engine_repl.ipynb
+          - ./examples/chat_engine/chat_engine_condense_plus_context.ipynb
+          - ./examples/chat_engine/chat_engine_condense_question.ipynb
+      - Customization:
+          - ./examples/customization/streaming/chat_engine_condense_question_stream_response.ipynb
+          - ./examples/customization/streaming/SimpleIndexDemo-streaming.ipynb
+          - ./examples/customization/prompts/completion_prompts.ipynb
+          - ./examples/customization/prompts/chat_prompts.ipynb
+          - ./examples/customization/llms/SimpleIndexDemo-ChatGPT.ipynb
+          - ./examples/customization/llms/SimpleIndexDemo-Huggingface_stablelm.ipynb
+          - ./examples/customization/llms/SimpleIndexDemo-Huggingface_camel.ipynb
+          - ./examples/customization/llms/AzureOpenAI.ipynb
+      - Data Connectors:
+          - ./examples/data_connectors/simple_directory_reader_parallel.ipynb
+          - ./examples/data_connectors/DeepLakeReader.ipynb
+          - ./examples/data_connectors/PsychicDemo.ipynb
+          - ./examples/data_connectors/QdrantDemo.ipynb
+          - ./examples/data_connectors/html_tag_reader.ipynb
+          - ./examples/data_connectors/DiscordDemo.ipynb
+          - ./examples/data_connectors/MongoDemo.ipynb
+          - ./examples/data_connectors/ChromaDemo.ipynb
+          - ./examples/data_connectors/MyScaleReaderDemo.ipynb
+          - ./examples/data_connectors/FaissDemo.ipynb
+          - ./examples/data_connectors/ObsidianReaderDemo.ipynb
+          - ./examples/data_connectors/SlackDemo.ipynb
+          - ./examples/data_connectors/WebPageDemo.ipynb
+          - ./examples/data_connectors/PineconeDemo.ipynb
+          - ./examples/data_connectors/MboxReaderDemo.ipynb
+          - ./examples/data_connectors/MilvusReaderDemo.ipynb
+          - ./examples/data_connectors/NotionDemo.ipynb
+          - ./examples/data_connectors/DashvectorReaderDemo.ipynb
+          - ./examples/data_connectors/PathwayReaderDemo.ipynb
+          - ./examples/data_connectors/deplot/DeplotReader.ipynb
+          - ./examples/data_connectors/GithubRepositoryReaderDemo.ipynb
+          - ./examples/data_connectors/simple_directory_reader.ipynb
+          - ./examples/data_connectors/GoogleDocsDemo.ipynb
+          - ./examples/data_connectors/DatabaseReaderDemo.ipynb
+          - ./examples/data_connectors/TwitterDemo.ipynb
+          - ./examples/data_connectors/WeaviateDemo.ipynb
+          - ./examples/data_connectors/MakeDemo.ipynb
+          - ./examples/data_connectors/GoogleSheetsDemo.ipynb
+          - ./examples/data_connectors/simple_directory_reader_remote_fs.ipynb
+      - Discover LlamaIndex:
+          - ./examples/discover_llamaindex/document_management/Discord_Thread_Management.ipynb
+      - Docstores:
+          - ./examples/docstore/DynamoDBDocstoreDemo.ipynb
+          - ./examples/docstore/RedisDocstoreIndexStoreDemo.ipynb
+          - ./examples/docstore/MongoDocstoreDemo.ipynb
+          - ./examples/docstore/FirestoreDemo.ipynb
+          - ./examples/docstore/DocstoreDemo.ipynb
+      - Embeddings:
+          - ./examples/embeddings/fastembed.ipynb
+          - ./examples/embeddings/text_embedding_inference.ipynb
+          - ./examples/embeddings/clarifai.ipynb
+          - ./examples/embeddings/bedrock.ipynb
+          - ./examples/embeddings/voyageai.ipynb
+          - ./examples/embeddings/ollama_embedding.ipynb
+          - ./examples/embeddings/gradient.ipynb
+          - ./examples/embeddings/custom_embeddings.ipynb
+          - ./examples/embeddings/gemini.ipynb
+          - ./examples/embeddings/huggingface.ipynb
+          - ./examples/embeddings/Anyscale.ipynb
+          - ./examples/embeddings/optimum_intel.ipynb
+          - ./examples/embeddings/jinaai_embeddings.ipynb
+          - ./examples/embeddings/fireworks.ipynb
+          - ./examples/embeddings/nomic.ipynb
+          - ./examples/embeddings/mistralai.ipynb
+          - ./examples/embeddings/dashscope_embeddings.ipynb
+          - ./examples/embeddings/jina_embeddings.ipynb
+          - ./examples/embeddings/llm_rails.ipynb
+          - ./examples/embeddings/google_palm.ipynb
+          - ./examples/embeddings/sagemaker_embedding_endpoint.ipynb
+          - ./examples/embeddings/Langchain.ipynb
+          - ./examples/embeddings/elasticsearch.ipynb
+          - ./examples/embeddings/OpenAI.ipynb
+          - ./examples/embeddings/cohereai.ipynb
+          - ./examples/embeddings/together.ipynb
+          - ./examples/embeddings/llamafile.ipynb
+          - ./examples/embeddings/premai.ipynb
+      - Evaluation:
+          - ./examples/evaluation/TonicValidateEvaluators.ipynb
+          - ./examples/evaluation/semantic_similarity_eval.ipynb
+          - ./examples/evaluation/batch_eval.ipynb
+          - ./examples/evaluation/mt_bench_human_judgement.ipynb
+          - ./examples/evaluation/mt_bench_single_grading.ipynb
+          - ./examples/evaluation/answer_and_context_relevancy.ipynb
+          - ./examples/evaluation/prometheus_evaluation.ipynb
+          - ./examples/evaluation/faithfulness_eval.ipynb
+          - ./examples/evaluation/HotpotQADistractor.ipynb
+          - ./examples/evaluation/RetryQuery.ipynb
+          - ./examples/evaluation/correctness_eval.ipynb
+          - ./examples/evaluation/UpTrain.ipynb
+          - ./examples/evaluation/QuestionGeneration.ipynb
+          - ./examples/evaluation/retrieval/retriever_eval.ipynb
+          - ./examples/evaluation/multi_modal/multi_modal_rag_evaluation.ipynb
+          - ./examples/evaluation/BeirEvaluation.ipynb
+          - ./examples/evaluation/relevancy_eval.ipynb
+          - ./examples/evaluation/Deepeval.ipynb
+          - ./examples/evaluation/guideline_eval.ipynb
+          - ./examples/evaluation/pairwise_eval.ipynb
+      - Finetuning:
+          - ./examples/finetuning/gradient/gradient_structured.ipynb
+          - ./examples/finetuning/gradient/gradient_fine_tuning.ipynb
+          - ./examples/finetuning/gradient/gradient_text2sql.ipynb
+          - ./examples/finetuning/embeddings/finetune_embedding.ipynb
+          - ./examples/finetuning/embeddings/finetune_embedding_adapter.ipynb
+          - ./examples/finetuning/openai_fine_tuning_functions.ipynb
+          - ./examples/finetuning/rerankers/cohere_custom_reranker.ipynb
+          - ./examples/finetuning/openai_fine_tuning.ipynb
+          - ./examples/finetuning/cross_encoder_finetuning/cross_encoder_finetuning.ipynb
+          - ./examples/finetuning/react_agent/react_agent_finetune.ipynb
+          - ./examples/finetuning/llm_judge/pairwise/finetune_llm_judge.ipynb
+          - ./examples/finetuning/llm_judge/correctness/finetune_llm_judge_single_grading_correctness.ipynb
+          - ./examples/finetuning/router/router_finetune.ipynb
+      - Ingestion:
+          - ./examples/ingestion/async_ingestion_pipeline.ipynb
+          - ./examples/ingestion/parallel_execution_ingestion_pipeline.ipynb
+          - ./examples/ingestion/document_management_pipeline.ipynb
+          - ./examples/ingestion/ingestion_gdrive.ipynb
+          - ./examples/ingestion/advanced_ingestion_pipeline.ipynb
+          - ./examples/ingestion/redis_ingestion_pipeline.ipynb
+      - Llama Datasets:
+          - ./examples/llama_dataset/uploading_llama_dataset.ipynb
+          - ./examples/llama_dataset/labelled-rag-datasets.ipynb
+          - ./examples/llama_dataset/downloading_llama_datasets.ipynb
+          - ./examples/llama_dataset/ragdataset_submission_template.ipynb
+      - Llama Hub:
+          - ./examples/llama_hub/llama_pack_ollama.ipynb
+          - ./examples/llama_hub/llama_packs_example.ipynb
+          - ./examples/llama_hub/llama_hub.ipynb
+          - ./examples/llama_hub/llama_pack_resume.ipynb
+      - LLMs:
+          - ./examples/llm/rungpt.ipynb
+          - ./examples/llm/watsonx.ipynb
+          - ./examples/llm/openllm.ipynb
+          - ./examples/llm/openai_json_vs_function_calling.ipynb
+          - ./examples/llm/mymagic.ipynb
+          - ./examples/llm/portkey.ipynb
+          - ./examples/llm/everlyai.ipynb
+          - ./examples/llm/palm.ipynb
+          - ./examples/llm/cohere.ipynb
+          - ./examples/llm/vertex.ipynb
+          - ./examples/llm/predibase.ipynb
+          - ./examples/llm/llama_api.ipynb
+          - ./examples/llm/clarifai.ipynb
+          - ./examples/llm/bedrock.ipynb
+          - ./examples/llm/llama_2.ipynb
+          - ./examples/llm/gradient_model_adapter.ipynb
+          - ./examples/llm/maritalk.ipynb
+          - ./examples/llm/nvidia_tensorrt.ipynb
+          - ./examples/llm/xinference_local_deployment.ipynb
+          - ./examples/llm/azure_openai.ipynb
+          - ./examples/llm/gemini.ipynb
+          - ./examples/llm/huggingface.ipynb
+          - ./examples/llm/anyscale.ipynb
+          - ./examples/llm/vicuna.ipynb
+          - ./examples/llm/openrouter.ipynb
+          - ./examples/llm/fireworks.ipynb
+          - ./examples/llm/llama_2_rap_battle.ipynb
+          - ./examples/llm/vllm.ipynb
+          - ./examples/llm/dashscope.ipynb
+          - ./examples/llm/localai.ipynb
+          - ./examples/llm/llm_predictor.ipynb
+          - ./examples/llm/mistralai.ipynb
+          - ./examples/llm/monsterapi.ipynb
+          - ./examples/llm/ai21.ipynb
+          - ./examples/llm/llama_2_llama_cpp.ipynb
+          - ./examples/llm/nvidia_triton.ipynb
+          - ./examples/llm/perplexity.ipynb
+          - ./examples/llm/litellm.ipynb
+          - ./examples/llm/ollama.ipynb
+          - ./examples/llm/neutrino.ipynb
+          - ./examples/llm/groq.ipynb
+          - ./examples/llm/langchain.ipynb
+          - ./examples/llm/sagemaker_endpoint_llm.ipynb
+          - ./examples/llm/openai.ipynb
+          - ./examples/llm/anthropic.ipynb
+          - ./examples/llm/gradient_base_model.ipynb
+          - ./examples/llm/ollama_gemma.ipynb
+          - ./examples/llm/konko.ipynb
+          - ./examples/llm/together.ipynb
+          - ./examples/llm/fireworks_cookbook.ipynb
+          - ./examples/llm/friendli.ipynb
+          - ./examples/llm/modelscope.ipynb
+          - ./examples/llm/llamafile.ipynb
+          - ./examples/llm/premai.ipynb
+          - ./examples/llm/solar.ipynb
+      - Low Level:
+          - ./examples/low_level/oss_ingestion_retrieval.ipynb
+          - ./examples/low_level/fusion_retriever.ipynb
+          - ./examples/low_level/router.ipynb
+          - ./examples/low_level/retrieval.ipynb
+          - ./examples/low_level/evaluation.ipynb
+          - ./examples/low_level/response_synthesis.ipynb
+          - ./examples/low_level/vector_store.ipynb
+          - ./examples/low_level/ingestion.ipynb
+      - Managed Indexes:
+          - ./examples/managed/vectaraDemo.ipynb
+          - ./examples/managed/manage_retrieval_benchmark.ipynb
+          - ./examples/managed/GoogleDemo.ipynb
+          - ./examples/managed/zcpDemo.ipynb
+      - Metadata Extractors:
+          - ./examples/metadata_extraction/MarvinMetadataExtractorDemo.ipynb
+          - ./examples/metadata_extraction/MetadataExtraction_LLMSurvey.ipynb
+          - ./examples/metadata_extraction/PydanticExtractor.ipynb
+          - ./examples/metadata_extraction/EntityExtractionClimate.ipynb
+          - ./examples/metadata_extraction/MetadataExtractionSEC.ipynb
+      - Multi-Modal:
+          - ./examples/multi_modal/llava_demo.ipynb
+          - ./examples/multi_modal/llava_multi_modal_tesla_10q.ipynb
+          - ./examples/multi_modal/replicate_multi_modal.ipynb
+          - ./examples/multi_modal/structured_image_retrieval.ipynb
+          - ./examples/multi_modal/gpt4v_experiments_cot.ipynb
+          - ./examples/multi_modal/multi_modal_retrieval.ipynb
+          - ./examples/multi_modal/dashscope_multi_modal.ipynb
+          - ./examples/multi_modal/openai_multi_modal.ipynb
+          - ./examples/multi_modal/mm_agent.ipynb
+          - ./examples/multi_modal/azure_openai_multi_modal.ipynb
+          - ./examples/multi_modal/gemini.ipynb
+          - ./examples/multi_modal/multi_modal_video_RAG.ipynb
+          - ./examples/multi_modal/ollama_cookbook.ipynb
+          - ./examples/multi_modal/ChromaMultiModalDemo.ipynb
+          - ./examples/multi_modal/multi_modal_pydantic.ipynb
+          - ./examples/multi_modal/gpt4v_multi_modal_retrieval.ipynb
+          - ./examples/multi_modal/image_to_image_retrieval.ipynb
+          - ./examples/multi_modal/anthropic_multi_modal.ipynb
+      - Multi-Tenancy:
+          - ./examples/multi_tenancy/multi_tenancy_rag.ipynb
+      - Node Parsers & Text Splitters:
+          - ./examples/node_parsers/semantic_chunking.ipynb
+      - Node Postprocessors:
+          - ./examples/node_postprocessor/FileNodeProcessors.ipynb
+          - ./examples/node_postprocessor/MetadataReplacementDemo.ipynb
+          - ./examples/node_postprocessor/PII.ipynb
+          - ./examples/node_postprocessor/PrevNextPostprocessorDemo.ipynb
+          - ./examples/node_postprocessor/rankGPT.ipynb
+          - ./examples/node_postprocessor/LLMReranker-Gatsby.ipynb
+          - ./examples/node_postprocessor/SentenceTransformerRerank.ipynb
+          - ./examples/node_postprocessor/LLMReranker-Lyft-10k.ipynb
+          - ./examples/node_postprocessor/LongContextReorder.ipynb
+          - ./examples/node_postprocessor/CohereRerank.ipynb
+          - ./examples/node_postprocessor/RecencyPostprocessorDemo.ipynb
+          - ./examples/node_postprocessor/ColbertRerank.ipynb
+          - ./examples/node_postprocessor/FlagEmbeddingReranker.ipynb
+          - ./examples/node_postprocessor/OptimizerDemo.ipynb
+          - ./examples/node_postprocessor/TimeWeightedPostprocessorDemo.ipynb
+          - ./examples/node_postprocessor/JinaRerank.ipynb
+      - Object Stores:
+          - ./examples/objects/object_index.ipynb
+      - Output Parsers:
+          - ./examples/output_parsing/llm_program.ipynb
+          - ./examples/output_parsing/openai_pydantic_program.ipynb
+          - ./examples/output_parsing/df_program.ipynb
+          - ./examples/output_parsing/evaporate_program.ipynb
+          - ./examples/output_parsing/openai_sub_question.ipynb
+          - ./examples/output_parsing/guidance_pydantic_program.ipynb
+          - ./examples/output_parsing/GuardrailsDemo.ipynb
+          - ./examples/output_parsing/LangchainOutputParserDemo.ipynb
+          - ./examples/output_parsing/lmformatenforcer_pydantic_program.ipynb
+          - ./examples/output_parsing/lmformatenforcer_regular_expressions.ipynb
+          - ./examples/output_parsing/guidance_sub_question.ipynb
+      - Param Optimizer:
+          - ./examples/param_optimizer/param_optimizer.ipynb
+      - Query Pipeline:
+          - ./examples/pipeline/query_pipeline.ipynb
+          - ./examples/pipeline/query_pipeline_pandas.ipynb
+          - ./examples/pipeline/query_pipeline_sql.ipynb
+          - ./examples/pipeline/query_pipeline_async.ipynb
+          - ./examples/pipeline/query_pipeline_routing.ipynb
+      - Prompts:
+          - ./examples/prompts/advanced_prompts.ipynb
+          - ./examples/prompts/emotion_prompt.ipynb
+          - ./examples/prompts/prompts_rag.ipynb
+          - ./examples/prompts/prompt_mixin.ipynb
+          - ./examples/prompts/prompt_optimization.ipynb
+      - Query Engines:
+          - ./examples/query_engine/knowledge_graph_rag_query_engine.ipynb
+          - ./examples/query_engine/JSONalyze_query_engine.ipynb
+          - ./examples/query_engine/RetrieverRouterQueryEngine.ipynb
+          - ./examples/query_engine/pgvector_sql_query_engine.ipynb
+          - ./examples/query_engine/SQLJoinQueryEngine.ipynb
+          - ./examples/query_engine/citation_query_engine.ipynb
+          - ./examples/query_engine/pandas_query_engine.ipynb
+          - ./examples/query_engine/ensemble_query_engine.ipynb
+          - ./examples/query_engine/json_query_engine.ipynb
+          - ./examples/query_engine/RouterQueryEngine.ipynb
+          - ./examples/query_engine/pydantic_query_engine.ipynb
+          - ./examples/query_engine/cogniswitch_query_engine.ipynb
+          - ./examples/query_engine/pdf_tables/recursive_retriever.ipynb
+          - ./examples/query_engine/SQLRouterQueryEngine.ipynb
+          - ./examples/query_engine/sec_tables/tesla_10q_table.ipynb
+          - ./examples/query_engine/recursive_retriever_agents.ipynb
+          - ./examples/query_engine/JointQASummary.ipynb
+          - ./examples/query_engine/multi_doc_auto_retrieval/multi_doc_auto_retrieval.ipynb
+          - ./examples/query_engine/flare_query_engine.ipynb
+          - ./examples/query_engine/knowledge_graph_query_engine.ipynb
+          - ./examples/query_engine/sub_question_query_engine.ipynb
+          - ./examples/query_engine/SQLAutoVectorQueryEngine.ipynb
+          - ./examples/query_engine/custom_query_engine.ipynb
+          - ./examples/query_engine/CustomRetrievers.ipynb
+      - Query Transformations:
+          - ./examples/query_transformations/query_transform_cookbook.ipynb
+          - ./examples/query_transformations/HyDEQueryTransformDemo.ipynb
+          - ./examples/query_transformations/SimpleIndexDemo-multistep.ipynb
+      - Response Synthesizers:
+          - ./examples/response_synthesizers/pydantic_tree_summarize.ipynb
+          - ./examples/response_synthesizers/refine.ipynb
+          - ./examples/response_synthesizers/structured_refine.ipynb
+          - ./examples/response_synthesizers/custom_prompt_synthesizer.ipynb
+          - ./examples/response_synthesizers/long_context_test.ipynb
+          - ./examples/response_synthesizers/tree_summarize.ipynb
+      - Retrievers:
+          - ./examples/retrievers/bm25_retriever.ipynb
+          - ./examples/retrievers/composable_retrievers.ipynb
+          - ./examples/retrievers/router_retriever.ipynb
+          - ./examples/retrievers/recursive_retriever_nodes.ipynb
+          - ./examples/retrievers/multi_doc_together_hybrid.ipynb
+          - ./examples/retrievers/vectara_auto_retriever.ipynb
+          - ./examples/retrievers/pathway_retriever.ipynb
+          - ./examples/retrievers/auto_vs_recursive_retriever.ipynb
+          - ./examples/retrievers/ensemble_retrieval.ipynb
+          - ./examples/retrievers/simple_fusion.ipynb
+          - ./examples/retrievers/auto_merging_retriever.ipynb
+          - ./examples/retrievers/recurisve_retriever_nodes_braintrust.ipynb
+          - ./examples/retrievers/deep_memory.ipynb
+          - ./examples/retrievers/you_retriever.ipynb
+          - ./examples/retrievers/reciprocal_rerank_fusion.ipynb
+          - ./examples/retrievers/relative_score_dist_fusion.ipynb
+          - ./examples/retrievers/videodb_retriever.ipynb
+      - Tools:
+          - ./examples/tools/OnDemandLoaderTool.ipynb
+      - Transforms:
+          - ./examples/transforms/TransformsEval.ipynb
+      - Use Cases:
+          - ./examples/usecases/10q_sub_question.ipynb
+          - ./examples/usecases/10k_sub_question.ipynb
+          - ./examples/usecases/github_issue_analysis.ipynb
+          - ./examples/usecases/email_data_extraction.ipynb
+      - Vector Stores:
+          - ./examples/vector_stores/TypesenseDemo.ipynb
+          - ./examples/vector_stores/BagelAutoRetriever.ipynb
+          - ./examples/vector_stores/RocksetIndexDemo.ipynb
+          - ./examples/vector_stores/TencentVectorDBIndexDemo.ipynb
+          - ./examples/vector_stores/QdrantIndexDemo.ipynb
+          - ./examples/vector_stores/Timescalevector.ipynb
+          - ./examples/vector_stores/MongoDBAtlasVectorSearch.ipynb
+          - ./examples/vector_stores/DocArrayInMemoryIndexDemo.ipynb
+          - ./examples/vector_stores/chroma_auto_retriever.ipynb
+          - ./examples/vector_stores/ZepIndexDemo.ipynb
+          - ./examples/vector_stores/FaissIndexDemo.ipynb
+          - ./examples/vector_stores/existing_data/pinecone_existing_data.ipynb
+          - ./examples/vector_stores/existing_data/weaviate_existing_data.ipynb
+          - ./examples/vector_stores/SimpleIndexDemo.ipynb
+          - ./examples/vector_stores/qdrant_hybrid.ipynb
+          - ./examples/vector_stores/DeepLakeIndexDemo.ipynb
+          - ./examples/vector_stores/pinecone_metadata_filter.ipynb
+          - ./examples/vector_stores/Qdrant_using_qdrant_filters.ipynb
+          - ./examples/vector_stores/elasticsearch_auto_retriever.ipynb
+          - ./examples/vector_stores/ClickHouseIndexDemo.ipynb
+          - ./examples/vector_stores/SimpleIndexOnS3.ipynb
+          - ./examples/vector_stores/TxtaiIndexDemo.ipynb
+          - ./examples/vector_stores/CassandraIndexDemo.ipynb
+          - ./examples/vector_stores/Elasticsearch_demo.ipynb
+          - ./examples/vector_stores/AwadbDemo.ipynb
+          - ./examples/vector_stores/postgres.ipynb
+          - ./examples/vector_stores/chroma_metadata_filter.ipynb
+          - ./examples/vector_stores/AzureCosmosDBMongoDBvCoreDemo.ipynb
+          - ./examples/vector_stores/UpstashVectorDemo.ipynb
+          - ./examples/vector_stores/Neo4jVectorDemo.ipynb
+          - ./examples/vector_stores/ElasticsearchIndexDemo.ipynb
+          - ./examples/vector_stores/SimpleIndexDemoLlama-Local.ipynb
+          - ./examples/vector_stores/MyScaleIndexDemo.ipynb
+          - ./examples/vector_stores/MetalIndexDemo.ipynb
+          - ./examples/vector_stores/AsyncIndexCreationDemo.ipynb
+          - ./examples/vector_stores/TairIndexDemo.ipynb
+          - ./examples/vector_stores/PineconeIndexDemo.ipynb
+          - ./examples/vector_stores/MongoDBAtlasVectorSearchRAGOpenAI.ipynb
+          - ./examples/vector_stores/RedisIndexDemo.ipynb
+          - ./examples/vector_stores/JaguarIndexDemo.ipynb
+          - ./examples/vector_stores/SimpleIndexDemoLlama2.ipynb
+          - ./examples/vector_stores/WeaviateIndexDemo.ipynb
+          - ./examples/vector_stores/SupabaseVectorIndexDemo.ipynb
+          - ./examples/vector_stores/PGVectoRsDemo.ipynb
+          - ./examples/vector_stores/WeaviateIndex_metadata_filter.ipynb
+          - ./examples/vector_stores/WeaviateIndexDemo-Hybrid.ipynb
+          - ./examples/vector_stores/DocArrayHnswIndexDemo.ipynb
+          - ./examples/vector_stores/DashvectorIndexDemo.ipynb
+          - ./examples/vector_stores/OpensearchDemo.ipynb
+          - ./examples/vector_stores/PineconeIndexDemo-Hybrid.ipynb
+          - ./examples/vector_stores/Qdrant_metadata_filter.ipynb
+          - ./examples/vector_stores/SimpleIndexDemoMMR.ipynb
+          - ./examples/vector_stores/pinecone_auto_retriever.ipynb
+          - ./examples/vector_stores/ChromaIndexDemo.ipynb
+          - ./examples/vector_stores/LanceDBIndexDemo.ipynb
+          - ./examples/vector_stores/BagelIndexDemo.ipynb
+          - ./examples/vector_stores/EpsillaIndexDemo.ipynb
+          - ./examples/vector_stores/MilvusIndexDemo.ipynb
+          - ./examples/vector_stores/AzureAISearchIndexDemo.ipynb
+          - ./examples/vector_stores/LanternIndexDemo.ipynb
+          - ./examples/vector_stores/AstraDBIndexDemo.ipynb
+          - ./examples/vector_stores/LanternAutoRetriever.ipynb
+          - ./examples/vector_stores/WeaviateIndex_auto_retriever.ipynb
+          - ./examples/vector_stores/DatabricksVectorSearchDemo.ipynb
+          - ./examples/vector_stores/ChromaFireworksNomic.ipynb
+          - ./examples/vector_stores/DuckDBDemo.ipynb
+          - ./examples/vector_stores/BaiduVectorDBIndexDemo.ipynb
+          - ./examples/vector_stores/MongoDBAtlasVectorSearchRAGFireworks.ipynb
+  - Component Guides:
+      - ./module_guides/index.md
+      - Models:
+          - ./module_guides/models/index.md
+          - LLMs:
+              - ./module_guides/models/llms.md
+              - Standalone Usage: ./module_guides/models/llms/usage_standalone.md
+              - Customizing LLMs: ./module_guides/models/llms/usage_custom.md
+              - Available LLM Integrations: ./module_guides/models/llms/modules.md
+          - Embeddings: ./module_guides/models/embeddings.md
+          - Multi Modal: ./module_guides/models/multi_modal.md
+      - Prompts:
+          - ./module_guides/models/prompts/index.md
+          - ./module_guides/models/prompts/usage_pattern.md
+      - Loading:
+          - ./module_guides/loading/index.md
+          - Documents and Nodes:
+              - ./module_guides/loading/documents_and_nodes/index.md
+              - Using Documents: ./module_guides/loading/documents_and_nodes/usage_documents.md
+              - Using Nodes: ./module_guides/loading/documents_and_nodes/usage_nodes.md
+              - Metadata Extraction: ./module_guides/loading/documents_and_nodes/usage_metadata_extractor.md
+          - SimpleDirectoryReader: ./module_guides/loading/simpledirectoryreader.md
+          - Data Connectors:
+              - ./module_guides/loading/connector/index.md
+              - ./module_guides/loading/connector/usage_pattern.md
+              - LlamaParse: ./module_guides/loading/connector/llama_parse.md
+              - ./module_guides/loading/connector/modules.md
+          - Node Parsers / Text Splitters:
+              - ./module_guides/loading/node_parsers/index.md
+              - ./module_guides/loading/node_parsers/modules.md
+          - Ingestion Pipeline:
+              - ./module_guides/loading/ingestion_pipeline/index.md
+              - ./module_guides/loading/ingestion_pipeline/transformations.md
+      - Indexing:
+          - ./module_guides/indexing/index.md
+          - Index Guide: ./module_guides/indexing/index_guide.md
+          - Vector Store Index: ./module_guides/indexing/vector_store_index.md
+          - Document Management: ./module_guides/indexing/document_management.md
+          - LlamaCloud: ./module_guides/indexing/llama_cloud_index.md
+          - Metadata Extraction: ./module_guides/indexing/metadata_extraction.md
+          - Modules: ./module_guides/indexing/modules.md
+      - Storing:
+          - ./module_guides/storing/index.md
+          - ./module_guides/storing/vector_stores.md
+          - ./module_guides/storing/docstores.md
+          - ./module_guides/storing/index_stores.md
+          - ./module_guides/storing/chat_stores.md
+          - ./module_guides/storing/kv_stores.md
+          - ./module_guides/storing/save_load.md
+          - ./module_guides/storing/customization.md
+      - Querying:
+          - ./module_guides/querying/index.md
+          - Retrieval:
+              - ./module_guides/querying/retriever/index.md
+              - ./module_guides/querying/retriever/retrievers.md
+              - ./module_guides/querying/retriever/retriever_modes.md
+          - Node Postprocessors:
+              - ./module_guides/querying/node_postprocessors/index.md
+              - ./module_guides/querying/node_postprocessors/node_postprocessors.md
+          - Response Synthesis:
+              - ./module_guides/querying/response_synthesizers/index.md
+              - ./module_guides/querying/response_synthesizers/response_synthesizers.md
+          - Routing: ./module_guides/querying/router/index.md
+          - Query Pipelines:
+              - ./module_guides/querying/pipeline/index.md
+              - ./module_guides/querying/pipeline/usage_pattern.md
+              - ./module_guides/querying/pipeline/modules.md
+              - ./module_guides/querying/pipeline/module_usage.md
+          - Structured Outputs:
+              - ./module_guides/querying/structured_outputs/index.md
+              - ./module_guides/querying/structured_outputs/output_parser.md
+              - ./module_guides/querying/structured_outputs/query_engine.md
+              - ./module_guides/querying/structured_outputs/pydantic_program.md
+      - Evaluation:
+          - ./module_guides/evaluating/index.md
+          - ./module_guides/evaluating/usage_pattern.md
+          - ./module_guides/evaluating/usage_pattern_retrieval.md
+          - ./module_guides/evaluating/modules.md
+          - LlamaDatasets:
+              - ./module_guides/evaluating/contributing_llamadatasets.md
+              - ./module_guides/evaluating/evaluating_with_llamadatasets.md
+              - ./module_guides/evaluating/evaluating_evaluators_with_llamadatasets.md
+      - Observability:
+          - ./module_guides/observability/index.md
+          - ./module_guides/observability/instrumentation.md
+      - Deploying:
+          - Agents:
+              - ./module_guides/deploying/agents/index.md
+              - ./module_guides/deploying/agents/usage_pattern.md
+              - ./module_guides/deploying/agents/agent_runner.md
+              - ./module_guides/deploying/agents/modules.md
+              - Tools:
+                  - ./module_guides/deploying/agents/tools/index.md
+                  - ./module_guides/deploying/agents/tools/usage_pattern.md
+                  - ./module_guides/deploying/agents/tools/llamahub_tools_guide.md
+          - Chat Engines:
+              - ./module_guides/deploying/chat_engines/index.md
+              - ./module_guides/deploying/chat_engines/usage_pattern.md
+              - ./module_guides/deploying/chat_engines/modules.md
+          - Query Engines:
+              - ./module_guides/deploying/query_engine/index.md
+              - ./module_guides/deploying/query_engine/usage_pattern.md
+              - ./module_guides/deploying/query_engine/response_modes.md
+              - ./module_guides/deploying/query_engine/streaming.md
+              - ./module_guides/deploying/query_engine/modules.md
+              - ./module_guides/deploying/query_engine/supporting_modules.md
+      - Settings: ./module_guides/supporting_modules/settings.md
+  - Advanced Topics:
+      - ./optimizing/production_rag.md
+      - ./optimizing/basic_strategies/basic_strategies.md
+      - ./optimizing/agentic_strategies/agentic_strategies.md
+      - Retrieval:
+          - ./optimizing/advanced_retrieval/advanced_retrieval.md
+          - ./optimizing/advanced_retrieval/query_transformations.md
+      - Evaluation: ./optimizing/evaluation
+      - Fine-Tuning: ./optimizing/fine-tuning/fine-tuning.md
+      - ./optimizing/custom_modules.md
+      - ./optimizing/building_rag_from_scratch.md
+  - API Reference:
+      - ./api_reference/index.md
+      - Agents:
+          - ./api_reference/agent/index.md
+          - ./api_reference/agent/openai.md
+          - ./api_reference/agent/openai_legacy.md
+          - ./api_reference/agent/react.md
+      - Callbacks:
+          - ./api_reference/callbacks/aim.md
+          - ./api_reference/callbacks/argilla.md
+          - ./api_reference/callbacks/arize_phoenix.md
+          - ./api_reference/callbacks/deepeval.md
+          - ./api_reference/callbacks/honeyhive.md
+          - ./api_reference/callbacks/index.md
+          - ./api_reference/callbacks/langfuse.md
+          - ./api_reference/callbacks/llama_debug.md
+          - ./api_reference/callbacks/openinference.md
+          - ./api_reference/callbacks/promptlayer.md
+          - ./api_reference/callbacks/token_counter.md
+          - ./api_reference/callbacks/uptrain.md
+          - ./api_reference/callbacks/wandb.md
+      - Chat Engines:
+          - ./api_reference/chat_engines/condense_plus_context.md
+          - ./api_reference/chat_engines/condense_question.md
+          - ./api_reference/chat_engines/context.md
+          - ./api_reference/chat_engines/index.md
+          - ./api_reference/chat_engines/simple.md
+      - Embeddings:
+          - ./api_reference/embeddings/adapter.md
+          - ./api_reference/embeddings/anyscale.md
+          - ./api_reference/embeddings/azure_openai.md
+          - ./api_reference/embeddings/bedrock.md
+          - ./api_reference/embeddings/clarifai.md
+          - ./api_reference/embeddings/clip.md
+          - ./api_reference/embeddings/cohere.md
+          - ./api_reference/embeddings/dashscope.md
+          - ./api_reference/embeddings/elasticsearch.md
+          - ./api_reference/embeddings/fastembed.md
+          - ./api_reference/embeddings/fireworks.md
+          - ./api_reference/embeddings/gemini.md
+          - ./api_reference/embeddings/google.md
+          - ./api_reference/embeddings/gradient.md
+          - ./api_reference/embeddings/huggingface.md
+          - ./api_reference/embeddings/huggingface_optimum.md
+          - ./api_reference/embeddings/huggingface_optimum_intel.md
+          - ./api_reference/embeddings/index.md
+          - ./api_reference/embeddings/instructor.md
+          - ./api_reference/embeddings/jinaai.md
+          - ./api_reference/embeddings/langchain.md
+          - ./api_reference/embeddings/llamafile.md
+          - ./api_reference/embeddings/llm_rails.md
+          - ./api_reference/embeddings/mistralai.md
+          - ./api_reference/embeddings/nomic.md
+          - ./api_reference/embeddings/ollama.md
+          - ./api_reference/embeddings/openai.md
+          - ./api_reference/embeddings/premai.md
+          - ./api_reference/embeddings/sagemaker_endpoint.md
+          - ./api_reference/embeddings/text_embeddings_inference.md
+          - ./api_reference/embeddings/together.md
+          - ./api_reference/embeddings/vertex.md
+          - ./api_reference/embeddings/voyageai.md
+      - Evaluation:
+          - ./api_reference/evaluation/answer_relevancy.md
+          - ./api_reference/evaluation/context_relevancy.md
+          - ./api_reference/evaluation/correctness.md
+          - ./api_reference/evaluation/dataset_generation.md
+          - ./api_reference/evaluation/faithfullness.md
+          - ./api_reference/evaluation/guideline.md
+          - ./api_reference/evaluation/index.md
+          - ./api_reference/evaluation/metrics.md
+          - ./api_reference/evaluation/multi_modal.md
+          - ./api_reference/evaluation/pairwise_comparison.md
+          - ./api_reference/evaluation/query_response.md
+          - ./api_reference/evaluation/response.md
+          - ./api_reference/evaluation/retrieval.md
+          - ./api_reference/evaluation/semantic_similarity.md
+          - ./api_reference/evaluation/tonic_validate.md
+      - Indexes:
+          - ./api_reference/indices/colbert.md
+          - ./api_reference/indices/document_summary.md
+          - ./api_reference/indices/google.md
+          - ./api_reference/indices/index.md
+          - ./api_reference/indices/keyword.md
+          - ./api_reference/indices/knowledge_graph.md
+          - ./api_reference/indices/llama_cloud.md
+          - ./api_reference/indices/summary.md
+          - ./api_reference/indices/tree.md
+          - ./api_reference/indices/vectara.md
+          - ./api_reference/indices/vector.md
+          - ./api_reference/indices/zilliz.md
+      - Ingestion:
+          - ./api_reference/ingestion/index.md
+      - Instrumentation:
+          - ./api_reference/instrumentation/event_handlers.md
+          - ./api_reference/instrumentation/event_types.md
+          - ./api_reference/instrumentation/index.md
+          - ./api_reference/instrumentation/span_handlers.md
+          - ./api_reference/instrumentation/span_types.md
+      - LLMs:
+          - ./api_reference/llms/ai21.md
+          - ./api_reference/llms/anthropic.md
+          - ./api_reference/llms/anyscale.md
+          - ./api_reference/llms/azure_openai.md
+          - ./api_reference/llms/bedrock.md
+          - ./api_reference/llms/clarifai.md
+          - ./api_reference/llms/cohere.md
+          - ./api_reference/llms/custom_llm.md
+          - ./api_reference/llms/dashscope.md
+          - ./api_reference/llms/everlyai.md
+          - ./api_reference/llms/fireworks.md
+          - ./api_reference/llms/friendli.md
+          - ./api_reference/llms/gemini.md
+          - ./api_reference/llms/gradient.md
+          - ./api_reference/llms/groq.md
+          - ./api_reference/llms/huggingface.md
+          - ./api_reference/llms/index.md
+          - ./api_reference/llms/konko.md
+          - ./api_reference/llms/langchain.md
+          - ./api_reference/llms/litellm.md
+          - ./api_reference/llms/llama_api.md
+          - ./api_reference/llms/llama_cpp.md
+          - ./api_reference/llms/llamafile.md
+          - ./api_reference/llms/localai.md
+          - ./api_reference/llms/maritalk.md
+          - ./api_reference/llms/mistralai.md
+          - ./api_reference/llms/modelscope.md
+          - ./api_reference/llms/monsterapi.md
+          - ./api_reference/llms/mymagic.md
+          - ./api_reference/llms/neutrino.md
+          - ./api_reference/llms/nvidia_tensorrt.md
+          - ./api_reference/llms/nvidia_triton.md
+          - ./api_reference/llms/ollama.md
+          - ./api_reference/llms/openai.md
+          - ./api_reference/llms/openai_like.md
+          - ./api_reference/llms/openllm.md
+          - ./api_reference/llms/openrouter.md
+          - ./api_reference/llms/palm.md
+          - ./api_reference/llms/perplexity.md
+          - ./api_reference/llms/portkey.md
+          - ./api_reference/llms/predibase.md
+          - ./api_reference/llms/premai.md
+          - ./api_reference/llms/replicate.md
+          - ./api_reference/llms/rungpt.md
+          - ./api_reference/llms/sagemaker_endpoint.md
+          - ./api_reference/llms/solar.md
+          - ./api_reference/llms/together.md
+          - ./api_reference/llms/vertex.md
+          - ./api_reference/llms/vllm.md
+          - ./api_reference/llms/watsonx.md
+          - ./api_reference/llms/xinference.md
+      - Llama Datasets:
+          - ./api_reference/llama_dataset/index.md
+      - Llama Packs:
+          - ./api_reference/packs/agent_search_retriever.md
+          - ./api_reference/packs/agents_llm_compiler.md
+          - ./api_reference/packs/amazon_product_extraction.md
+          - ./api_reference/packs/arize_phoenix_query_engine.md
+          - ./api_reference/packs/auto_merging_retriever.md
+          - ./api_reference/packs/chroma_autoretrieval.md
+          - ./api_reference/packs/code_hierarchy.md
+          - ./api_reference/packs/cogniswitch_agent.md
+          - ./api_reference/packs/cohere_citation_chat.md
+          - ./api_reference/packs/corrective_rag.md
+          - ./api_reference/packs/deeplake_deepmemory_retriever.md
+          - ./api_reference/packs/deeplake_multimodal_retrieval.md
+          - ./api_reference/packs/dense_x_retrieval.md
+          - ./api_reference/packs/diff_private_simple_dataset.md
+          - ./api_reference/packs/docugami_kg_rag.md
+          - ./api_reference/packs/evaluator_benchmarker.md
+          - ./api_reference/packs/finchat.md
+          - ./api_reference/packs/fusion_retriever.md
+          - ./api_reference/packs/fuzzy_citation.md
+          - ./api_reference/packs/gmail_openai_agent.md
+          - ./api_reference/packs/gradio_agent_chat.md
+          - ./api_reference/packs/gradio_react_agent_chatbot.md
+          - ./api_reference/packs/index.md
+          - ./api_reference/packs/infer_retrieve_rerank.md
+          - ./api_reference/packs/koda_retriever.md
+          - ./api_reference/packs/llama_dataset_metadata.md
+          - ./api_reference/packs/llama_guard_moderator.md
+          - ./api_reference/packs/llava_completion.md
+          - ./api_reference/packs/multi_document_agents.md
+          - ./api_reference/packs/multi_tenancy_rag.md
+          - ./api_reference/packs/multidoc_autoretrieval.md
+          - ./api_reference/packs/nebulagraph_query_engine.md
+          - ./api_reference/packs/neo4j_query_engine.md
+          - ./api_reference/packs/node_parser_semantic_chunking.md
+          - ./api_reference/packs/ollama_query_engine.md
+          - ./api_reference/packs/panel_chatbot.md
+          - ./api_reference/packs/query_understanding_agent.md
+          - ./api_reference/packs/rag_cli_local.md
+          - ./api_reference/packs/rag_evaluator.md
+          - ./api_reference/packs/rag_fusion_query_pipeline.md
+          - ./api_reference/packs/ragatouille_retriever.md
+          - ./api_reference/packs/raptor.md
+          - ./api_reference/packs/recursive_retriever.md
+          - ./api_reference/packs/redis_ingestion_pipeline.md
+          - ./api_reference/packs/resume_screener.md
+          - ./api_reference/packs/retry_engine_weaviate.md
+          - ./api_reference/packs/searchain.md
+          - ./api_reference/packs/self_discover.md
+          - ./api_reference/packs/self_rag.md
+          - ./api_reference/packs/sentence_window_retriever.md
+          - ./api_reference/packs/snowflake_query_engine.md
+          - ./api_reference/packs/stock_market_data_query_engine.md
+          - ./api_reference/packs/streamlit_chatbot.md
+          - ./api_reference/packs/sub_question_weaviate.md
+          - ./api_reference/packs/subdoc_summary.md
+          - ./api_reference/packs/tables.md
+          - ./api_reference/packs/timescale_vector_autoretrieval.md
+          - ./api_reference/packs/trulens_eval_packs.md
+          - ./api_reference/packs/vanna.md
+          - ./api_reference/packs/vectara_rag.md
+          - ./api_reference/packs/voyage_query_engine.md
+          - ./api_reference/packs/zephyr_query_engine.md
+      - Memory:
+          - ./api_reference/memory/chat_memory_buffer.md
+          - ./api_reference/memory/index.md
+      - Metadata Extractors:
+          - ./api_reference/extractors/entity.md
+          - ./api_reference/extractors/index.md
+          - ./api_reference/extractors/keyword.md
+          - ./api_reference/extractors/marvin.md
+          - ./api_reference/extractors/pydantic.md
+          - ./api_reference/extractors/question.md
+          - ./api_reference/extractors/summary.md
+          - ./api_reference/extractors/title.md
+      - Multi-Modal LLMs:
+          - ./api_reference/multi_modal_llms/anthropic.md
+          - ./api_reference/multi_modal_llms/azure_openai.md
+          - ./api_reference/multi_modal_llms/dashscope.md
+          - ./api_reference/multi_modal_llms/gemini.md
+          - ./api_reference/multi_modal_llms/index.md
+          - ./api_reference/multi_modal_llms/ollama.md
+          - ./api_reference/multi_modal_llms/openai.md
+          - ./api_reference/multi_modal_llms/replicate.md
+      - Node Parsers & Text Splitters:
+          - ./api_reference/node_parsers/code.md
+          - ./api_reference/node_parsers/hierarchical.md
+          - ./api_reference/node_parsers/html.md
+          - ./api_reference/node_parsers/index.md
+          - ./api_reference/node_parsers/json.md
+          - ./api_reference/node_parsers/langchain.md
+          - ./api_reference/node_parsers/markdown.md
+          - ./api_reference/node_parsers/markdown_element.md
+          - ./api_reference/node_parsers/semantic_splitter.md
+          - ./api_reference/node_parsers/sentence_splitter.md
+          - ./api_reference/node_parsers/sentence_window.md
+          - ./api_reference/node_parsers/token_text_splitter.md
+          - ./api_reference/node_parsers/unstructured_element.md
+      - Node Postprocessors:
+          - ./api_reference/postprocessor/NER_PII.md
+          - ./api_reference/postprocessor/PII.md
+          - ./api_reference/postprocessor/auto_prev_next.md
+          - ./api_reference/postprocessor/cohere_rerank.md
+          - ./api_reference/postprocessor/colbert_rerank.md
+          - ./api_reference/postprocessor/embedding_recency.md
+          - ./api_reference/postprocessor/fixed_recency.md
+          - ./api_reference/postprocessor/flag_embedding_reranker.md
+          - ./api_reference/postprocessor/index.md
+          - ./api_reference/postprocessor/jinaai_rerank.md
+          - ./api_reference/postprocessor/keyword.md
+          - ./api_reference/postprocessor/llm_rerank.md
+          - ./api_reference/postprocessor/long_context_reorder.md
+          - ./api_reference/postprocessor/longllmlingua.md
+          - ./api_reference/postprocessor/metadata_replacement.md
+          - ./api_reference/postprocessor/presidio.md
+          - ./api_reference/postprocessor/prev_next.md
+          - ./api_reference/postprocessor/rankgpt_rerank.md
+          - ./api_reference/postprocessor/sbert_rerank.md
+          - ./api_reference/postprocessor/sentence_optimizer.md
+          - ./api_reference/postprocessor/similarity.md
+          - ./api_reference/postprocessor/time_weighted.md
+      - Object Stores:
+          - ./api_reference/objects/index.md
+      - Output Parsers:
+          - ./api_reference/output_parsers/guardrails.md
+          - ./api_reference/output_parsers/index.md
+          - ./api_reference/output_parsers/langchain.md
+          - ./api_reference/output_parsers/pydantic.md
+          - ./api_reference/output_parsers/selection.md
+      - Programs:
+          - ./api_reference/program/evaporate.md
+          - ./api_reference/program/guidance.md
+          - ./api_reference/program/index.md
+          - ./api_reference/program/llm_text_completion.md
+          - ./api_reference/program/lmformatenforcer.md
+          - ./api_reference/program/multi_modal.md
+          - ./api_reference/program/openai.md
+      - Prompts:
+          - ./api_reference/prompts/index.md
+      - Query Engines:
+          - ./api_reference/query_engine/FLARE.md
+          - ./api_reference/query_engine/JSONalayze.md
+          - ./api_reference/query_engine/NL_SQL_table.md
+          - ./api_reference/query_engine/PGVector_SQL.md
+          - ./api_reference/query_engine/SQL_join.md
+          - ./api_reference/query_engine/SQL_table_retriever.md
+          - ./api_reference/query_engine/citation.md
+          - ./api_reference/query_engine/cogniswitch.md
+          - ./api_reference/query_engine/custom.md
+          - ./api_reference/query_engine/index.md
+          - ./api_reference/query_engine/knowledge_graph.md
+          - ./api_reference/query_engine/multi_step.md
+          - ./api_reference/query_engine/pandas.md
+          - ./api_reference/query_engine/retriever.md
+          - ./api_reference/query_engine/retriever_router.md
+          - ./api_reference/query_engine/retry.md
+          - ./api_reference/query_engine/router.md
+          - ./api_reference/query_engine/simple_multi_modal.md
+          - ./api_reference/query_engine/sub_question.md
+          - ./api_reference/query_engine/tool_retriever_router.md
+          - ./api_reference/query_engine/transform.md
+      - Query Pipeline:
+          - ./api_reference/query_pipeline/agent.md
+          - ./api_reference/query_pipeline/arg_pack.md
+          - ./api_reference/query_pipeline/custom.md
+          - ./api_reference/query_pipeline/function.md
+          - ./api_reference/query_pipeline/index.md
+          - ./api_reference/query_pipeline/input.md
+          - ./api_reference/query_pipeline/llm.md
+          - ./api_reference/query_pipeline/multi_modal.md
+          - ./api_reference/query_pipeline/object.md
+          - ./api_reference/query_pipeline/output_parser.md
+          - ./api_reference/query_pipeline/postprocessor.md
+          - ./api_reference/query_pipeline/prompt.md
+          - ./api_reference/query_pipeline/query_engine.md
+          - ./api_reference/query_pipeline/query_transform.md
+          - ./api_reference/query_pipeline/retriever.md
+          - ./api_reference/query_pipeline/router.md
+          - ./api_reference/query_pipeline/synthesizer.md
+          - ./api_reference/query_pipeline/tool_runner.md
+      - Question Generators:
+          - ./api_reference/question_gen/guidance.md
+          - ./api_reference/question_gen/index.md
+          - ./api_reference/question_gen/llm_question_gen.md
+          - ./api_reference/question_gen/openai.md
+      - Readers:
+          - ./api_reference/readers/agent_search.md
+          - ./api_reference/readers/airbyte_cdk.md
+          - ./api_reference/readers/airbyte_gong.md
+          - ./api_reference/readers/airbyte_hubspot.md
+          - ./api_reference/readers/airbyte_salesforce.md
+          - ./api_reference/readers/airbyte_shopify.md
+          - ./api_reference/readers/airbyte_stripe.md
+          - ./api_reference/readers/airbyte_typeform.md
+          - ./api_reference/readers/airbyte_zendesk_support.md
+          - ./api_reference/readers/airtable.md
+          - ./api_reference/readers/apify.md
+          - ./api_reference/readers/arango_db.md
+          - ./api_reference/readers/arxiv.md
+          - ./api_reference/readers/asana.md
+          - ./api_reference/readers/assemblyai.md
+          - ./api_reference/readers/astra_db.md
+          - ./api_reference/readers/athena.md
+          - ./api_reference/readers/awadb.md
+          - ./api_reference/readers/azcognitive_search.md
+          - ./api_reference/readers/azstorage_blob.md
+          - ./api_reference/readers/bagel.md
+          - ./api_reference/readers/bilibili.md
+          - ./api_reference/readers/bitbucket.md
+          - ./api_reference/readers/boarddocs.md
+          - ./api_reference/readers/chatgpt_plugin.md
+          - ./api_reference/readers/chroma.md
+          - ./api_reference/readers/clickhouse.md
+          - ./api_reference/readers/confluence.md
+          - ./api_reference/readers/couchbase.md
+          - ./api_reference/readers/couchdb.md
+          - ./api_reference/readers/dad_jokes.md
+          - ./api_reference/readers/dashvector.md
+          - ./api_reference/readers/database.md
+          - ./api_reference/readers/deeplake.md
+          - ./api_reference/readers/discord.md
+          - ./api_reference/readers/docstring_walker.md
+          - ./api_reference/readers/docugami.md
+          - ./api_reference/readers/earnings_call_transcript.md
+          - ./api_reference/readers/elasticsearch.md
+          - ./api_reference/readers/faiss.md
+          - ./api_reference/readers/feedly_rss.md
+          - ./api_reference/readers/feishu_docs.md
+          - ./api_reference/readers/feishu_wiki.md
+          - ./api_reference/readers/file.md
+          - ./api_reference/readers/firebase_realtimedb.md
+          - ./api_reference/readers/firestore.md
+          - ./api_reference/readers/genius.md
+          - ./api_reference/readers/github.md
+          - ./api_reference/readers/google.md
+          - ./api_reference/readers/gpt_repo.md
+          - ./api_reference/readers/graphdb_cypher.md
+          - ./api_reference/readers/graphql.md
+          - ./api_reference/readers/guru.md
+          - ./api_reference/readers/hatena_blog.md
+          - ./api_reference/readers/hive.md
+          - ./api_reference/readers/hubspot.md
+          - ./api_reference/readers/huggingface_fs.md
+          - ./api_reference/readers/hwp.md
+          - ./api_reference/readers/imdb_review.md
+          - ./api_reference/readers/index.md
+          - ./api_reference/readers/intercom.md
+          - ./api_reference/readers/jaguar.md
+          - ./api_reference/readers/jira.md
+          - ./api_reference/readers/joplin.md
+          - ./api_reference/readers/json.md
+          - ./api_reference/readers/kaltura_esearch.md
+          - ./api_reference/readers/kibela.md
+          - ./api_reference/readers/lilac.md
+          - ./api_reference/readers/linear.md
+          - ./api_reference/readers/llama_parse.md
+          - ./api_reference/readers/macrometa_gdn.md
+          - ./api_reference/readers/make_com.md
+          - ./api_reference/readers/mangadex.md
+          - ./api_reference/readers/mangoapps_guides.md
+          - ./api_reference/readers/maps.md
+          - ./api_reference/readers/mbox.md
+          - ./api_reference/readers/memos.md
+          - ./api_reference/readers/metal.md
+          - ./api_reference/readers/microsoft_onedrive.md
+          - ./api_reference/readers/microsoft_outlook.md
+          - ./api_reference/readers/microsoft_sharepoint.md
+          - ./api_reference/readers/milvus.md
+          - ./api_reference/readers/minio.md
+          - ./api_reference/readers/mondaydotcom.md
+          - ./api_reference/readers/mongodb.md
+          - ./api_reference/readers/myscale.md
+          - ./api_reference/readers/notion.md
+          - ./api_reference/readers/nougat_ocr.md
+          - ./api_reference/readers/obsidian.md
+          - ./api_reference/readers/openalex.md
+          - ./api_reference/readers/opendal.md
+          - ./api_reference/readers/opensearch.md
+          - ./api_reference/readers/pandas_ai.md
+          - ./api_reference/readers/papers.md
+          - ./api_reference/readers/patentsview.md
+          - ./api_reference/readers/pathway.md
+          - ./api_reference/readers/pdb.md
+          - ./api_reference/readers/pdf_table.md
+          - ./api_reference/readers/pinecone.md
+          - ./api_reference/readers/preprocess.md
+          - ./api_reference/readers/psychic.md
+          - ./api_reference/readers/qdrant.md
+          - ./api_reference/readers/rayyan.md
+          - ./api_reference/readers/readwise.md
+          - ./api_reference/readers/reddit.md
+          - ./api_reference/readers/remote.md
+          - ./api_reference/readers/remote_depth.md
+          - ./api_reference/readers/s3.md
+          - ./api_reference/readers/sec_filings.md
+          - ./api_reference/readers/semanticscholar.md
+          - ./api_reference/readers/simple_directory_reader.md
+          - ./api_reference/readers/singlestore.md
+          - ./api_reference/readers/slack.md
+          - ./api_reference/readers/smart_pdf_loader.md
+          - ./api_reference/readers/snowflake.md
+          - ./api_reference/readers/snscrape_twitter.md
+          - ./api_reference/readers/spotify.md
+          - ./api_reference/readers/stackoverflow.md
+          - ./api_reference/readers/steamship.md
+          - ./api_reference/readers/string_iterable.md
+          - ./api_reference/readers/stripe_docs.md
+          - ./api_reference/readers/telegram.md
+          - ./api_reference/readers/trello.md
+          - ./api_reference/readers/twitter.md
+          - ./api_reference/readers/txtai.md
+          - ./api_reference/readers/weather.md
+          - ./api_reference/readers/weaviate.md
+          - ./api_reference/readers/web.md
+          - ./api_reference/readers/whatsapp.md
+          - ./api_reference/readers/wikipedia.md
+          - ./api_reference/readers/wordlift.md
+          - ./api_reference/readers/wordpress.md
+          - ./api_reference/readers/youtube_transcript.md
+          - ./api_reference/readers/zendesk.md
+          - ./api_reference/readers/zep.md
+          - ./api_reference/readers/zulip.md
+      - Response Synthesizers:
+          - ./api_reference/response_synthesizers/accumulate.md
+          - ./api_reference/response_synthesizers/compact_accumulate.md
+          - ./api_reference/response_synthesizers/compact_and_refine.md
+          - ./api_reference/response_synthesizers/generation.md
+          - ./api_reference/response_synthesizers/google.md
+          - ./api_reference/response_synthesizers/index.md
+          - ./api_reference/response_synthesizers/refine.md
+          - ./api_reference/response_synthesizers/simple_summarize.md
+          - ./api_reference/response_synthesizers/tree_summarize.md
+      - Retrievers:
+          - ./api_reference/retrievers/auto_merging.md
+          - ./api_reference/retrievers/bm25.md
+          - ./api_reference/retrievers/index.md
+          - ./api_reference/retrievers/keyword.md
+          - ./api_reference/retrievers/knowledge_graph.md
+          - ./api_reference/retrievers/pathway.md
+          - ./api_reference/retrievers/query_fusion.md
+          - ./api_reference/retrievers/recursive.md
+          - ./api_reference/retrievers/router.md
+          - ./api_reference/retrievers/sql.md
+          - ./api_reference/retrievers/summary.md
+          - ./api_reference/retrievers/transform.md
+          - ./api_reference/retrievers/tree.md
+          - ./api_reference/retrievers/vector.md
+          - ./api_reference/retrievers/videodb.md
+          - ./api_reference/retrievers/you.md
+      - Schema:
+          - ./api_reference/schema/index.md
+      - Storage:
+          - Chat Store:
+              - ./api_reference/storage/chat_store/index.md
+              - ./api_reference/storage/chat_store/redis.md
+              - ./api_reference/storage/chat_store/simple.md
+          - Docstore:
+              - ./api_reference/storage/docstore/dynamodb.md
+              - ./api_reference/storage/docstore/firestore.md
+              - ./api_reference/storage/docstore/index.md
+              - ./api_reference/storage/docstore/mongodb.md
+              - ./api_reference/storage/docstore/postgres.md
+              - ./api_reference/storage/docstore/redis.md
+              - ./api_reference/storage/docstore/simple.md
+          - Graph Stores:
+              - ./api_reference/storage/graph_stores/falkordb.md
+              - ./api_reference/storage/graph_stores/index.md
+              - ./api_reference/storage/graph_stores/kuzu.md
+              - ./api_reference/storage/graph_stores/nebula.md
+              - ./api_reference/storage/graph_stores/neo4j.md
+              - ./api_reference/storage/graph_stores/simple.md
+          - Index Store:
+              - ./api_reference/storage/index_store/dynamodb.md
+              - ./api_reference/storage/index_store/firestore.md
+              - ./api_reference/storage/index_store/index.md
+              - ./api_reference/storage/index_store/mongodb.md
+              - ./api_reference/storage/index_store/postgres.md
+              - ./api_reference/storage/index_store/redis.md
+              - ./api_reference/storage/index_store/simple.md
+          - Kvstore:
+              - ./api_reference/storage/kvstore/dynamodb.md
+              - ./api_reference/storage/kvstore/elasticsearch.md
+              - ./api_reference/storage/kvstore/firestore.md
+              - ./api_reference/storage/kvstore/index.md
+              - ./api_reference/storage/kvstore/mongodb.md
+              - ./api_reference/storage/kvstore/postgres.md
+              - ./api_reference/storage/kvstore/redis.md
+              - ./api_reference/storage/kvstore/s3.md
+              - ./api_reference/storage/kvstore/simple.md
+          - Storage:
+              - ./api_reference/storage/storage_context.md
+          - Vector Store:
+              - ./api_reference/storage/vector_store/astra_db.md
+              - ./api_reference/storage/vector_store/awadb.md
+              - ./api_reference/storage/vector_store/azureaisearch.md
+              - ./api_reference/storage/vector_store/azurecosmosmongo.md
+              - ./api_reference/storage/vector_store/bagel.md
+              - ./api_reference/storage/vector_store/baiduvectordb.md
+              - ./api_reference/storage/vector_store/cassandra.md
+              - ./api_reference/storage/vector_store/chatgpt_plugin.md
+              - ./api_reference/storage/vector_store/chroma.md
+              - ./api_reference/storage/vector_store/clickhouse.md
+              - ./api_reference/storage/vector_store/dashvector.md
+              - ./api_reference/storage/vector_store/databricks.md
+              - ./api_reference/storage/vector_store/deeplake.md
+              - ./api_reference/storage/vector_store/docarray.md
+              - ./api_reference/storage/vector_store/duckdb.md
+              - ./api_reference/storage/vector_store/dynamodb.md
+              - ./api_reference/storage/vector_store/elasticsearch.md
+              - ./api_reference/storage/vector_store/epsilla.md
+              - ./api_reference/storage/vector_store/faiss.md
+              - ./api_reference/storage/vector_store/google.md
+              - ./api_reference/storage/vector_store/index.md
+              - ./api_reference/storage/vector_store/jaguar.md
+              - ./api_reference/storage/vector_store/lancedb.md
+              - ./api_reference/storage/vector_store/lantern.md
+              - ./api_reference/storage/vector_store/metal.md
+              - ./api_reference/storage/vector_store/milvus.md
+              - ./api_reference/storage/vector_store/mongodb.md
+              - ./api_reference/storage/vector_store/myscale.md
+              - ./api_reference/storage/vector_store/neo4jvector.md
+              - ./api_reference/storage/vector_store/opensearch.md
+              - ./api_reference/storage/vector_store/pgvecto_rs.md
+              - ./api_reference/storage/vector_store/pinecone.md
+              - ./api_reference/storage/vector_store/postgres.md
+              - ./api_reference/storage/vector_store/qdrant.md
+              - ./api_reference/storage/vector_store/redis.md
+              - ./api_reference/storage/vector_store/rocksetdb.md
+              - ./api_reference/storage/vector_store/simple.md
+              - ./api_reference/storage/vector_store/singlestoredb.md
+              - ./api_reference/storage/vector_store/supabase.md
+              - ./api_reference/storage/vector_store/tair.md
+              - ./api_reference/storage/vector_store/tencentvectordb.md
+              - ./api_reference/storage/vector_store/tidbvector.md
+              - ./api_reference/storage/vector_store/timescalevector.md
+              - ./api_reference/storage/vector_store/txtai.md
+              - ./api_reference/storage/vector_store/typesense.md
+              - ./api_reference/storage/vector_store/upstash.md
+              - ./api_reference/storage/vector_store/weaviate.md
+              - ./api_reference/storage/vector_store/zep.md
+      - Tools:
+          - ./api_reference/tools/arxiv.md
+          - ./api_reference/tools/azure_cv.md
+          - ./api_reference/tools/azure_speech.md
+          - ./api_reference/tools/azure_translate.md
+          - ./api_reference/tools/bing_search.md
+          - ./api_reference/tools/brave_search.md
+          - ./api_reference/tools/chatgpt_plugin.md
+          - ./api_reference/tools/code_interpreter.md
+          - ./api_reference/tools/cogniswitch.md
+          - ./api_reference/tools/database.md
+          - ./api_reference/tools/duckduckgo.md
+          - ./api_reference/tools/exa.md
+          - ./api_reference/tools/finance.md
+          - ./api_reference/tools/function.md
+          - ./api_reference/tools/google.md
+          - ./api_reference/tools/graphql.md
+          - ./api_reference/tools/index.md
+          - ./api_reference/tools/ionic_shopping.md
+          - ./api_reference/tools/load_and_search.md
+          - ./api_reference/tools/metaphor.md
+          - ./api_reference/tools/multion.md
+          - ./api_reference/tools/neo4j.md
+          - ./api_reference/tools/notion.md
+          - ./api_reference/tools/ondemand_loader.md
+          - ./api_reference/tools/openai.md
+          - ./api_reference/tools/openapi.md
+          - ./api_reference/tools/passio_nutrition_ai.md
+          - ./api_reference/tools/playgrounds.md
+          - ./api_reference/tools/python_file.md
+          - ./api_reference/tools/query_engine.md
+          - ./api_reference/tools/query_plan.md
+          - ./api_reference/tools/requests.md
+          - ./api_reference/tools/retriever.md
+          - ./api_reference/tools/salesforce.md
+          - ./api_reference/tools/shopify.md
+          - ./api_reference/tools/slack.md
+          - ./api_reference/tools/tavily_research.md
+          - ./api_reference/tools/text_to_image.md
+          - ./api_reference/tools/tool_spec.md
+          - ./api_reference/tools/vector_db.md
+          - ./api_reference/tools/waii.md
+          - ./api_reference/tools/weather.md
+          - ./api_reference/tools/wikipedia.md
+          - ./api_reference/tools/wolfram_alpha.md
+          - ./api_reference/tools/yahoo_finance.md
+          - ./api_reference/tools/yelp.md
+          - ./api_reference/tools/zapier.md
+  - Open-Source Community:
+      - Integrations: ./community/integrations.md
+      - Full Stack Projects: ./community/full_stack_projects.md
+      - Community FAQ: ./community/faq
+      - LlamaPacks: ./community/llama_packs/index.md
+      - Contributing:
+          - Code: ./CONTRIBUTING.md
+          - Docs: ./DOCS_README.md
+      - Changelog: ./CHANGELOG.md
+      - Presentations: ./presentations/past_presentations.md
+      - Upgrading to v0.10.x: ./getting_started/v0_10_0_migration.md
+      - Deprecated Terms: ./changes/deprecated_terms.md
+plugins:
+  - search
+  - include_dir_to_nav
+  - mkdocs-jupyter:
+      execute: false
+  - mkdocstrings:
+      handlers:
+        python:
+          options:
+            docstring_options:
+              ignore_init_summary: true
+            docstring_style: google
+            filters:
+              - "!^_"
+              - "!^__init__"
+            members_order: source
+            merge_init_into_class: false
+            separate_signature: true
+            show_root_full_path: true
+            show_root_heading: false
+            show_root_toc_entry: false
+            show_signature_annotations: true
+            signature_crossrefs: true
+          paths:
+            - ../llama-index-core
+            - ../llama-index-packs/llama-index-packs-retry-engine-weaviate
+            - ../llama-index-packs/llama-index-packs-llava-completion
+            - ../llama-index-packs/llama-index-packs-zephyr-query-engine
+            - ../llama-index-packs/llama-index-packs-timescale-vector-autoretrieval
+            - ../llama-index-packs/llama-index-packs-corrective-rag
+            - ../llama-index-packs/llama-index-packs-multi-document-agents
+            - ../llama-index-packs/llama-index-packs-multidoc-autoretrieval
+            - ../llama-index-packs/llama-index-packs-gmail-openai-agent
+            - ../llama-index-packs/llama-index-packs-neo4j-query-engine
+            - ../llama-index-packs/llama-index-packs-chroma-autoretrieval
+            - ../llama-index-packs/llama-index-packs-resume-screener
+            - ../llama-index-packs/llama-index-packs-trulens-eval-packs
+            - ../llama-index-packs/llama-index-packs-evaluator-benchmarker
+            - ../llama-index-packs/llama-index-packs-vanna
+            - ../llama-index-packs/llama-index-packs-rag-fusion-query-pipeline
+            - ../llama-index-packs/llama-index-packs-llama-guard-moderator
+            - ../llama-index-packs/llama-index-packs-snowflake-query-engine
+            - ../llama-index-packs/llama-index-packs-self-rag
+            - ../llama-index-packs/llama-index-packs-self-discover
+            - ../llama-index-packs/llama-index-packs-llama-dataset-metadata
+            - ../llama-index-packs/llama-index-packs-stock-market-data-query-engine
+            - ../llama-index-packs/llama-index-packs-rag-evaluator
+            - ../llama-index-packs/llama-index-packs-arize-phoenix-query-engine
+            - ../llama-index-packs/llama-index-packs-panel-chatbot
+            - ../llama-index-packs/llama-index-packs-rag-cli-local
+            - ../llama-index-packs/llama-index-packs-multi-tenancy-rag
+            - ../llama-index-packs/llama-index-packs-streamlit-chatbot
+            - ../llama-index-packs/llama-index-packs-vectara-rag
+            - ../llama-index-packs/llama-index-packs-tables
+            - ../llama-index-packs/llama-index-packs-node-parser-semantic-chunking
+            - ../llama-index-packs/llama-index-packs-redis-ingestion-pipeline
+            - ../llama-index-packs/llama-index-packs-dense-x-retrieval
+            - ../llama-index-packs/llama-index-packs-auto-merging-retriever
+            - ../llama-index-packs/llama-index-packs-agents-llm-compiler
+            - ../llama-index-packs/llama-index-packs-gradio-react-agent-chatbot
+            - ../llama-index-packs/llama-index-packs-sub-question-weaviate
+            - ../llama-index-packs/llama-index-packs-deeplake-deepmemory-retriever
+            - ../llama-index-packs/llama-index-packs-nebulagraph-query-engine
+            - ../llama-index-packs/llama-index-packs-voyage-query-engine
+            - ../llama-index-packs/llama-index-packs-infer-retrieve-rerank
+            - ../llama-index-packs/llama-index-packs-subdoc-summary
+            - ../llama-index-packs/llama-index-packs-sentence-window-retriever
+            - ../llama-index-packs/llama-index-packs-recursive-retriever
+            - ../llama-index-packs/llama-index-packs-amazon-product-extraction
+            - ../llama-index-packs/llama-index-packs-cogniswitch-agent
+            - ../llama-index-packs/llama-index-packs-ollama-query-engine
+            - ../llama-index-packs/llama-index-packs-ragatouille-retriever
+            - ../llama-index-packs/llama-index-packs-fuzzy-citation
+            - ../llama-index-packs/llama-index-packs-deeplake-multimodal-retrieval
+            - ../llama-index-packs/llama-index-packs-gradio-agent-chat
+            - ../llama-index-packs/llama-index-packs-agent-search-retriever
+            - ../llama-index-packs/llama-index-packs-fusion-retriever
+            - ../llama-index-integrations/vector_stores/llama-index-vector-stores-singlestoredb
+            - ../llama-index-integrations/vector_stores/llama-index-vector-stores-qdrant
+            - ../llama-index-integrations/vector_stores/llama-index-vector-stores-pinecone
+            - ../llama-index-integrations/vector_stores/llama-index-vector-stores-duckdb
+            - ../llama-index-integrations/vector_stores/llama-index-vector-stores-supabase
+            - ../llama-index-integrations/vector_stores/llama-index-vector-stores-upstash
+            - ../llama-index-integrations/vector_stores/llama-index-vector-stores-astra
+            - ../llama-index-integrations/vector_stores/llama-index-vector-stores-lancedb
+            - ../llama-index-integrations/vector_stores/llama-index-vector-stores-elasticsearch
+            - ../llama-index-integrations/vector_stores/llama-index-vector-stores-postgres
+            - ../llama-index-integrations/vector_stores/llama-index-vector-stores-cassandra
+            - ../llama-index-integrations/vector_stores/llama-index-vector-stores-zep
+            - ../llama-index-integrations/vector_stores/llama-index-vector-stores-rocksetdb
+            - ../llama-index-integrations/vector_stores/llama-index-vector-stores-myscale
+            - ../llama-index-integrations/vector_stores/llama-index-vector-stores-tencentvectordb
+            - ../llama-index-integrations/vector_stores/llama-index-vector-stores-milvus
+            - ../llama-index-integrations/vector_stores/llama-index-vector-stores-neo4jvector
+            - ../llama-index-integrations/vector_stores/llama-index-vector-stores-deeplake
+            - ../llama-index-integrations/vector_stores/llama-index-vector-stores-weaviate
+            - ../llama-index-integrations/vector_stores/llama-index-vector-stores-timescalevector
+            - ../llama-index-integrations/vector_stores/llama-index-vector-stores-dashvector
+            - ../llama-index-integrations/vector_stores/llama-index-vector-stores-jaguar
+            - ../llama-index-integrations/vector_stores/llama-index-vector-stores-faiss
+            - ../llama-index-integrations/vector_stores/llama-index-vector-stores-azureaisearch
+            - ../llama-index-integrations/vector_stores/llama-index-vector-stores-mongodb
+            - ../llama-index-integrations/vector_stores/llama-index-vector-stores-chroma
+            - ../llama-index-integrations/vector_stores/llama-index-vector-stores-bagel
+            - ../llama-index-integrations/vector_stores/llama-index-vector-stores-clickhouse
+            - ../llama-index-integrations/vector_stores/llama-index-vector-stores-txtai
+            - ../llama-index-integrations/vector_stores/llama-index-vector-stores-epsilla
+            - ../llama-index-integrations/vector_stores/llama-index-vector-stores-lantern
+            - ../llama-index-integrations/vector_stores/llama-index-vector-stores-awadb
+            - ../llama-index-integrations/vector_stores/llama-index-vector-stores-azurecosmosmongo
+            - ../llama-index-integrations/vector_stores/llama-index-vector-stores-typesense
+            - ../llama-index-integrations/vector_stores/llama-index-vector-stores-pgvecto-rs
+            - ../llama-index-integrations/vector_stores/llama-index-vector-stores-opensearch
+            - ../llama-index-integrations/vector_stores/llama-index-vector-stores-docarray
+            - ../llama-index-integrations/vector_stores/llama-index-vector-stores-dynamodb
+            - ../llama-index-integrations/vector_stores/llama-index-vector-stores-chatgpt-plugin
+            - ../llama-index-integrations/vector_stores/llama-index-vector-stores-tair
+            - ../llama-index-integrations/vector_stores/llama-index-vector-stores-redis
+            - ../llama-index-integrations/vector_stores/llama-index-vector-stores-google
+            - ../llama-index-integrations/vector_stores/llama-index-vector-stores-metal
+            - ../llama-index-integrations/retrievers/llama-index-retrievers-pathway
+            - ../llama-index-integrations/retrievers/llama-index-retrievers-bm25
+            - ../llama-index-integrations/retrievers/llama-index-retrievers-you
+            - ../llama-index-integrations/indices/llama-index-indices-managed-zilliz
+            - ../llama-index-integrations/indices/llama-index-indices-managed-llama-cloud
+            - ../llama-index-integrations/indices/llama-index-indices-managed-colbert
+            - ../llama-index-integrations/indices/llama-index-indices-managed-vectara
+            - ../llama-index-integrations/indices/llama-index-indices-managed-google
+            - ../llama-index-integrations/tools/llama-index-tools-salesforce
+            - ../llama-index-integrations/tools/llama-index-tools-python-file
+            - ../llama-index-integrations/tools/llama-index-tools-ionic-shopping
+            - ../llama-index-integrations/tools/llama-index-tools-text-to-image
+            - ../llama-index-integrations/tools/llama-index-tools-openapi
+            - ../llama-index-integrations/tools/llama-index-tools-shopify
+            - ../llama-index-integrations/tools/llama-index-tools-metaphor
+            - ../llama-index-integrations/tools/llama-index-tools-zapier
+            - ../llama-index-integrations/tools/llama-index-tools-wikipedia
+            - ../llama-index-integrations/tools/llama-index-tools-google
+            - ../llama-index-integrations/tools/llama-index-tools-azure-translate
+            - ../llama-index-integrations/tools/llama-index-tools-multion
+            - ../llama-index-integrations/tools/llama-index-tools-database
+            - ../llama-index-integrations/tools/llama-index-tools-chatgpt-plugin
+            - ../llama-index-integrations/tools/llama-index-tools-neo4j
+            - ../llama-index-integrations/tools/llama-index-tools-bing-search
+            - ../llama-index-integrations/tools/llama-index-tools-yahoo-finance
+            - ../llama-index-integrations/tools/llama-index-tools-exa
+            - ../llama-index-integrations/tools/llama-index-tools-cogniswitch
+            - ../llama-index-integrations/tools/llama-index-tools-azure-cv
+            - ../llama-index-integrations/tools/llama-index-tools-notion
+            - ../llama-index-integrations/tools/llama-index-tools-yelp
+            - ../llama-index-integrations/tools/llama-index-tools-weather
+            - ../llama-index-integrations/tools/llama-index-tools-azure-speech
+            - ../llama-index-integrations/tools/llama-index-tools-wolfram-alpha
+            - ../llama-index-integrations/tools/llama-index-tools-slack
+            - ../llama-index-integrations/tools/llama-index-tools-tavily-research
+            - ../llama-index-integrations/tools/llama-index-tools-arxiv
+            - ../llama-index-integrations/tools/llama-index-tools-vector-db
+            - ../llama-index-integrations/tools/llama-index-tools-code-interpreter
+            - ../llama-index-integrations/tools/llama-index-tools-waii
+            - ../llama-index-integrations/tools/llama-index-tools-requests
+            - ../llama-index-integrations/tools/llama-index-tools-openai
+            - ../llama-index-integrations/tools/llama-index-tools-graphql
+            - ../llama-index-integrations/tools/llama-index-tools-playgrounds
+            - ../llama-index-integrations/embeddings/llama-index-embeddings-clip
+            - ../llama-index-integrations/embeddings/llama-index-embeddings-anyscale
+            - ../llama-index-integrations/embeddings/llama-index-embeddings-llm-rails
+            - ../llama-index-integrations/embeddings/llama-index-embeddings-adapter
+            - ../llama-index-integrations/embeddings/llama-index-embeddings-together
+            - ../llama-index-integrations/embeddings/llama-index-embeddings-voyageai
+            - ../llama-index-integrations/embeddings/llama-index-embeddings-gradient
+            - ../llama-index-integrations/embeddings/llama-index-embeddings-dashscope
+            - ../llama-index-integrations/embeddings/llama-index-embeddings-huggingface
+            - ../llama-index-integrations/embeddings/llama-index-embeddings-ollama
+            - ../llama-index-integrations/embeddings/llama-index-embeddings-sagemaker-endpoint
+            - ../llama-index-integrations/embeddings/llama-index-embeddings-openai
+            - ../llama-index-integrations/embeddings/llama-index-embeddings-cohere
+            - ../llama-index-integrations/embeddings/llama-index-embeddings-huggingface-optimum-intel
+            - ../llama-index-integrations/embeddings/llama-index-embeddings-jinaai
+            - ../llama-index-integrations/embeddings/llama-index-embeddings-nomic
+            - ../llama-index-integrations/embeddings/llama-index-embeddings-gemini
+            - ../llama-index-integrations/embeddings/llama-index-embeddings-fastembed
+            - ../llama-index-integrations/embeddings/llama-index-embeddings-fireworks
+            - ../llama-index-integrations/embeddings/llama-index-embeddings-instructor
+            - ../llama-index-integrations/embeddings/llama-index-embeddings-huggingface-optimum
+            - ../llama-index-integrations/embeddings/llama-index-embeddings-langchain
+            - ../llama-index-integrations/embeddings/llama-index-embeddings-google
+            - ../llama-index-integrations/embeddings/llama-index-embeddings-mistralai
+            - ../llama-index-integrations/embeddings/llama-index-embeddings-bedrock
+            - ../llama-index-integrations/embeddings/llama-index-embeddings-clarifai
+            - ../llama-index-integrations/embeddings/llama-index-embeddings-elasticsearch
+            - ../llama-index-integrations/embeddings/llama-index-embeddings-azure-openai
+            - ../llama-index-integrations/embeddings/llama-index-embeddings-text-embeddings-inference
+            - ../llama-index-integrations/callbacks/llama-index-callbacks-uptrain
+            - ../llama-index-integrations/callbacks/llama-index-callbacks-deepeval
+            - ../llama-index-integrations/callbacks/llama-index-callbacks-openinference
+            - ../llama-index-integrations/callbacks/llama-index-callbacks-wandb
+            - ../llama-index-integrations/callbacks/llama-index-callbacks-argilla
+            - ../llama-index-integrations/callbacks/llama-index-callbacks-honeyhive
+            - ../llama-index-integrations/callbacks/llama-index-callbacks-arize-phoenix
+            - ../llama-index-integrations/callbacks/llama-index-callbacks-aim
+            - ../llama-index-integrations/callbacks/llama-index-callbacks-promptlayer
+            - ../llama-index-integrations/postprocessor/llama-index-postprocessor-colbert-rerank
+            - ../llama-index-integrations/postprocessor/llama-index-postprocessor-sbert-rerank
+            - ../llama-index-integrations/postprocessor/llama-index-postprocessor-longllmlingua
+            - ../llama-index-integrations/postprocessor/llama-index-postprocessor-rankgpt-rerank
+            - ../llama-index-integrations/postprocessor/llama-index-postprocessor-cohere-rerank
+            - ../llama-index-integrations/postprocessor/llama-index-postprocessor-presidio
+            - ../llama-index-integrations/postprocessor/llama-index-postprocessor-flag-embedding-reranker
+            - ../llama-index-integrations/graph_stores/llama-index-graph-stores-neo4j
+            - ../llama-index-integrations/graph_stores/llama-index-graph-stores-falkordb
+            - ../llama-index-integrations/graph_stores/llama-index-graph-stores-kuzu
+            - ../llama-index-integrations/graph_stores/llama-index-graph-stores-nebula
+            - ../llama-index-integrations/multi_modal_llms/llama-index-multi-modal-llms-openai
+            - ../llama-index-integrations/multi_modal_llms/llama-index-multi-modal-llms-ollama
+            - ../llama-index-integrations/multi_modal_llms/llama-index-multi-modal-llms-azure-openai
+            - ../llama-index-integrations/multi_modal_llms/llama-index-multi-modal-llms-replicate
+            - ../llama-index-integrations/multi_modal_llms/llama-index-multi-modal-llms-gemini
+            - ../llama-index-integrations/multi_modal_llms/llama-index-multi-modal-llms-replicate-multi-modal
+            - ../llama-index-integrations/multi_modal_llms/llama-index-multi-modal-llms-dashscope
+            - ../llama-index-integrations/agent/llama-index-agent-openai
+            - ../llama-index-integrations/agent/llama-index-agent-openai-legacy
+            - ../llama-index-integrations/storage/kvstore/llama-index-storage-kvstore-postgres
+            - ../llama-index-integrations/storage/kvstore/llama-index-storage-kvstore-redis
+            - ../llama-index-integrations/storage/kvstore/llama-index-storage-kvstore-firestore
+            - ../llama-index-integrations/storage/kvstore/llama-index-storage-kvstore-mongodb
+            - ../llama-index-integrations/storage/kvstore/llama-index-storage-kvstore-s3
+            - ../llama-index-integrations/storage/kvstore/llama-index-storage-kvstore-dynamodb
+            - ../llama-index-integrations/storage/docstore/llama-index-storage-docstore-dynamodb
+            - ../llama-index-integrations/storage/docstore/llama-index-storage-docstore-mongodb
+            - ../llama-index-integrations/storage/docstore/llama-index-storage-docstore-firestore
+            - ../llama-index-integrations/storage/docstore/llama-index-storage-docstore-redis
+            - ../llama-index-integrations/storage/docstore/llama-index-storage-docstore-postgres
+            - ../llama-index-integrations/storage/index_store/llama-index-storage-index-store-postgres
+            - ../llama-index-integrations/storage/index_store/llama-index-storage-index-store-dynamodb
+            - ../llama-index-integrations/storage/index_store/llama-index-storage-index-store-firestore
+            - ../llama-index-integrations/storage/index_store/llama-index-storage-index-store-mongodb
+            - ../llama-index-integrations/storage/index_store/llama-index-storage-index-store-redis
+            - ../llama-index-integrations/storage/chat_store/llama-index-storage-chat-store-redis
+            - ../llama-index-integrations/output_parsers/llama-index-output-parsers-langchain
+            - ../llama-index-integrations/output_parsers/llama-index-output-parsers-guardrails
+            - ../llama-index-integrations/program/llama-index-program-openai
+            - ../llama-index-integrations/program/llama-index-program-lmformatenforcer
+            - ../llama-index-integrations/program/llama-index-program-guidance
+            - ../llama-index-integrations/program/llama-index-program-evaporate
+            - ../llama-index-integrations/response_synthesizers/llama-index-response-synthesizers-google
+            - ../llama-index-integrations/evaluation/llama-index-evaluation-tonic-validate
+            - ../llama-index-integrations/readers/llama-index-readers-llama-parse
+            - ../llama-index-integrations/readers/llama-index-readers-docugami
+            - ../llama-index-integrations/readers/llama-index-readers-slack
+            - ../llama-index-integrations/readers/llama-index-readers-youtube-transcript
+            - ../llama-index-integrations/readers/llama-index-readers-mbox
+            - ../llama-index-integrations/readers/llama-index-readers-stackoverflow
+            - ../llama-index-integrations/readers/llama-index-readers-pdb
+            - ../llama-index-integrations/readers/llama-index-readers-snowflake
+            - ../llama-index-integrations/readers/llama-index-readers-discord
+            - ../llama-index-integrations/readers/llama-index-readers-earnings-call-transcript
+            - ../llama-index-integrations/readers/llama-index-readers-couchdb
+            - ../llama-index-integrations/readers/llama-index-readers-singlestore
+            - ../llama-index-integrations/readers/llama-index-readers-json
+            - ../llama-index-integrations/readers/llama-index-readers-trello
+            - ../llama-index-integrations/readers/llama-index-readers-jaguar
+            - ../llama-index-integrations/readers/llama-index-readers-jira
+            - ../llama-index-integrations/readers/llama-index-readers-pdf-table
+            - ../llama-index-integrations/readers/llama-index-readers-kibela
+            - ../llama-index-integrations/readers/llama-index-readers-dashvector
+            - ../llama-index-integrations/readers/llama-index-readers-bilibili
+            - ../llama-index-integrations/readers/llama-index-readers-smart-pdf-loader
+            - ../llama-index-integrations/readers/llama-index-readers-agent-search
+            - ../llama-index-integrations/readers/llama-index-readers-macrometa-gdn
+            - ../llama-index-integrations/readers/llama-index-readers-twitter
+            - ../llama-index-integrations/readers/llama-index-readers-astra-db
+            - ../llama-index-integrations/readers/llama-index-readers-opendal
+            - ../llama-index-integrations/readers/llama-index-readers-azstorage-blob
+            - ../llama-index-integrations/readers/llama-index-readers-readwise
+            - ../llama-index-integrations/readers/llama-index-readers-genius
+            - ../llama-index-integrations/readers/llama-index-readers-apify
+            - ../llama-index-integrations/readers/llama-index-readers-athena
+            - ../llama-index-integrations/readers/llama-index-readers-database
+            - ../llama-index-integrations/readers/llama-index-readers-remote
+            - ../llama-index-integrations/readers/llama-index-readers-asana
+            - ../llama-index-integrations/readers/llama-index-readers-hive
+            - ../llama-index-integrations/readers/llama-index-readers-docstring-walker
+            - ../llama-index-integrations/readers/llama-index-readers-airbyte-salesforce
+            - ../llama-index-integrations/readers/llama-index-readers-stripe-docs
+            - ../llama-index-integrations/readers/llama-index-readers-milvus
+            - ../llama-index-integrations/readers/llama-index-readers-nougat-ocr
+            - ../llama-index-integrations/readers/llama-index-readers-assemblyai
+            - ../llama-index-integrations/readers/llama-index-readers-graphdb-cypher
+            - ../llama-index-integrations/readers/llama-index-readers-confluence
+            - ../llama-index-integrations/readers/llama-index-readers-lilac
+            - ../llama-index-integrations/readers/llama-index-readers-github
+            - ../llama-index-integrations/readers/llama-index-readers-wikipedia
+            - ../llama-index-integrations/readers/llama-index-readers-mongodb
+            - ../llama-index-integrations/readers/llama-index-readers-notion
+            - ../llama-index-integrations/readers/llama-index-readers-wordpress
+            - ../llama-index-integrations/readers/llama-index-readers-airbyte-typeform
+            - ../llama-index-integrations/readers/llama-index-readers-airbyte-zendesk-support
+            - ../llama-index-integrations/readers/llama-index-readers-firestore
+            - ../llama-index-integrations/readers/llama-index-readers-microsoft-outlook
+            - ../llama-index-integrations/readers/llama-index-readers-s3
+            - ../llama-index-integrations/readers/llama-index-readers-semanticscholar
+            - ../llama-index-integrations/readers/llama-index-readers-wordlift
+            - ../llama-index-integrations/readers/llama-index-readers-spotify
+            - ../llama-index-integrations/readers/llama-index-readers-airbyte-cdk
+            - ../llama-index-integrations/readers/llama-index-readers-qdrant
+            - ../llama-index-integrations/readers/llama-index-readers-feedly-rss
+            - ../llama-index-integrations/readers/llama-index-readers-airbyte-shopify
+            - ../llama-index-integrations/readers/llama-index-readers-elasticsearch
+            - ../llama-index-integrations/readers/llama-index-readers-rayyan
+            - ../llama-index-integrations/readers/llama-index-readers-firebase-realtimedb
+            - ../llama-index-integrations/readers/llama-index-readers-remote-depth
+            - ../llama-index-integrations/readers/llama-index-readers-make-com
+            - ../llama-index-integrations/readers/llama-index-readers-arango-db
+            - ../llama-index-integrations/readers/llama-index-readers-mangadex
+            - ../llama-index-integrations/readers/llama-index-readers-intercom
+            - ../llama-index-integrations/readers/llama-index-readers-airbyte-gong
+            - ../llama-index-integrations/readers/llama-index-readers-reddit
+            - ../llama-index-integrations/readers/llama-index-readers-faiss
+            - ../llama-index-integrations/readers/llama-index-readers-dad-jokes
+            - ../llama-index-integrations/readers/llama-index-readers-patentsview
+            - ../llama-index-integrations/readers/llama-index-readers-myscale
+            - ../llama-index-integrations/readers/llama-index-readers-guru
+            - ../llama-index-integrations/readers/llama-index-readers-linear
+            - ../llama-index-integrations/readers/llama-index-readers-telegram
+            - ../llama-index-integrations/readers/llama-index-readers-steamship
+            - ../llama-index-integrations/readers/llama-index-readers-maps
+            - ../llama-index-integrations/readers/llama-index-readers-pathway
+            - ../llama-index-integrations/readers/llama-index-readers-airbyte-hubspot
+            - ../llama-index-integrations/readers/llama-index-readers-hatena-blog
+            - ../llama-index-integrations/readers/llama-index-readers-sec-filings
+            - ../llama-index-integrations/readers/llama-index-readers-joplin
+            - ../llama-index-integrations/readers/llama-index-readers-graphql
+            - ../llama-index-integrations/readers/llama-index-readers-bagel
+            - ../llama-index-integrations/readers/llama-index-readers-preprocess
+            - ../llama-index-integrations/readers/llama-index-readers-google
+            - ../llama-index-integrations/readers/llama-index-readers-feishu-docs
+            - ../llama-index-integrations/readers/llama-index-readers-couchbase
+            - ../llama-index-integrations/readers/llama-index-readers-openalex
+            - ../llama-index-integrations/readers/llama-index-readers-txtai
+            - ../llama-index-integrations/readers/llama-index-readers-azcognitive-search
+            - ../llama-index-integrations/readers/llama-index-readers-pinecone
+            - ../llama-index-integrations/readers/llama-index-readers-pandas-ai
+            - ../llama-index-integrations/readers/llama-index-readers-airtable
+            - ../llama-index-integrations/readers/llama-index-readers-string-iterable
+            - ../llama-index-integrations/readers/llama-index-readers-zulip
+            - ../llama-index-integrations/readers/llama-index-readers-zendesk
+            - ../llama-index-integrations/readers/llama-index-readers-bitbucket
+            - ../llama-index-integrations/readers/llama-index-readers-web
+            - ../llama-index-integrations/readers/llama-index-readers-hubspot
+            - ../llama-index-integrations/readers/llama-index-readers-file
+            - ../llama-index-integrations/readers/llama-index-readers-kaltura
+            - ../llama-index-integrations/readers/llama-index-readers-awadb
+            - ../llama-index-integrations/readers/llama-index-readers-imdb-review
+            - ../llama-index-integrations/readers/llama-index-readers-opensearch
+            - ../llama-index-integrations/readers/llama-index-readers-microsoft-sharepoint
+            - ../llama-index-integrations/readers/llama-index-readers-minio
+            - ../llama-index-integrations/readers/llama-index-readers-mangoapps-guides
+            - ../llama-index-integrations/readers/llama-index-readers-gpt-repo
+            - ../llama-index-integrations/readers/llama-index-readers-microsoft-onedrive
+            - ../llama-index-integrations/readers/llama-index-readers-huggingface-fs
+            - ../llama-index-integrations/readers/llama-index-readers-weaviate
+            - ../llama-index-integrations/readers/llama-index-readers-deeplake
+            - ../llama-index-integrations/readers/llama-index-readers-whatsapp
+            - ../llama-index-integrations/readers/llama-index-readers-mondaydotcom
+            - ../llama-index-integrations/readers/llama-index-readers-airbyte-stripe
+            - ../llama-index-integrations/readers/llama-index-readers-snscrape-twitter
+            - ../llama-index-integrations/readers/llama-index-readers-papers
+            - ../llama-index-integrations/readers/llama-index-readers-obsidian
+            - ../llama-index-integrations/readers/llama-index-readers-zep
+            - ../llama-index-integrations/readers/llama-index-readers-memos
+            - ../llama-index-integrations/readers/llama-index-readers-psychic
+            - ../llama-index-integrations/readers/llama-index-readers-chroma
+            - ../llama-index-integrations/readers/llama-index-readers-weather
+            - ../llama-index-integrations/readers/llama-index-readers-chatgpt-plugin
+            - ../llama-index-integrations/readers/llama-index-readers-hwp
+            - ../llama-index-integrations/readers/llama-index-readers-clickhouse
+            - ../llama-index-integrations/readers/llama-index-readers-metal
+            - ../llama-index-integrations/readers/llama-index-readers-boarddocs
+            - ../llama-index-integrations/question_gen/llama-index-question-gen-guidance
+            - ../llama-index-integrations/question_gen/llama-index-question-gen-openai
+            - ../llama-index-integrations/llms/llama-index-llms-palm
+            - ../llama-index-integrations/llms/llama-index-llms-watsonx
+            - ../llama-index-integrations/llms/llama-index-llms-cohere
+            - ../llama-index-integrations/llms/llama-index-llms-nvidia-triton
+            - ../llama-index-integrations/llms/llama-index-llms-ai21
+            - ../llama-index-integrations/llms/llama-index-llms-bedrock
+            - ../llama-index-integrations/llms/llama-index-llms-huggingface
+            - ../llama-index-integrations/llms/llama-index-llms-azure-openai
+            - ../llama-index-integrations/llms/llama-index-llms-dashscope
+            - ../llama-index-integrations/llms/llama-index-llms-nvidia-tensorrt
+            - ../llama-index-integrations/llms/llama-index-llms-anthropic
+            - ../llama-index-integrations/llms/llama-index-llms-gemini
+            - ../llama-index-integrations/llms/llama-index-llms-clarifai
+            - ../llama-index-integrations/llms/llama-index-llms-llama-api
+            - ../llama-index-integrations/llms/llama-index-llms-mymagic
+            - ../llama-index-integrations/llms/llama-index-llms-llama-cpp
+            - ../llama-index-integrations/llms/llama-index-llms-perplexity
+            - ../llama-index-integrations/llms/llama-index-llms-rungpt
+            - ../llama-index-integrations/llms/llama-index-llms-replicate
+            - ../llama-index-integrations/llms/llama-index-llms-openai-like
+            - ../llama-index-integrations/llms/llama-index-llms-konko
+            - ../llama-index-integrations/llms/llama-index-llms-openllm
+            - ../llama-index-integrations/llms/llama-index-llms-litellm
+            - ../llama-index-integrations/llms/llama-index-llms-sagemaker-endpoint
+            - ../llama-index-integrations/llms/llama-index-llms-portkey
+            - ../llama-index-integrations/llms/llama-index-llms-vllm
+            - ../llama-index-integrations/llms/llama-index-llms-maritalk
+            - ../llama-index-integrations/llms/llama-index-llms-groq
+            - ../llama-index-integrations/llms/llama-index-llms-neutrino
+            - ../llama-index-integrations/llms/llama-index-llms-monsterapi
+            - ../llama-index-integrations/llms/llama-index-llms-predibase
+            - ../llama-index-integrations/llms/llama-index-llms-xinference
+            - ../llama-index-integrations/llms/llama-index-llms-fireworks
+            - ../llama-index-integrations/llms/llama-index-llms-mistralai
+            - ../llama-index-integrations/llms/llama-index-llms-anyscale
+            - ../llama-index-integrations/llms/llama-index-llms-vertex
+            - ../llama-index-integrations/llms/llama-index-llms-localai
+            - ../llama-index-integrations/llms/llama-index-llms-together
+            - ../llama-index-integrations/llms/llama-index-llms-ollama
+            - ../llama-index-integrations/llms/llama-index-llms-langchain
+            - ../llama-index-integrations/llms/llama-index-llms-everlyai
+            - ../llama-index-integrations/llms/llama-index-llms-openrouter
+            - ../llama-index-integrations/llms/llama-index-llms-openai
+            - ../llama-index-integrations/llms/llama-index-llms-gradient
+            - ../llama-index-integrations/extractors/llama-index-extractors-entity
+            - ../llama-index-integrations/extractors/llama-index-extractors-marvin
+            - ../llama-index-packs/llama-index-packs-query-understanding-agent
+            - ../llama-index-packs/llama-index-packs-searchain
+            - ../llama-index-packs/llama-index-packs-docugami-kg-rag
+            - ../llama-index-packs/llama-index-packs-raptor
+            - ../llama-index-packs/llama-index-packs-code-hierarchy
+            - ../llama-index-packs/llama-index-packs-cohere-citation-chat
+            - ../llama-index-packs/llama-index-packs-diff-private-simple-dataset
+            - ../llama-index-packs/llama-index-packs-koda-retriever
+            - ../llama-index-packs/llama-index-packs-finchat
+            - ../llama-index-integrations/vector_stores/llama-index-vector-stores-baiduvectordb
+            - ../llama-index-integrations/vector_stores/llama-index-vector-stores-astra-db
+            - ../llama-index-integrations/vector_stores/llama-index-vector-stores-databricks
+            - ../llama-index-integrations/vector_stores/llama-index-vector-stores-tidbvector
+            - ../llama-index-integrations/retrievers/llama-index-retrievers-videodb
+            - ../llama-index-integrations/tools/llama-index-tools-passio-nutrition-ai
+            - ../llama-index-integrations/tools/llama-index-tools-duckduckgo
+            - ../llama-index-integrations/tools/llama-index-tools-finance
+            - ../llama-index-integrations/tools/llama-index-tools-brave-search
+            - ../llama-index-integrations/embeddings/llama-index-embeddings-vertex
+            - ../llama-index-integrations/embeddings/llama-index-embeddings-premai
+            - ../llama-index-integrations/embeddings/llama-index-embeddings-premai/llama_index/embeddings/premai
+            - ../llama-index-integrations/embeddings/llama-index-embeddings-llamafile
+            - ../llama-index-integrations/callbacks/llama-index-callbacks-langfuse
+            - ../llama-index-integrations/postprocessor/llama-index-postprocessor-jinaai-rerank
+            - ../llama-index-integrations/multi_modal_llms/llama-index-multi-modal-llms-anthropic
+            - ../llama-index-integrations/storage/kvstore/llama-index-storage-kvstore-elasticsearch
+            - ../llama-index-integrations/readers/llama-index-readers-feishu-wiki
+            - ../llama-index-integrations/llms/llama-index-llms-solar
+            - ../llama-index-integrations/llms/llama-index-llms-friendli
+            - ../llama-index-integrations/llms/llama-index-llms-modelscope
+            - ../llama-index-integrations/llms/llama-index-llms-llamafile
+            - ../llama-index-integrations/llms/llama-index-llms-premai
+  - redirects:
+      redirect_maps:
+        ./community/llama_packs/root.html: community/llama_packs/index.md
+        ./module_guides/deploying/agents/root.html: module_guides/deploying/agents/index.md
+        ./module_guides/deploying/agents/tools/root.html: module_guides/deploying/agents/tools/index.md
+        ./module_guides/deploying/chat_engines/root.html: module_guides/deploying/chat_engines/index.md
+        ./module_guides/deploying/query_engine/root.html: module_guides/deploying/query_engine/index.md
+        ./module_guides/evaluating/root.html: module_guides/evaluating/index.md
+        ./module_guides/loading/connector/root.html: module_guides/loading/connector/index.md
+        ./module_guides/loading/documents_and_nodes/root.html: module_guides/loading/documents_and_nodes/index.md
+        ./module_guides/loading/ingestion_pipeline/root.html: module_guides/loading/ingestion_pipeline/index.md
+        ./module_guides/loading/node_parsers/root.html: module_guides/loading/node_parsers/index.md
+        ./module_guides/models/prompts.html: module_guides/models/prompts/index.md
+        ./module_guides/observability/observability.html: module_guides/observability/index.md
+        ./module_guides/querying/node_postprocessors/root.html: module_guides/querying/node_postprocessors/index.md
+        ./module_guides/querying/pipeline/root.html: module_guides/querying/pipeline/index.md
+        ./module_guides/querying/response_synthesizers/root.html: module_guides/querying/response_synthesizers/index.md
+        ./module_guides/querying/retriever/root.html: module_guides/querying/retriever/index.md
+        ./module_guides/querying/router/root.html: module_guides/querying/router/index.md
+        ./module_guides/querying/structured_outputs/structured_outputs.html: module_guides/querying/structured_outputs/index.md
+        ./module_guides/storing/storing.html: module_guides/storing/index.md
+        ./understanding/evaluating/cost_analysis/root.html: understanding/evaluating/cost_analysis/index.md
+        ./understanding/putting_it_all_together/putting_it_all_together.html: understanding/putting_it_all_together/index.md
+        ./use_cases/q_and_a/root.html: use_cases/q_and_a/index.md
+      use_directory_urls: false
+site_name: LlamaIndex
+theme:
+  custom_dir: overrides
+  favicon: _static/assets/LlamaLogoBrowserTab.png
+  features:
+    - navigation.instant
+    - navigation.tabs
+    - navigation.indexes
+    - navigation.top
+    - navigation.footer
+    - toc.follow
+    - content.code.copy
+  logo: _static/assets/LlamaSquareBlack.svg
+  name: material
+  palette:
+    - media: (prefers-color-scheme)
+      toggle:
+        icon: material/brightness-auto
+        name: Switch to light mode
+    - accent: purple
+      media: "(prefers-color-scheme: light)"
+      primary: white
+      scheme: default
+      toggle:
+        icon: material/brightness-7
+        name: Switch to dark mode
+    - accent: purple
+      media: "(prefers-color-scheme: dark)"
+      primary: black
+      scheme: slate
+      toggle:
+        icon: material/brightness-4
+        name: Switch to system preference
diff --git a/docs/module_guides/deploying/agents/modules.md b/docs/module_guides/deploying/agents/modules.md
deleted file mode 100644
index 0c38187f3e2a46565e68c6284ab288bad51e858b..0000000000000000000000000000000000000000
--- a/docs/module_guides/deploying/agents/modules.md
+++ /dev/null
@@ -1,76 +0,0 @@
-# Module Guides
-
-These guide provide an overview of how to use our agent classes.
-
-For more detailed guides on how to use specific tools, check out our [tools module guides](tools/root.md).
-
-## OpenAI Agent
-
-```{toctree}
----
-maxdepth: 1
----
-/examples/agent/openai_agent.ipynb
-/examples/agent/openai_agent_with_query_engine.ipynb
-/examples/agent/openai_agent_retrieval.ipynb
-/examples/agent/openai_agent_query_cookbook.ipynb
-/examples/agent/openai_agent_query_plan.ipynb
-/examples/agent/openai_agent_context_retrieval.ipynb
-/examples/query_engine/recursive_retriever_agents.ipynb
-/examples/agent/multi_document_agents.ipynb
-/examples/agent/agent_builder.ipynb
-/examples/agent/openai_agent_parallel_function_calling.ipynb
-```
-
-## [Beta] OpenAI Assistant Agent
-
-```{toctree}
----
-maxdepth: 1
----
-/examples/agent/openai_assistant_agent.ipynb
-/examples/agent/openai_retrieval_benchmark.ipynb
-/examples/agent/openai_assistant_query_cookbook.ipynb
-```
-
-## ReAct Agent
-
-```{toctree}
----
-maxdepth: 1
----
-/examples/agent/react_agent.ipynb
-/examples/agent/react_agent_with_query_engine.ipynb
-```
-
-## Additional Agents (available on LlamaHub)
-
-```{toctree}
----
-maxdepth: 1
----
-LLMCompiler Agent Cookbook <https://github.com/run-llama/llama-hub/blob/main/llama_hub/llama_packs/agents/llm_compiler/llm_compiler.ipynb>
-```
-
-(lower-level-agent-api)=
-
-## Custom Agents
-
-```{toctree}
----
-maxdepth: 1
----
-/examples/agent/custom_agent.ipynb
-/examples/agent/agent_runner/query_pipeline_agent.ipynb
-```
-
-## Lower-Level Agent API
-
-```{toctree}
----
-maxdepth: 1
----
-/examples/agent/agent_runner/agent_runner.ipynb
-/examples/agent/agent_runner/agent_runner_rag.ipynb
-/examples/agent/agent_runner/agent_runner_rag_controllable.ipynb
-```
diff --git a/docs/module_guides/deploying/chat_engines/modules.md b/docs/module_guides/deploying/chat_engines/modules.md
deleted file mode 100644
index 4f15eb2fa0eeb0924446a927ef0ae194919faa1b..0000000000000000000000000000000000000000
--- a/docs/module_guides/deploying/chat_engines/modules.md
+++ /dev/null
@@ -1,18 +0,0 @@
-# Module Guides
-
-We provide a few simple implementations to start, with more sophisticated modes coming soon!
-
-More specifically, the `SimpleChatEngine` does not make use of a knowledge base,
-whereas all others make use of a query engine over knowledge base.
-
-```{toctree}
----
-maxdepth: 1
----
-ReAct Chat Engine </examples/chat_engine/chat_engine_react.ipynb>
-OpenAI Chat Engine </examples/chat_engine/chat_engine_openai.ipynb>
-Condense Question Chat Engine </examples/chat_engine/chat_engine_condense_question.ipynb>
-Context Chat Engine </examples/chat_engine/chat_engine_context.ipynb>
-Context Plus Condense Chat Engine </examples/chat_engine/chat_engine_condense_plus_context.ipynb>
-Simple Chat Engine </examples/chat_engine/chat_engine_repl.ipynb>
-```
diff --git a/docs/module_guides/deploying/query_engine/modules.md b/docs/module_guides/deploying/query_engine/modules.md
deleted file mode 100644
index 63f7150b7b0c92d8cdb6045dbb2a9261d7cfd9b1..0000000000000000000000000000000000000000
--- a/docs/module_guides/deploying/query_engine/modules.md
+++ /dev/null
@@ -1,77 +0,0 @@
-# Module Guides
-
-## Basic
-
-First, check out our [module guide on Indexes](/module_guides/indexing/modules.md) for in-depth guides for each index (vector index, summary index, knowledge graph index). Each index corresponds to a default query engine for that index.
-
-Then check out the rest of the sections below.
-
-```{toctree}
----
-maxdepth: 1
----
-Custom Query Engine </examples/query_engine/custom_query_engine.ipynb>
-Retriever Query Engine </examples/query_engine/CustomRetrievers.ipynb>
-```
-
-## Structured & Semi-Structured Data
-
-```{toctree}
----
-maxdepth: 1
----
-/examples/index_structs/struct_indices/SQLIndexDemo.ipynb
-/examples/query_engine/json_query_engine.ipynb
-/examples/query_engine/pandas_query_engine.ipynb
-/examples/query_engine/JSONalyze_query_engine.ipynb
-/examples/query_engine/knowledge_graph_query_engine.ipynb
-/examples/query_engine/knowledge_graph_rag_query_engine.ipynb
-/examples/query_engine/multi_doc_auto_retrieval/multi_doc_auto_retrieval.ipynb
-```
-
-## Advanced
-
-```{toctree}
----
-maxdepth: 1
----
-/examples/query_engine/RouterQueryEngine.ipynb
-/examples/query_engine/RetrieverRouterQueryEngine.ipynb
-/examples/query_engine/JointQASummary.ipynb
-/examples/query_engine/sub_question_query_engine.ipynb
-/examples/query_transformations/SimpleIndexDemo-multistep.ipynb
-/examples/query_engine/SQLRouterQueryEngine.ipynb
-/examples/query_engine/SQLAutoVectorQueryEngine.ipynb
-/examples/query_engine/SQLJoinQueryEngine.ipynb
-/examples/query_engine/pgvector_sql_query_engine.ipynb
-/examples/index_structs/struct_indices/duckdb_sql_query.ipynb
-Retry Query Engine </examples/evaluation/RetryQuery.ipynb>
-/examples/query_engine/citation_query_engine.ipynb
-/examples/query_engine/pdf_tables/recursive_retriever.ipynb
-/examples/query_engine/sec_tables/tesla_10q_table.ipynb
-/examples/query_engine/recursive_retriever_agents.ipynb
-/examples/query_engine/ensemble_query_engine.ipynb
-```
-
-### Advanced: Towards Multi-Document Querying/Analysis
-
-This specific subsection showcases modules that help with querying multiple documents.
-
-```{toctree}
----
-maxdepth: 1
----
-/examples/query_engine/sub_question_query_engine.ipynb
-/examples/query_engine/recursive_retriever_agents.ipynb
-/examples/agent/multi_document_agents.ipynb
-/examples/agent/multi_document_agents-v1.ipynb
-```
-
-## Experimental
-
-```{toctree}
----
-maxdepth: 1
----
-/examples/query_engine/flare_query_engine.ipynb
-```
diff --git a/docs/module_guides/deploying/query_engine/supporting_modules.md b/docs/module_guides/deploying/query_engine/supporting_modules.md
deleted file mode 100644
index 6d37b9719cfe07568726d24f073e87628948060d..0000000000000000000000000000000000000000
--- a/docs/module_guides/deploying/query_engine/supporting_modules.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# Supporting Modules
-
-```{toctree}
----
-maxdepth: 1
----
-/optimizing/advanced_retrieval/query_transformations.md
-```
diff --git a/docs/module_guides/evaluating/modules.md b/docs/module_guides/evaluating/modules.md
deleted file mode 100644
index 8a4af4fccfa810ab52c002989edef0f325265c60..0000000000000000000000000000000000000000
--- a/docs/module_guides/evaluating/modules.md
+++ /dev/null
@@ -1,33 +0,0 @@
-# Modules
-
-Notebooks with usage of these components can be found below.
-
-## Response Evaluation
-
-```{toctree}
----
-maxdepth: 1
----
-
-/examples/evaluation/faithfulness_eval.ipynb
-/examples/evaluation/relevancy_eval.ipynb
-/examples/evaluation/answer_and_context_relevancy.ipynb
-/examples/evaluation/Deepeval.ipynb
-/examples/evaluation/guideline_eval.ipynb
-/examples/evaluation/correctness_eval.ipynb
-/examples/evaluation/semantic_similarity_eval.ipynb
-/examples/evaluation/QuestionGeneration.ipynb
-/examples/evaluation/batch_eval.ipynb
-/examples/evaluation/multi_modal/multi_modal_rag_evaluation.ipynb
-/examples/evaluation/uptrain.ipynb
-```
-
-## Retrieval Evaluation
-
-```{toctree}
----
-maxdepth: 1
----
-
-/examples/evaluation/retrieval/retriever_eval.ipynb
-```
diff --git a/docs/module_guides/indexing/indexing.md b/docs/module_guides/indexing/indexing.md
deleted file mode 100644
index aa195336dc9fa6275275a2f08c1628c98a423879..0000000000000000000000000000000000000000
--- a/docs/module_guides/indexing/indexing.md
+++ /dev/null
@@ -1,44 +0,0 @@
-# Indexing
-
-## Concept
-
-An `Index` is a data structure that allows us to quickly retrieve relevant context for a user query.
-For LlamaIndex, it's the core foundation for retrieval-augmented generation (RAG) use-cases.
-
-At a high-level, `Indexes` are built from [Documents](/module_guides/loading/documents_and_nodes/root.md).
-They are used to build [Query Engines](/module_guides/deploying/query_engine/root.md) and [Chat Engines](/module_guides/deploying/chat_engines/root.md)
-which enables question & answer and chat over your data.
-
-Under the hood, `Indexes` store data in `Node` objects (which represent chunks of the original documents), and expose a [Retriever](/module_guides/querying/retriever/root.md) interface that supports additional configuration and automation.
-
-The most common index by far is the `VectorStoreIndex`; the best place to start is the [VectorStoreIndex usage guide](/module_guides/indexing/vector_store_index.md).
-
-For other indexes, check out our guide to [how each index works](/module_guides/indexing/index_guide.md) to help you decide which one matches your use-case.
-
-```{toctree}
----
-maxdepth: 1
-hidden: True
----
-llama_cloud_index.md
-vector_store_index.md
-index_guide.md
-```
-
-## Other Index resources
-
-```{toctree}
----
-maxdepth: 2
----
-modules.md
-```
-
-## Advanced Concepts
-
-```{toctree}
----
-maxdepth: 1
----
-composability.md
-```
diff --git a/docs/module_guides/indexing/modules.md b/docs/module_guides/indexing/modules.md
deleted file mode 100644
index 1deed222f877de3750c76bc8249e1e6b48f2e5d8..0000000000000000000000000000000000000000
--- a/docs/module_guides/indexing/modules.md
+++ /dev/null
@@ -1,21 +0,0 @@
-# Module Guides
-
-```{toctree}
----
-maxdepth: 1
----
-VectorStoreIndex <./vector_store_index.md>
-Summary Index <./index_guide.md>
-Tree Index <./index_guide.md>
-Keyword Table Index <./index_guide.md>
-/examples/index_structs/knowledge_graph/KnowledgeGraphDemo.ipynb
-/examples/index_structs/knowledge_graph/KnowledgeGraphIndex_vs_VectorStoreIndex_vs_CustomIndex_combined.ipynb
-/examples/query_engine/knowledge_graph_query_engine.ipynb
-/examples/query_engine/knowledge_graph_rag_query_engine.ipynb
-REBEL + Knowledge Graph Index <https://colab.research.google.com/drive/1G6pcR0pXvSkdMQlAK_P-IrYgo-_staxd?usp=sharing>
-REBEL + Wikipedia Filtering </examples/index_structs/knowledge_graph/knowledge_graph2.ipynb>
-SQL Index </examples/index_structs/struct_indices/SQLIndexDemo.ipynb>
-/examples/index_structs/struct_indices/duckdb_sql_query.ipynb
-/examples/index_structs/doc_summary/DocSummary.ipynb
-/examples/objects/object_index.ipynb
-```
diff --git a/docs/module_guides/loading/connector/modules.md b/docs/module_guides/loading/connector/modules.md
deleted file mode 100644
index 103f70bfc1a141dff29d09cabc3b21135ed771be..0000000000000000000000000000000000000000
--- a/docs/module_guides/loading/connector/modules.md
+++ /dev/null
@@ -1,31 +0,0 @@
-# Module Guides
-
-```{toctree}
----
-maxdepth: 1
----
-../../../examples/data_connectors/simple_directory_reader.ipynb
-../../../examples/data_connectors/PsychicDemo.ipynb
-../../../examples/data_connectors/DeepLakeReader.ipynb
-../../../examples/data_connectors/QdrantDemo.ipynb
-../../../examples/data_connectors/DiscordDemo.ipynb
-../../../examples/data_connectors/MongoDemo.ipynb
-../../../examples/data_connectors/ChromaDemo.ipynb
-../../../examples/data_connectors/MyScaleReaderDemo.ipynb
-../../../examples/data_connectors/FaissDemo.ipynb
-../../../examples/data_connectors/ObsidianReaderDemo.ipynb
-../../../examples/data_connectors/SlackDemo.ipynb
-../../../examples/data_connectors/WebPageDemo.ipynb
-../../../examples/data_connectors/PineconeDemo.ipynb
-../../../examples/data_connectors/PathwayReaderDemo.ipynb
-../../../examples/data_connectors/MboxReaderDemo.ipynb
-../../../examples/data_connectors/MilvusReaderDemo.ipynb
-../../../examples/data_connectors/NotionDemo.ipynb
-../../../examples/data_connectors/GithubRepositoryReaderDemo.ipynb
-../../../examples/data_connectors/GoogleDocsDemo.ipynb
-../../../examples/data_connectors/DatabaseReaderDemo.ipynb
-../../../examples/data_connectors/TwitterDemo.ipynb
-../../../examples/data_connectors/WeaviateDemo.ipynb
-../../../examples/data_connectors/MakeDemo.ipynb
-../../../examples/data_connectors/deplot/DeplotReader.ipynb
-```
diff --git a/docs/module_guides/loading/loading.md b/docs/module_guides/loading/loading.md
deleted file mode 100644
index 4c072c902f2390121ccb7aa1f573f466a11557b2..0000000000000000000000000000000000000000
--- a/docs/module_guides/loading/loading.md
+++ /dev/null
@@ -1,37 +0,0 @@
-# Loading Data
-
-The key to data ingestion in LlamaIndex is loading and transformations. Once you have loaded Documents, you can process them via transformations and output Nodes.
-
-Once you have [learned about the basics of loading data](/understanding/loading/loading.html) in our Understanding section, you can read on to learn more about:
-
-### Loading
-
-- [SimpleDirectoryReader](simpledirectoryreader.md), our built-in loader for loading all sorts of file types from a local directory
-- [LlamaParse](connector/llama_parse.md), LlamaIndex's official tool for PDF parsing, available as a managed API.
-- [LlamaHub](connector/root.md), our registry of hundreds of data loading libraries to ingest data from any source
-
-### Transformations
-
-This includes common operations like splitting text.
-
-- [Node Parser Usage Pattern](node_parsers/root.md), showing you how to use our node parsers
-- [Node Parser Modules](node_parsers/modules.md), showing our text splitters (sentence, token, HTML, JSON) and other parser modules.
-
-### Putting it all Together
-
-- [The ingestion pipeline](ingestion_pipeline/root.md) which allows you to set up a repeatable, cache-optimized process for loading data.
-
-### Abstractions
-
-- [Document and Node objects](documents_and_nodes/root.md) and how to customize them for more advanced use cases
-
-```{toctree}
----
-maxdepth: 1
-hidden: true
----
-connector/root.md
-documents_and_nodes/root.md
-node_parsers/root.md
-ingestion_pipeline/root.md
-```
diff --git a/docs/module_guides/models/llms/modules.md b/docs/module_guides/models/llms/modules.md
deleted file mode 100644
index bcbb6645ed799ac01abbcfc448821212d3a53e31..0000000000000000000000000000000000000000
--- a/docs/module_guides/models/llms/modules.md
+++ /dev/null
@@ -1,408 +0,0 @@
-# Available LLM integrations
-
-We support integrations with OpenAI, Anthropic, Hugging Face, PaLM, and more.
-
-## AI21
-
-```{toctree}
----
-maxdepth: 1
----
-/examples/llm/ai21.ipynb
-```
-
-## Anthropic
-
-```{toctree}
----
-maxdepth: 1
----
-/examples/llm/anthropic.ipynb
-/cookbooks/anthropic_haiku.ipynb
-```
-
-## AnyScale
-
-```{toctree}
----
-maxdepth: 1
----
-/examples/llm/anyscale.ipynb
-```
-
-## Bedrock
-
-```{toctree}
----
-maxdepth: 1
----
-/examples/llm/bedrock.ipynb
-```
-
-## Clarifai
-
-```{toctree}
----
-maxdepth: 1
----
-/examples/llm/clarifai.ipynb
-```
-
-## Cohere
-
-```{toctree}
----
-maxdepth: 1
----
-/examples/llm/cohere.ipynb
-```
-
-## Dashscope
-
-```{toctree}
----
-maxdepth: 1
----
-/examples/llm/dashscope.ipynb
-/examples/multi_modal/dashscope_multi_modal.ipynb
-```
-
-## EverlyAI
-
-```{toctree}
----
-maxdepth: 1
----
-/examples/llm/everlyai.ipynb
-```
-
-## Fireworks
-
-```{toctree}
----
-maxdepth: 1
----
-/examples/llm/fireworks.ipynb
-```
-
-## Friendli
-
-```{toctree}
----
-maxdepth: 1
----
-/examples/llm/friendli.ipynb
-```
-
-## Gradient
-
-```{toctree}
----
-maxdepth: 1
----
-/examples/llm/gradient_base_model.ipynb
-/examples/llm/gradient_model_adapter.ipynb
-```
-
-## Groq
-
-```{toctree}
----
-maxdepth: 1
----
-/examples/llm/groq.ipynb
-```
-
-## Hugging Face
-
-```{toctree}
----
-maxdepth: 1
----
-/examples/customization/llms/SimpleIndexDemo-Huggingface_camel.ipynb
-/examples/customization/llms/SimpleIndexDemo-Huggingface_stablelm.ipynb
-/examples/vector_stores/SimpleIndexDemoLlama-Local.ipynb
-```
-
-## Konko
-
-```{toctree}
----
-maxdepth: 1
----
-/examples/llm/konko.ipynb
-```
-
-## LangChain
-
-```{toctree}
----
-maxdepth: 1
----
-/examples/llm/langchain.ipynb
-```
-
-## LiteLLM
-
-```{toctree}
----
-maxdepth: 1
----
-/examples/llm/litellm.ipynb
-```
-
-## Llama API
-
-```{toctree}
----
-maxdepth: 1
----
-/examples/llm/llama_api.ipynb
-```
-
-## Llama CPP
-
-```{toctree}
----
-maxdepth: 1
----
-/examples/llm/llama_2_llama_cpp.ipynb
-```
-
-## LocalAI
-
-```{toctree}
----
-maxdepth: 1
----
-/examples/llm/localai.ipynb
-```
-
-## MariTalk
-
-```{toctree}
----
-maxdepth: 1
----
-/examples/llm/maritalk.ipynb
-```
-
-## MistralAI
-
-```{toctree}
----
-maxdepth: 1
----
-/examples/llm/mistralai.ipynb
-/cookbooks/mistralai.ipynb
-```
-
-## PremAI
-
-```{toctree}
----
-maxdepth: 1
----
-/examples/llm/premai.ipynb
-```
-
-## MonsterAPI
-
-```{toctree}
----
-maxdepth: 1
----
-/examples/llm/monsterapi.ipynb
-```
-
-## MyMagic
-
-```{toctree}
----
-maxdepth: 1
----
-/examples/llm/mymagic.ipynb
-```
-
-## NeutrinoAI
-
-```{toctree}
----
-maxdepth: 1
----
-/examples/llm/neutrino.ipynb
-```
-
-## Nvidia TensorRT-LLM
-
-```{toctree}
----
-maxdepth: 1
----
-/examples/llm/nvidia_tensorrt.ipynb
-```
-
-## Nvidia Triton
-
-```{toctree}
----
-maxdepth: 1
----
-/examples/llm/nvidia_triton.ipynb
-```
-
-## Ollama
-
-```{toctree}
----
-maxdepth: 1
----
-/examples/llm/ollama.ipynb
-```
-
-## OpenAI
-
-```{toctree}
----
-maxdepth: 1
----
-/examples/llm/openai.ipynb
-/examples/llm/azure_openai.ipynb
-```
-
-## OpenLLM
-
-```{toctree}
----
-maxdepth: 1
----
-/examples/llm/openllm.ipynb
-```
-
-## OpenRouter
-
-```{toctree}
----
-maxdepth: 1
----
-/examples/llm/openrouter.ipynb
-```
-
-## PaLM
-
-```{toctree}
----
-maxdepth: 1
----
-/examples/llm/palm.ipynb
-```
-
-## Perplexity
-
-```{toctree}
----
-maxdepth: 1
----
-/examples/llm/perplexity.ipynb
-```
-
-## Portkey
-
-```{toctree}
----
-maxdepth: 1
----
-/examples/llm/portkey.ipynb
-```
-
-## Predibase
-
-```{toctree}
----
-maxdepth: 1
----
-/examples/llm/predibase.ipynb
-```
-
-## Replicate
-
-```{toctree}
----
-maxdepth: 1
----
-/examples/llm/llama_2.ipynb
-/examples/llm/vicuna.ipynb
-/examples/vector_stores/SimpleIndexDemoLlama2.ipynb
-```
-
-## RunGPT
-
-```{toctree}
----
-maxdepth: 1
----
-/examples/llm/rungpt.ipynb
-```
-
-## SageMaker
-
-```{toctree}
----
-maxdepth: 1
----
-/examples/llm/sagemaker_endpoint_llm.ipynb
-```
-
-## Solar
-
-```{toctree}
----
-maxdepth: 1
----
-/examples/llm/solar.ipynb
-```
-
-## Together.ai
-
-```{toctree}
----
-maxdepth: 1
----
-/examples/llm/together.ipynb
-```
-
-## Vertex
-
-```{toctree}
----
-maxdepth: 1
----
-/examples/llm/vertex.ipynb
-```
-
-## vLLM
-
-```{toctree}
----
-maxdepth: 1
----
-/examples/llm/vllm.ipynb
-```
-
-## Xorbits Inference
-
-```{toctree}
----
-maxdepth: 1
----
-/examples/llm/xinference_local_deployment.ipynb
-```
-
-## ModelScope
-
-```{toctree}
----
-maxdepth: 1
----
-/examples/llm/modelscope.ipynb
-```
diff --git a/docs/module_guides/models/models.md b/docs/module_guides/models/models.md
deleted file mode 100644
index fb7625498e9f2701bc90ace448ac7cb6dc1a44c3..0000000000000000000000000000000000000000
--- a/docs/module_guides/models/models.md
+++ /dev/null
@@ -1,20 +0,0 @@
-# Models
-
-There are a few primary ways you interact with models in LlamaIndex:
-
-```{toctree}
----
-maxdepth: 1
----
-llms.md
-embeddings.md
-```
-
-Experimental
-
-```{toctree}
----
-maxdepth: 1
----
-multi_modal.md
-```
diff --git a/docs/module_guides/querying/pipeline/modules.md b/docs/module_guides/querying/pipeline/modules.md
deleted file mode 100644
index 20440185c922bcb1fd87b589b8f91e8bd373f032..0000000000000000000000000000000000000000
--- a/docs/module_guides/querying/pipeline/modules.md
+++ /dev/null
@@ -1,12 +0,0 @@
-# Module Guides
-
-```{toctree}
----
-maxdepth: 1
----
-/examples/pipeline/query_pipeline.ipynb
-/examples/pipeline/query_pipeline_async.ipynb
-/examples/pipeline/query_pipeline_pandas.ipynb
-/examples/pipeline/query_pipeline_sql.ipynb
-/examples/agent/agent_runner/query_pipeline_agent.ipynb
-```
diff --git a/docs/module_guides/querying/querying.md b/docs/module_guides/querying/querying.md
deleted file mode 100644
index c8246dc19bab29be56253e1e9f4fe80e390fbcea..0000000000000000000000000000000000000000
--- a/docs/module_guides/querying/querying.md
+++ /dev/null
@@ -1,35 +0,0 @@
-# Querying
-
-Querying is the most important part of your LLM application. To learn more about getting a final product that you can deploy, check out the [query engine](/module_guides/deploying/query_engine/root.md), [chat engine](/module_guides/deploying/chat_engines/root.md).
-
-If you wish to combine advanced reasoning with tool use, check out our [agents](/module_guides/deploying/agents/root.md) guide.
-
-## Query Pipeline
-
-You can create query pipelines/chains with ease with our declarative `QueryPipeline` interface. Check out our [query pipeline guide](/module_guides/querying/pipeline/root.md) for more details.
-
-```{toctree}
----
-maxdepth: 1
-hidden: True
----
-/module_guides/querying/pipeline/root.md
-```
-
-Otherwise check out how to use our query modules as standalone components 👇.
-
-## Query Modules
-
-```{toctree}
----
-maxdepth: 1
----
-/module_guides/deploying/query_engine/root.md
-/module_guides/deploying/chat_engines/root.md
-/module_guides/deploying/agents/root.md
-/module_guides/querying/retriever/root.md
-/module_guides/querying/response_synthesizers/root.md
-/module_guides/querying/router/root.md
-/module_guides/querying/node_postprocessors/root.md
-/module_guides/querying/structured_outputs/structured_outputs.md
-```
diff --git a/docs/module_guides/querying/retriever/retrievers.md b/docs/module_guides/querying/retriever/retrievers.md
deleted file mode 100644
index 7137a293ba9ce1bc6b9a3de6cb75a498db2d037f..0000000000000000000000000000000000000000
--- a/docs/module_guides/querying/retriever/retrievers.md
+++ /dev/null
@@ -1,104 +0,0 @@
-# Retriever Modules
-
-We are actively adding more tailored retrieval guides.
-In the meanwhile, please take a look at the [API References](/api_reference/query/retrievers.rst).
-
-## Index Retrievers
-
-Please see [the retriever modes](/module_guides/querying/retriever/retriever_modes.md) for more details on how to get a retriever from any given index.
-
-If you want to import the corresponding retrievers directly, please check out our [API reference](/api_reference/query/retrievers.rst).
-
-## Comprehensive Retriever Guides
-
-Check out our comprehensive guides on various retriever modules, many of which cover advanced concepts (auto-retrieval, routing, ensembling, and more).
-
-### Advanced Retrieval and Search
-
-These guides contain advanced retrieval techniques. Some are common like keyword/hybrid search, reranking, and more.
-Some are specific to LLM + RAG pipelines, like small-to-big and auto-merging retrieval.
-
-```{toctree}
----
-maxdepth: 1
----
-Define Custom Retriever </examples/query_engine/CustomRetrievers.ipynb>
-BM25 Hybrid Retriever </examples/retrievers/bm25_retriever.ipynb>
-/examples/retrievers/simple_fusion.ipynb
-/examples/retrievers/reciprocal_rerank_fusion.ipynb
-/examples/retrievers/relative_score_dist_fusion.ipynb
-/examples/retrievers/auto_merging_retriever.ipynb
-/examples/node_postprocessor/MetadataReplacementDemo.ipynb
-/examples/retrievers/composable_retrievers.ipynb
-```
-
-### Auto-Retrieval
-
-These retrieval techniques perform **semi-structured** queries, combining semantic search with structured filtering.
-
-```{toctree}
----
-maxdepth: 1
----
-/examples/vector_stores/pinecone_auto_retriever.ipynb
-Auto-Retrieval (with Lantern) </examples/vector_stores/LanternAutoRetriever.ipynb>
-Auto-Retrieval (with Chroma) </examples/vector_stores/chroma_auto_retriever.ipynb>
-Auto-Retrieval (with BagelDB) </examples/vector_stores/BagelAutoRetriever.ipynb>
-/examples/query_engine/multi_doc_auto_retrieval/multi_doc_auto_retrieval.ipynb
-/examples/retrievers/vectara_auto_retriever.ipynb
-```
-
-### Knowledge Graph Retrievers
-
-```{toctree}
----
-maxdepth: 1
----
-Custom Retriever (KG Index and Vector Store Index) </examples/index_structs/knowledge_graph/KnowledgeGraphIndex_vs_VectorStoreIndex_vs_CustomIndex_combined.ipynb>
-Knowledge Graph RAG Retriever </examples/query_engine/knowledge_graph_rag_query_engine.ipynb>
-```
-
-### Composed Retrievers
-
-These are retrieval techniques that are composed on top of other retrieval techniques - providing higher-level capabilities like
-hierarchical retrieval and query decomposition.
-
-```{toctree}
----
-maxdepth: 1
----
-/examples/query_engine/pdf_tables/recursive_retriever.ipynb
-/examples/retrievers/recursive_retriever_nodes.ipynb
-/examples/retrievers/recurisve_retriever_nodes_braintrust.ipynb
-/examples/retrievers/router_retriever.ipynb
-/examples/retrievers/ensemble_retrieval.ipynb
-/examples/managed/GoogleDemo.ipynb
-/examples/query_engine/multi_doc_auto_retrieval/multi_doc_auto_retrieval.ipynb
-```
-
-### Managed Retrievers
-
-```{toctree}
----
-maxdepth: 1
----
-/examples/managed/GoogleDemo.ipynb
-/examples/managed/vectaraDemo.ipynb
-/examples/managed/zcpDemo.ipynb
-VideoDB Retriever </examples/retrievers/videodb_retriever.ipynb>
-```
-
-### Other Retrievers
-
-These are guides that don't fit neatly into a category but should be highlighted regardless.
-
-```{toctree}
----
-maxdepth: 1
----
-/examples/retrievers/multi_doc_together_hybrid.ipynb
-/examples/retrievers/you_retriever.ipynb
-/examples/index_structs/struct_indices/SQLIndexDemo.ipynb
-DeepMemory (Activeloop) </examples/retrievers/deep_memory.ipynb>
-/examples/retrievers/pathway_retriever.ipynb
-```
diff --git a/docs/optimizing/advanced_retrieval/advanced_retrieval.md b/docs/optimizing/advanced_retrieval/advanced_retrieval.md
deleted file mode 100644
index bb7de1533155146c1e2bd82e4f1580df64b4a6e0..0000000000000000000000000000000000000000
--- a/docs/optimizing/advanced_retrieval/advanced_retrieval.md
+++ /dev/null
@@ -1,64 +0,0 @@
-# Advanced Retrieval Strategies
-
-## Main Advanced Retrieval Strategies
-
-There are a variety of more advanced retrieval strategies you may wish to try, each with different benefits:
-
-- {ref}`Reranking <cohere_rerank>`
-- [Recursive retrieval](/examples/query_engine/pdf_tables/recursive_retriever.ipynb)
-- [Embedded tables](/examples/query_engine/sec_tables/tesla_10q_table.ipynb)
-- [Small-to-big retrieval](/examples/node_postprocessor/MetadataReplacementDemo.ipynb)
-
-See our full [retrievers module guide](/module_guides/querying/retriever/retrievers.md) for a comprehensive list of all retrieval strategies, broken down into different categories.
-
-- Basic retrieval from each index
-- Advanced retrieval and search
-- Auto-Retrieval
-- Knowledge Graph Retrievers
-- Composed/Hierarchical Retrievers
-- and more!
-
-More resources are below.
-
-## Query Transformations
-
-A user query can be transformed before it enters a pipeline (query engine, agent, and more). See resources below on query transformations:
-
-```{toctree}
----
-maxdepth: 1
----
-/examples/query_transformations/query_transform_cookbook.ipynb
-/optimizing/advanced_retrieval/query_transformations.md
-```
-
-## Composable Retrievers
-
-Every retriever is capable of retrieving and running other objects, including
-
-- other retrievers
-- query engines
-- query pipelines
-- other nodes
-
-For more details, check out the guide below.
-
-```{toctree}
----
-maxdepth: 1
----
-/examples/retrievers/composable_retrievers.ipynb
-```
-
-## Third-Party Resources
-
-Here are some third-party resources on advanced retrieval strategies.
-
-```{toctree}
----
-maxdepth: 1
----
-DeepMemory (Activeloop) </examples/retrievers/deep_memory.ipynb>
-/examples/vector_stores/WeaviateIndexDemo-Hybrid.ipynb
-/examples/vector_stores/PineconeIndexDemo-Hybrid.ipynb
-```
diff --git a/docs/optimizing/agentic_strategies/agentic_strategies.md b/docs/optimizing/agentic_strategies/agentic_strategies.md
deleted file mode 100644
index e463737dd385a54631f5fc98d0ed9b55af8255b1..0000000000000000000000000000000000000000
--- a/docs/optimizing/agentic_strategies/agentic_strategies.md
+++ /dev/null
@@ -1,39 +0,0 @@
-# Agentic strategies
-
-You can build agents on top of your existing LlamaIndex RAG pipeline to empower it with automated decision capabilities.
-A lot of modules (routing, query transformations, and more) are already agentic in nature in that they use LLMs for decision making.
-
-## Simpler Agentic Strategies
-
-These include routing and query transformations.
-
-```{toctree}
----
-maxdepth: 1
----
-/module_guides/querying/router/root.md
-/optimizing/advanced_retrieval/query_transformations.md
-Sub Question Query Engine (Intro) </examples/query_engine/sub_question_query_engine.ipynb>
-```
-
-## Data Agents
-
-This guides below show you how to deploy a full agent loop, capable of chain-of-thought and query planning, on top of existing RAG query engines as tools for more advanced decision making.
-
-Make sure to check out our [full module guide on Data Agents](/module_guides/deploying/agents/root.md), which highlight these use cases and much more.
-
-Our [lower-level agent API](/module_guides/deploying/agents/agent_runner.md) shows you the internals of how an agent works (with step-wise execution).
-
-Example guides below (using OpenAI function calling):
-
-```{toctree}
----
-maxdepth: 1
----
-/examples/agent/openai_agent.ipynb
-/examples/agent/openai_agent_with_query_engine.ipynb
-/examples/agent/openai_agent_retrieval.ipynb
-/examples/agent/openai_agent_query_cookbook.ipynb
-/examples/agent/openai_agent_query_plan.ipynb
-/examples/agent/openai_agent_context_retrieval.ipynb
-```
diff --git a/docs/optimizing/custom_modules.md b/docs/optimizing/custom_modules.md
deleted file mode 100644
index 77da6ca78d273cba945f9b4c6b18a1f9e196f0d6..0000000000000000000000000000000000000000
--- a/docs/optimizing/custom_modules.md
+++ /dev/null
@@ -1,54 +0,0 @@
-# Writing Custom Modules
-
-A core design principle of LlamaIndex is that **almost every core module can be subclassed and customized**.
-
-This allows you to use LlamaIndex for any advanced LLM use case, beyond the capabilities offered by our prepackaged modules. You're free to write as much custom code for any given module, but still take advantage of our lower-level abstractions and also plug this module along with other components.
-
-We offer convenient/guided ways to subclass our modules, letting you write your custom logic without having to worry about having to define all boilerplate (for instance, [callbacks](/module_guides/observability/callbacks/root.md)).
-
-This guide centralizes all the resources around writing custom modules in LlamaIndex. Check them out below 👇
-
-## Custom LLMs
-
-- [Custom LLMs](using-custom-llm-advanced)
-
-## Custom Embeddings
-
-- [Custom Embedding Model](custom_embeddings)
-
-## Custom Output Parsers
-
-- [Custom Output Parsers](/examples/output_parsing/llm_program.ipynb)
-
-## Custom Transformations
-
-- [Custom Transformations](custom-transformations)
-
-## Custom Retrievers
-
-- [Custom Retrievers](/examples/query_engine/CustomRetrievers.ipynb)
-- [Custom Knowledge Graph + Vector Retriever](/examples/index_structs/knowledge_graph/KnowledgeGraphIndex_vs_VectorStoreIndex_vs_CustomIndex_combined.ipynb)
-
-## Custom Postprocessors/Rerankers
-
-- [Custom Node Postprocessor](custom-node-postprocessor)
-
-## Custom Query Engines
-
-- [Custom Query Engine](/examples/query_engine/custom_query_engine.ipynb)
-
-## Custom Agents
-
-- [Custom Agents](/examples/agent/custom_agent.ipynb)
-
-## Custom Query Components (for use in Query Pipeline)
-
-- [Custom Query Component](query-pipeline-custom-component)
-
-## Other Ways of Customization
-
-Some modules can be customized heavily within your workflows but not through subclassing (and instead through parameters or functions we expose). We list these in guides below:
-
-- [Customizing Documents](/module_guides/loading/documents_and_nodes/usage_documents.ipynb)
-- [Customizing Nodes](/module_guides/loading/documents_and_nodes/usage_nodes.ipynb)
-- [Customizing Prompts within Higher-Level Modules](/examples/prompts/prompt_mixin.ipynb)
diff --git a/docs/overrides/partials/copyright.html b/docs/overrides/partials/copyright.html
new file mode 100644
index 0000000000000000000000000000000000000000..bce238deba9e02c23305015932f821d862909470
--- /dev/null
+++ b/docs/overrides/partials/copyright.html
@@ -0,0 +1 @@
+<readthedocs-flyout position="bottom-left"></readthedocs-flyout>
diff --git a/docs/poetry.lock b/docs/poetry.lock
new file mode 100644
index 0000000000000000000000000000000000000000..5f5b10885df575ff1766d83ee3aaa8f9056ad816
--- /dev/null
+++ b/docs/poetry.lock
@@ -0,0 +1,1956 @@
+# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand.
+
+[[package]]
+name = "appnope"
+version = "0.1.4"
+description = "Disable App Nap on macOS >= 10.9"
+optional = false
+python-versions = ">=3.6"
+files = [
+    {file = "appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c"},
+    {file = "appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee"},
+]
+
+[[package]]
+name = "asttokens"
+version = "2.4.1"
+description = "Annotate AST trees with source code positions"
+optional = false
+python-versions = "*"
+files = [
+    {file = "asttokens-2.4.1-py2.py3-none-any.whl", hash = "sha256:051ed49c3dcae8913ea7cd08e46a606dba30b79993209636c4875bc1d637bc24"},
+    {file = "asttokens-2.4.1.tar.gz", hash = "sha256:b03869718ba9a6eb027e134bfdf69f38a236d681c83c160d510768af11254ba0"},
+]
+
+[package.dependencies]
+six = ">=1.12.0"
+
+[package.extras]
+astroid = ["astroid (>=1,<2)", "astroid (>=2,<4)"]
+test = ["astroid (>=1,<2)", "astroid (>=2,<4)", "pytest"]
+
+[[package]]
+name = "attrs"
+version = "23.2.0"
+description = "Classes Without Boilerplate"
+optional = false
+python-versions = ">=3.7"
+files = [
+    {file = "attrs-23.2.0-py3-none-any.whl", hash = "sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1"},
+    {file = "attrs-23.2.0.tar.gz", hash = "sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30"},
+]
+
+[package.extras]
+cov = ["attrs[tests]", "coverage[toml] (>=5.3)"]
+dev = ["attrs[tests]", "pre-commit"]
+docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"]
+tests = ["attrs[tests-no-zope]", "zope-interface"]
+tests-mypy = ["mypy (>=1.6)", "pytest-mypy-plugins"]
+tests-no-zope = ["attrs[tests-mypy]", "cloudpickle", "hypothesis", "pympler", "pytest (>=4.3.0)", "pytest-xdist[psutil]"]
+
+[[package]]
+name = "babel"
+version = "2.14.0"
+description = "Internationalization utilities"
+optional = false
+python-versions = ">=3.7"
+files = [
+    {file = "Babel-2.14.0-py3-none-any.whl", hash = "sha256:efb1a25b7118e67ce3a259bed20545c29cb68be8ad2c784c83689981b7a57287"},
+    {file = "Babel-2.14.0.tar.gz", hash = "sha256:6919867db036398ba21eb5c7a0f6b28ab8cbc3ae7a73a44ebe34ae74a4e7d363"},
+]
+
+[package.extras]
+dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"]
+
+[[package]]
+name = "beautifulsoup4"
+version = "4.12.3"
+description = "Screen-scraping library"
+optional = false
+python-versions = ">=3.6.0"
+files = [
+    {file = "beautifulsoup4-4.12.3-py3-none-any.whl", hash = "sha256:b80878c9f40111313e55da8ba20bdba06d8fa3969fc68304167741bbf9e082ed"},
+    {file = "beautifulsoup4-4.12.3.tar.gz", hash = "sha256:74e3d1928edc070d21748185c46e3fb33490f22f52a3addee9aee0f4f7781051"},
+]
+
+[package.dependencies]
+soupsieve = ">1.2"
+
+[package.extras]
+cchardet = ["cchardet"]
+chardet = ["chardet"]
+charset-normalizer = ["charset-normalizer"]
+html5lib = ["html5lib"]
+lxml = ["lxml"]
+
+[[package]]
+name = "bleach"
+version = "6.1.0"
+description = "An easy safelist-based HTML-sanitizing tool."
+optional = false
+python-versions = ">=3.8"
+files = [
+    {file = "bleach-6.1.0-py3-none-any.whl", hash = "sha256:3225f354cfc436b9789c66c4ee030194bee0568fbf9cbdad3bc8b5c26c5f12b6"},
+    {file = "bleach-6.1.0.tar.gz", hash = "sha256:0a31f1837963c41d46bbf1331b8778e1308ea0791db03cc4e7357b97cf42a8fe"},
+]
+
+[package.dependencies]
+six = ">=1.9.0"
+webencodings = "*"
+
+[package.extras]
+css = ["tinycss2 (>=1.1.0,<1.3)"]
+
+[[package]]
+name = "certifi"
+version = "2024.2.2"
+description = "Python package for providing Mozilla's CA Bundle."
+optional = false
+python-versions = ">=3.6"
+files = [
+    {file = "certifi-2024.2.2-py3-none-any.whl", hash = "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1"},
+    {file = "certifi-2024.2.2.tar.gz", hash = "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f"},
+]
+
+[[package]]
+name = "cffi"
+version = "1.16.0"
+description = "Foreign Function Interface for Python calling C code."
+optional = false
+python-versions = ">=3.8"
+files = [
+    {file = "cffi-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6b3d6606d369fc1da4fd8c357d026317fbb9c9b75d36dc16e90e84c26854b088"},
+    {file = "cffi-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ac0f5edd2360eea2f1daa9e26a41db02dd4b0451b48f7c318e217ee092a213e9"},
+    {file = "cffi-1.16.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7e61e3e4fa664a8588aa25c883eab612a188c725755afff6289454d6362b9673"},
+    {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a72e8961a86d19bdb45851d8f1f08b041ea37d2bd8d4fd19903bc3083d80c896"},
+    {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b50bf3f55561dac5438f8e70bfcdfd74543fd60df5fa5f62d94e5867deca684"},
+    {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7651c50c8c5ef7bdb41108b7b8c5a83013bfaa8a935590c5d74627c047a583c7"},
+    {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4108df7fe9b707191e55f33efbcb2d81928e10cea45527879a4749cbe472614"},
+    {file = "cffi-1.16.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:32c68ef735dbe5857c810328cb2481e24722a59a2003018885514d4c09af9743"},
+    {file = "cffi-1.16.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:673739cb539f8cdaa07d92d02efa93c9ccf87e345b9a0b556e3ecc666718468d"},
+    {file = "cffi-1.16.0-cp310-cp310-win32.whl", hash = "sha256:9f90389693731ff1f659e55c7d1640e2ec43ff725cc61b04b2f9c6d8d017df6a"},
+    {file = "cffi-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:e6024675e67af929088fda399b2094574609396b1decb609c55fa58b028a32a1"},
+    {file = "cffi-1.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b84834d0cf97e7d27dd5b7f3aca7b6e9263c56308ab9dc8aae9784abb774d404"},
+    {file = "cffi-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1b8ebc27c014c59692bb2664c7d13ce7a6e9a629be20e54e7271fa696ff2b417"},
+    {file = "cffi-1.16.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ee07e47c12890ef248766a6e55bd38ebfb2bb8edd4142d56db91b21ea68b7627"},
+    {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8a9d3ebe49f084ad71f9269834ceccbf398253c9fac910c4fd7053ff1386936"},
+    {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e70f54f1796669ef691ca07d046cd81a29cb4deb1e5f942003f401c0c4a2695d"},
+    {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5bf44d66cdf9e893637896c7faa22298baebcd18d1ddb6d2626a6e39793a1d56"},
+    {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b78010e7b97fef4bee1e896df8a4bbb6712b7f05b7ef630f9d1da00f6444d2e"},
+    {file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c6a164aa47843fb1b01e941d385aab7215563bb8816d80ff3a363a9f8448a8dc"},
+    {file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e09f3ff613345df5e8c3667da1d918f9149bd623cd9070c983c013792a9a62eb"},
+    {file = "cffi-1.16.0-cp311-cp311-win32.whl", hash = "sha256:2c56b361916f390cd758a57f2e16233eb4f64bcbeee88a4881ea90fca14dc6ab"},
+    {file = "cffi-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:db8e577c19c0fda0beb7e0d4e09e0ba74b1e4c092e0e40bfa12fe05b6f6d75ba"},
+    {file = "cffi-1.16.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:fa3a0128b152627161ce47201262d3140edb5a5c3da88d73a1b790a959126956"},
+    {file = "cffi-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:68e7c44931cc171c54ccb702482e9fc723192e88d25a0e133edd7aff8fcd1f6e"},
+    {file = "cffi-1.16.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abd808f9c129ba2beda4cfc53bde801e5bcf9d6e0f22f095e45327c038bfe68e"},
+    {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88e2b3c14bdb32e440be531ade29d3c50a1a59cd4e51b1dd8b0865c54ea5d2e2"},
+    {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fcc8eb6d5902bb1cf6dc4f187ee3ea80a1eba0a89aba40a5cb20a5087d961357"},
+    {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b7be2d771cdba2942e13215c4e340bfd76398e9227ad10402a8767ab1865d2e6"},
+    {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e715596e683d2ce000574bae5d07bd522c781a822866c20495e52520564f0969"},
+    {file = "cffi-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2d92b25dbf6cae33f65005baf472d2c245c050b1ce709cc4588cdcdd5495b520"},
+    {file = "cffi-1.16.0-cp312-cp312-win32.whl", hash = "sha256:b2ca4e77f9f47c55c194982e10f058db063937845bb2b7a86c84a6cfe0aefa8b"},
+    {file = "cffi-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:68678abf380b42ce21a5f2abde8efee05c114c2fdb2e9eef2efdb0257fba1235"},
+    {file = "cffi-1.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0c9ef6ff37e974b73c25eecc13952c55bceed9112be2d9d938ded8e856138bcc"},
+    {file = "cffi-1.16.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a09582f178759ee8128d9270cd1344154fd473bb77d94ce0aeb2a93ebf0feaf0"},
+    {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e760191dd42581e023a68b758769e2da259b5d52e3103c6060ddc02c9edb8d7b"},
+    {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:80876338e19c951fdfed6198e70bc88f1c9758b94578d5a7c4c91a87af3cf31c"},
+    {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a6a14b17d7e17fa0d207ac08642c8820f84f25ce17a442fd15e27ea18d67c59b"},
+    {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6602bc8dc6f3a9e02b6c22c4fc1e47aa50f8f8e6d3f78a5e16ac33ef5fefa324"},
+    {file = "cffi-1.16.0-cp38-cp38-win32.whl", hash = "sha256:131fd094d1065b19540c3d72594260f118b231090295d8c34e19a7bbcf2e860a"},
+    {file = "cffi-1.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:31d13b0f99e0836b7ff893d37af07366ebc90b678b6664c955b54561fc36ef36"},
+    {file = "cffi-1.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:582215a0e9adbe0e379761260553ba11c58943e4bbe9c36430c4ca6ac74b15ed"},
+    {file = "cffi-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b29ebffcf550f9da55bec9e02ad430c992a87e5f512cd63388abb76f1036d8d2"},
+    {file = "cffi-1.16.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dc9b18bf40cc75f66f40a7379f6a9513244fe33c0e8aa72e2d56b0196a7ef872"},
+    {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cb4a35b3642fc5c005a6755a5d17c6c8b6bcb6981baf81cea8bfbc8903e8ba8"},
+    {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b86851a328eedc692acf81fb05444bdf1891747c25af7529e39ddafaf68a4f3f"},
+    {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c0f31130ebc2d37cdd8e44605fb5fa7ad59049298b3f745c74fa74c62fbfcfc4"},
+    {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f8e709127c6c77446a8c0a8c8bf3c8ee706a06cd44b1e827c3e6a2ee6b8c098"},
+    {file = "cffi-1.16.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:748dcd1e3d3d7cd5443ef03ce8685043294ad6bd7c02a38d1bd367cfd968e000"},
+    {file = "cffi-1.16.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8895613bcc094d4a1b2dbe179d88d7fb4a15cee43c052e8885783fac397d91fe"},
+    {file = "cffi-1.16.0-cp39-cp39-win32.whl", hash = "sha256:ed86a35631f7bfbb28e108dd96773b9d5a6ce4811cf6ea468bb6a359b256b1e4"},
+    {file = "cffi-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:3686dffb02459559c74dd3d81748269ffb0eb027c39a6fc99502de37d501faa8"},
+    {file = "cffi-1.16.0.tar.gz", hash = "sha256:bcb3ef43e58665bbda2fb198698fcae6776483e0c4a631aa5647806c25e02cc0"},
+]
+
+[package.dependencies]
+pycparser = "*"
+
+[[package]]
+name = "charset-normalizer"
+version = "3.3.2"
+description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
+optional = false
+python-versions = ">=3.7.0"
+files = [
+    {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"},
+    {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"},
+    {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"},
+    {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"},
+    {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"},
+    {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"},
+    {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"},
+    {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"},
+    {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"},
+    {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"},
+    {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"},
+    {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"},
+    {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"},
+    {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"},
+    {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"},
+    {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"},
+    {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"},
+    {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"},
+    {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"},
+    {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"},
+    {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"},
+    {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"},
+    {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"},
+    {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"},
+    {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"},
+    {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"},
+    {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"},
+    {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"},
+    {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"},
+    {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"},
+    {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"},
+    {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"},
+    {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"},
+    {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"},
+    {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"},
+    {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"},
+    {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"},
+    {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"},
+    {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"},
+    {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"},
+    {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"},
+    {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"},
+    {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"},
+    {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"},
+    {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"},
+    {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"},
+    {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"},
+    {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"},
+    {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"},
+    {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"},
+    {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"},
+    {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"},
+    {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"},
+    {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"},
+    {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"},
+    {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"},
+    {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"},
+    {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"},
+    {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"},
+    {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"},
+    {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"},
+    {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"},
+    {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"},
+    {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"},
+    {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"},
+    {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"},
+    {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"},
+    {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"},
+    {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"},
+    {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"},
+    {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"},
+    {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"},
+    {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"},
+    {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"},
+    {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"},
+    {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"},
+    {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"},
+    {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"},
+    {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"},
+    {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"},
+    {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"},
+    {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"},
+    {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"},
+    {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"},
+    {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"},
+    {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"},
+    {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"},
+    {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"},
+    {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"},
+    {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"},
+]
+
+[[package]]
+name = "click"
+version = "8.1.7"
+description = "Composable command line interface toolkit"
+optional = false
+python-versions = ">=3.7"
+files = [
+    {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"},
+    {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"},
+]
+
+[package.dependencies]
+colorama = {version = "*", markers = "platform_system == \"Windows\""}
+
+[[package]]
+name = "colorama"
+version = "0.4.6"
+description = "Cross-platform colored terminal text."
+optional = false
+python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7"
+files = [
+    {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"},
+    {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"},
+]
+
+[[package]]
+name = "comm"
+version = "0.2.2"
+description = "Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc."
+optional = false
+python-versions = ">=3.8"
+files = [
+    {file = "comm-0.2.2-py3-none-any.whl", hash = "sha256:e6fb86cb70ff661ee8c9c14e7d36d6de3b4066f1441be4063df9c5009f0a64d3"},
+    {file = "comm-0.2.2.tar.gz", hash = "sha256:3fd7a84065306e07bea1773df6eb8282de51ba82f77c72f9c85716ab11fe980e"},
+]
+
+[package.dependencies]
+traitlets = ">=4"
+
+[package.extras]
+test = ["pytest"]
+
+[[package]]
+name = "debugpy"
+version = "1.8.1"
+description = "An implementation of the Debug Adapter Protocol for Python"
+optional = false
+python-versions = ">=3.8"
+files = [
+    {file = "debugpy-1.8.1-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:3bda0f1e943d386cc7a0e71bfa59f4137909e2ed947fb3946c506e113000f741"},
+    {file = "debugpy-1.8.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dda73bf69ea479c8577a0448f8c707691152e6c4de7f0c4dec5a4bc11dee516e"},
+    {file = "debugpy-1.8.1-cp310-cp310-win32.whl", hash = "sha256:3a79c6f62adef994b2dbe9fc2cc9cc3864a23575b6e387339ab739873bea53d0"},
+    {file = "debugpy-1.8.1-cp310-cp310-win_amd64.whl", hash = "sha256:7eb7bd2b56ea3bedb009616d9e2f64aab8fc7000d481faec3cd26c98a964bcdd"},
+    {file = "debugpy-1.8.1-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:016a9fcfc2c6b57f939673c874310d8581d51a0fe0858e7fac4e240c5eb743cb"},
+    {file = "debugpy-1.8.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd97ed11a4c7f6d042d320ce03d83b20c3fb40da892f994bc041bbc415d7a099"},
+    {file = "debugpy-1.8.1-cp311-cp311-win32.whl", hash = "sha256:0de56aba8249c28a300bdb0672a9b94785074eb82eb672db66c8144fff673146"},
+    {file = "debugpy-1.8.1-cp311-cp311-win_amd64.whl", hash = "sha256:1a9fe0829c2b854757b4fd0a338d93bc17249a3bf69ecf765c61d4c522bb92a8"},
+    {file = "debugpy-1.8.1-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:3ebb70ba1a6524d19fa7bb122f44b74170c447d5746a503e36adc244a20ac539"},
+    {file = "debugpy-1.8.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2e658a9630f27534e63922ebf655a6ab60c370f4d2fc5c02a5b19baf4410ace"},
+    {file = "debugpy-1.8.1-cp312-cp312-win32.whl", hash = "sha256:caad2846e21188797a1f17fc09c31b84c7c3c23baf2516fed5b40b378515bbf0"},
+    {file = "debugpy-1.8.1-cp312-cp312-win_amd64.whl", hash = "sha256:edcc9f58ec0fd121a25bc950d4578df47428d72e1a0d66c07403b04eb93bcf98"},
+    {file = "debugpy-1.8.1-cp38-cp38-macosx_11_0_x86_64.whl", hash = "sha256:7a3afa222f6fd3d9dfecd52729bc2e12c93e22a7491405a0ecbf9e1d32d45b39"},
+    {file = "debugpy-1.8.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d915a18f0597ef685e88bb35e5d7ab968964b7befefe1aaea1eb5b2640b586c7"},
+    {file = "debugpy-1.8.1-cp38-cp38-win32.whl", hash = "sha256:92116039b5500633cc8d44ecc187abe2dfa9b90f7a82bbf81d079fcdd506bae9"},
+    {file = "debugpy-1.8.1-cp38-cp38-win_amd64.whl", hash = "sha256:e38beb7992b5afd9d5244e96ad5fa9135e94993b0c551ceebf3fe1a5d9beb234"},
+    {file = "debugpy-1.8.1-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:bfb20cb57486c8e4793d41996652e5a6a885b4d9175dd369045dad59eaacea42"},
+    {file = "debugpy-1.8.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efd3fdd3f67a7e576dd869c184c5dd71d9aaa36ded271939da352880c012e703"},
+    {file = "debugpy-1.8.1-cp39-cp39-win32.whl", hash = "sha256:58911e8521ca0c785ac7a0539f1e77e0ce2df753f786188f382229278b4cdf23"},
+    {file = "debugpy-1.8.1-cp39-cp39-win_amd64.whl", hash = "sha256:6df9aa9599eb05ca179fb0b810282255202a66835c6efb1d112d21ecb830ddd3"},
+    {file = "debugpy-1.8.1-py2.py3-none-any.whl", hash = "sha256:28acbe2241222b87e255260c76741e1fbf04fdc3b6d094fcf57b6c6f75ce1242"},
+    {file = "debugpy-1.8.1.zip", hash = "sha256:f696d6be15be87aef621917585f9bb94b1dc9e8aced570db1b8a6fc14e8f9b42"},
+]
+
+[[package]]
+name = "decorator"
+version = "5.1.1"
+description = "Decorators for Humans"
+optional = false
+python-versions = ">=3.5"
+files = [
+    {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"},
+    {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"},
+]
+
+[[package]]
+name = "defusedxml"
+version = "0.7.1"
+description = "XML bomb protection for Python stdlib modules"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+files = [
+    {file = "defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61"},
+    {file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"},
+]
+
+[[package]]
+name = "executing"
+version = "2.0.1"
+description = "Get the currently executing AST node of a frame, and other information"
+optional = false
+python-versions = ">=3.5"
+files = [
+    {file = "executing-2.0.1-py2.py3-none-any.whl", hash = "sha256:eac49ca94516ccc753f9fb5ce82603156e590b27525a8bc32cce8ae302eb61bc"},
+    {file = "executing-2.0.1.tar.gz", hash = "sha256:35afe2ce3affba8ee97f2d69927fa823b08b472b7b994e36a52a964b93d16147"},
+]
+
+[package.extras]
+tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipython", "littleutils", "pytest", "rich"]
+
+[[package]]
+name = "fastjsonschema"
+version = "2.19.1"
+description = "Fastest Python implementation of JSON schema"
+optional = false
+python-versions = "*"
+files = [
+    {file = "fastjsonschema-2.19.1-py3-none-any.whl", hash = "sha256:3672b47bc94178c9f23dbb654bf47440155d4db9df5f7bc47643315f9c405cd0"},
+    {file = "fastjsonschema-2.19.1.tar.gz", hash = "sha256:e3126a94bdc4623d3de4485f8d468a12f02a67921315ddc87836d6e456dc789d"},
+]
+
+[package.extras]
+devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benchmark", "pytest-cache", "validictory"]
+
+[[package]]
+name = "ghp-import"
+version = "2.1.0"
+description = "Copy your docs directly to the gh-pages branch."
+optional = false
+python-versions = "*"
+files = [
+    {file = "ghp-import-2.1.0.tar.gz", hash = "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343"},
+    {file = "ghp_import-2.1.0-py3-none-any.whl", hash = "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619"},
+]
+
+[package.dependencies]
+python-dateutil = ">=2.8.1"
+
+[package.extras]
+dev = ["flake8", "markdown", "twine", "wheel"]
+
+[[package]]
+name = "griffe"
+version = "0.42.0"
+description = "Signatures for entire Python programs. Extract the structure, the frame, the skeleton of your project, to generate API documentation or find breaking changes in your API."
+optional = false
+python-versions = ">=3.8"
+files = [
+    {file = "griffe-0.42.0-py3-none-any.whl", hash = "sha256:384df6b802a60f70e65fdb7e83f5b27e2da869a12eac85b25b55250012dbc263"},
+    {file = "griffe-0.42.0.tar.gz", hash = "sha256:fb83ee602701ffdf99c9a6bf5f0a5a3bd877364b3bffb2c451dc8fbd9645b0cf"},
+]
+
+[package.dependencies]
+colorama = ">=0.4"
+
+[[package]]
+name = "idna"
+version = "3.6"
+description = "Internationalized Domain Names in Applications (IDNA)"
+optional = false
+python-versions = ">=3.5"
+files = [
+    {file = "idna-3.6-py3-none-any.whl", hash = "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f"},
+    {file = "idna-3.6.tar.gz", hash = "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca"},
+]
+
+[[package]]
+name = "ipykernel"
+version = "6.29.3"
+description = "IPython Kernel for Jupyter"
+optional = false
+python-versions = ">=3.8"
+files = [
+    {file = "ipykernel-6.29.3-py3-none-any.whl", hash = "sha256:5aa086a4175b0229d4eca211e181fb473ea78ffd9869af36ba7694c947302a21"},
+    {file = "ipykernel-6.29.3.tar.gz", hash = "sha256:e14c250d1f9ea3989490225cc1a542781b095a18a19447fcf2b5eaf7d0ac5bd2"},
+]
+
+[package.dependencies]
+appnope = {version = "*", markers = "platform_system == \"Darwin\""}
+comm = ">=0.1.1"
+debugpy = ">=1.6.5"
+ipython = ">=7.23.1"
+jupyter-client = ">=6.1.12"
+jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0"
+matplotlib-inline = ">=0.1"
+nest-asyncio = "*"
+packaging = "*"
+psutil = "*"
+pyzmq = ">=24"
+tornado = ">=6.1"
+traitlets = ">=5.4.0"
+
+[package.extras]
+cov = ["coverage[toml]", "curio", "matplotlib", "pytest-cov", "trio"]
+docs = ["myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "trio"]
+pyqt5 = ["pyqt5"]
+pyside6 = ["pyside6"]
+test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>=0.23.5)", "pytest-cov", "pytest-timeout"]
+
+[[package]]
+name = "ipython"
+version = "8.22.2"
+description = "IPython: Productive Interactive Computing"
+optional = false
+python-versions = ">=3.10"
+files = [
+    {file = "ipython-8.22.2-py3-none-any.whl", hash = "sha256:3c86f284c8f3d8f2b6c662f885c4889a91df7cd52056fd02b7d8d6195d7f56e9"},
+    {file = "ipython-8.22.2.tar.gz", hash = "sha256:2dcaad9049f9056f1fef63514f176c7d41f930daa78d05b82a176202818f2c14"},
+]
+
+[package.dependencies]
+colorama = {version = "*", markers = "sys_platform == \"win32\""}
+decorator = "*"
+jedi = ">=0.16"
+matplotlib-inline = "*"
+pexpect = {version = ">4.3", markers = "sys_platform != \"win32\" and sys_platform != \"emscripten\""}
+prompt-toolkit = ">=3.0.41,<3.1.0"
+pygments = ">=2.4.0"
+stack-data = "*"
+traitlets = ">=5.13.0"
+
+[package.extras]
+all = ["ipython[black,doc,kernel,nbconvert,nbformat,notebook,parallel,qtconsole,terminal]", "ipython[test,test-extra]"]
+black = ["black"]
+doc = ["docrepr", "exceptiongroup", "ipykernel", "ipython[test]", "matplotlib", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "sphinxcontrib-jquery", "stack-data", "typing-extensions"]
+kernel = ["ipykernel"]
+nbconvert = ["nbconvert"]
+nbformat = ["nbformat"]
+notebook = ["ipywidgets", "notebook"]
+parallel = ["ipyparallel"]
+qtconsole = ["qtconsole"]
+test = ["pickleshare", "pytest (<8)", "pytest-asyncio (<0.22)", "testpath"]
+test-extra = ["curio", "ipython[test]", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.23)", "pandas", "trio"]
+
+[[package]]
+name = "jedi"
+version = "0.19.1"
+description = "An autocompletion tool for Python that can be used for text editors."
+optional = false
+python-versions = ">=3.6"
+files = [
+    {file = "jedi-0.19.1-py2.py3-none-any.whl", hash = "sha256:e983c654fe5c02867aef4cdfce5a2fbb4a50adc0af145f70504238f18ef5e7e0"},
+    {file = "jedi-0.19.1.tar.gz", hash = "sha256:cf0496f3651bc65d7174ac1b7d043eff454892c708a87d1b683e57b569927ffd"},
+]
+
+[package.dependencies]
+parso = ">=0.8.3,<0.9.0"
+
+[package.extras]
+docs = ["Jinja2 (==2.11.3)", "MarkupSafe (==1.1.1)", "Pygments (==2.8.1)", "alabaster (==0.7.12)", "babel (==2.9.1)", "chardet (==4.0.0)", "commonmark (==0.8.1)", "docutils (==0.17.1)", "future (==0.18.2)", "idna (==2.10)", "imagesize (==1.2.0)", "mock (==1.0.1)", "packaging (==20.9)", "pyparsing (==2.4.7)", "pytz (==2021.1)", "readthedocs-sphinx-ext (==2.1.4)", "recommonmark (==0.5.0)", "requests (==2.25.1)", "six (==1.15.0)", "snowballstemmer (==2.1.0)", "sphinx (==1.8.5)", "sphinx-rtd-theme (==0.4.3)", "sphinxcontrib-serializinghtml (==1.1.4)", "sphinxcontrib-websupport (==1.2.4)", "urllib3 (==1.26.4)"]
+qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"]
+testing = ["Django", "attrs", "colorama", "docopt", "pytest (<7.0.0)"]
+
+[[package]]
+name = "jinja2"
+version = "3.1.3"
+description = "A very fast and expressive template engine."
+optional = false
+python-versions = ">=3.7"
+files = [
+    {file = "Jinja2-3.1.3-py3-none-any.whl", hash = "sha256:7d6d50dd97d52cbc355597bd845fabfbac3f551e1f99619e39a35ce8c370b5fa"},
+    {file = "Jinja2-3.1.3.tar.gz", hash = "sha256:ac8bd6544d4bb2c9792bf3a159e80bba8fda7f07e81bc3aed565432d5925ba90"},
+]
+
+[package.dependencies]
+MarkupSafe = ">=2.0"
+
+[package.extras]
+i18n = ["Babel (>=2.7)"]
+
+[[package]]
+name = "jsonschema"
+version = "4.21.1"
+description = "An implementation of JSON Schema validation for Python"
+optional = false
+python-versions = ">=3.8"
+files = [
+    {file = "jsonschema-4.21.1-py3-none-any.whl", hash = "sha256:7996507afae316306f9e2290407761157c6f78002dcf7419acb99822143d1c6f"},
+    {file = "jsonschema-4.21.1.tar.gz", hash = "sha256:85727c00279f5fa6bedbe6238d2aa6403bedd8b4864ab11207d07df3cc1b2ee5"},
+]
+
+[package.dependencies]
+attrs = ">=22.2.0"
+jsonschema-specifications = ">=2023.03.6"
+referencing = ">=0.28.4"
+rpds-py = ">=0.7.1"
+
+[package.extras]
+format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"]
+format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"]
+
+[[package]]
+name = "jsonschema-specifications"
+version = "2023.12.1"
+description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry"
+optional = false
+python-versions = ">=3.8"
+files = [
+    {file = "jsonschema_specifications-2023.12.1-py3-none-any.whl", hash = "sha256:87e4fdf3a94858b8a2ba2778d9ba57d8a9cafca7c7489c46ba0d30a8bc6a9c3c"},
+    {file = "jsonschema_specifications-2023.12.1.tar.gz", hash = "sha256:48a76787b3e70f5ed53f1160d2b81f586e4ca6d1548c5de7085d1682674764cc"},
+]
+
+[package.dependencies]
+referencing = ">=0.31.0"
+
+[[package]]
+name = "jupyter-client"
+version = "8.6.1"
+description = "Jupyter protocol implementation and client libraries"
+optional = false
+python-versions = ">=3.8"
+files = [
+    {file = "jupyter_client-8.6.1-py3-none-any.whl", hash = "sha256:3b7bd22f058434e3b9a7ea4b1500ed47de2713872288c0d511d19926f99b459f"},
+    {file = "jupyter_client-8.6.1.tar.gz", hash = "sha256:e842515e2bab8e19186d89fdfea7abd15e39dd581f94e399f00e2af5a1652d3f"},
+]
+
+[package.dependencies]
+jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0"
+python-dateutil = ">=2.8.2"
+pyzmq = ">=23.0"
+tornado = ">=6.2"
+traitlets = ">=5.3"
+
+[package.extras]
+docs = ["ipykernel", "myst-parser", "pydata-sphinx-theme", "sphinx (>=4)", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"]
+test = ["coverage", "ipykernel (>=6.14)", "mypy", "paramiko", "pre-commit", "pytest", "pytest-cov", "pytest-jupyter[client] (>=0.4.1)", "pytest-timeout"]
+
+[[package]]
+name = "jupyter-core"
+version = "5.7.2"
+description = "Jupyter core package. A base package on which Jupyter projects rely."
+optional = false
+python-versions = ">=3.8"
+files = [
+    {file = "jupyter_core-5.7.2-py3-none-any.whl", hash = "sha256:4f7315d2f6b4bcf2e3e7cb6e46772eba760ae459cd1f59d29eb57b0a01bd7409"},
+    {file = "jupyter_core-5.7.2.tar.gz", hash = "sha256:aa5f8d32bbf6b431ac830496da7392035d6f61b4f54872f15c4bd2a9c3f536d9"},
+]
+
+[package.dependencies]
+platformdirs = ">=2.5"
+pywin32 = {version = ">=300", markers = "sys_platform == \"win32\" and platform_python_implementation != \"PyPy\""}
+traitlets = ">=5.3"
+
+[package.extras]
+docs = ["myst-parser", "pydata-sphinx-theme", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "traitlets"]
+test = ["ipykernel", "pre-commit", "pytest (<8)", "pytest-cov", "pytest-timeout"]
+
+[[package]]
+name = "jupyterlab-pygments"
+version = "0.3.0"
+description = "Pygments theme using JupyterLab CSS variables"
+optional = false
+python-versions = ">=3.8"
+files = [
+    {file = "jupyterlab_pygments-0.3.0-py3-none-any.whl", hash = "sha256:841a89020971da1d8693f1a99997aefc5dc424bb1b251fd6322462a1b8842780"},
+    {file = "jupyterlab_pygments-0.3.0.tar.gz", hash = "sha256:721aca4d9029252b11cfa9d185e5b5af4d54772bb8072f9b7036f4170054d35d"},
+]
+
+[[package]]
+name = "jupytext"
+version = "1.16.1"
+description = "Jupyter notebooks as Markdown documents, Julia, Python or R scripts"
+optional = false
+python-versions = ">=3.8"
+files = [
+    {file = "jupytext-1.16.1-py3-none-any.whl", hash = "sha256:796ec4f68ada663569e5d38d4ef03738a01284bfe21c943c485bc36433898bd0"},
+    {file = "jupytext-1.16.1.tar.gz", hash = "sha256:68c7b68685e870e80e60fda8286fbd6269e9c74dc1df4316df6fe46eabc94c99"},
+]
+
+[package.dependencies]
+markdown-it-py = ">=1.0"
+mdit-py-plugins = "*"
+nbformat = "*"
+packaging = "*"
+pyyaml = "*"
+toml = "*"
+
+[package.extras]
+dev = ["jupytext[test-cov,test-external]"]
+docs = ["myst-parser", "sphinx", "sphinx-copybutton", "sphinx-rtd-theme"]
+test = ["pytest", "pytest-randomly", "pytest-xdist"]
+test-cov = ["jupytext[test-integration]", "pytest-cov (>=2.6.1)"]
+test-external = ["autopep8", "black", "flake8", "gitpython", "isort", "jupyter-fs (<0.4.0)", "jupytext[test-integration]", "pre-commit", "sphinx-gallery (<0.8)"]
+test-functional = ["jupytext[test]"]
+test-integration = ["ipykernel", "jupyter-server (!=2.11)", "jupytext[test-functional]", "nbconvert"]
+test-ui = ["calysto-bash"]
+
+[[package]]
+name = "markdown"
+version = "3.5.2"
+description = "Python implementation of John Gruber's Markdown."
+optional = false
+python-versions = ">=3.8"
+files = [
+    {file = "Markdown-3.5.2-py3-none-any.whl", hash = "sha256:d43323865d89fc0cb9b20c75fc8ad313af307cc087e84b657d9eec768eddeadd"},
+    {file = "Markdown-3.5.2.tar.gz", hash = "sha256:e1ac7b3dc550ee80e602e71c1d168002f062e49f1b11e26a36264dafd4df2ef8"},
+]
+
+[package.extras]
+docs = ["mdx-gh-links (>=0.2)", "mkdocs (>=1.5)", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-nature (>=0.6)", "mkdocs-section-index", "mkdocstrings[python]"]
+testing = ["coverage", "pyyaml"]
+
+[[package]]
+name = "markdown-it-py"
+version = "3.0.0"
+description = "Python port of markdown-it. Markdown parsing, done right!"
+optional = false
+python-versions = ">=3.8"
+files = [
+    {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"},
+    {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"},
+]
+
+[package.dependencies]
+mdurl = ">=0.1,<1.0"
+
+[package.extras]
+benchmarking = ["psutil", "pytest", "pytest-benchmark"]
+code-style = ["pre-commit (>=3.0,<4.0)"]
+compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0,<2.0)", "mistune (>=2.0,<3.0)", "panflute (>=2.3,<3.0)"]
+linkify = ["linkify-it-py (>=1,<3)"]
+plugins = ["mdit-py-plugins"]
+profiling = ["gprof2dot"]
+rtd = ["jupyter_sphinx", "mdit-py-plugins", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"]
+testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"]
+
+[[package]]
+name = "markupsafe"
+version = "2.1.5"
+description = "Safely add untrusted strings to HTML/XML markup."
+optional = false
+python-versions = ">=3.7"
+files = [
+    {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc"},
+    {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5"},
+    {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46"},
+    {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f"},
+    {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900"},
+    {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff"},
+    {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad"},
+    {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd"},
+    {file = "MarkupSafe-2.1.5-cp310-cp310-win32.whl", hash = "sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4"},
+    {file = "MarkupSafe-2.1.5-cp310-cp310-win_amd64.whl", hash = "sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5"},
+    {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f"},
+    {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2"},
+    {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced"},
+    {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5"},
+    {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c"},
+    {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f"},
+    {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a"},
+    {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f"},
+    {file = "MarkupSafe-2.1.5-cp311-cp311-win32.whl", hash = "sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906"},
+    {file = "MarkupSafe-2.1.5-cp311-cp311-win_amd64.whl", hash = "sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617"},
+    {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1"},
+    {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4"},
+    {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee"},
+    {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5"},
+    {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b"},
+    {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a"},
+    {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f"},
+    {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169"},
+    {file = "MarkupSafe-2.1.5-cp312-cp312-win32.whl", hash = "sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad"},
+    {file = "MarkupSafe-2.1.5-cp312-cp312-win_amd64.whl", hash = "sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb"},
+    {file = "MarkupSafe-2.1.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f"},
+    {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf"},
+    {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a"},
+    {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52"},
+    {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9"},
+    {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df"},
+    {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50"},
+    {file = "MarkupSafe-2.1.5-cp37-cp37m-win32.whl", hash = "sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371"},
+    {file = "MarkupSafe-2.1.5-cp37-cp37m-win_amd64.whl", hash = "sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2"},
+    {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a"},
+    {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46"},
+    {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532"},
+    {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab"},
+    {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68"},
+    {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0"},
+    {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4"},
+    {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3"},
+    {file = "MarkupSafe-2.1.5-cp38-cp38-win32.whl", hash = "sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff"},
+    {file = "MarkupSafe-2.1.5-cp38-cp38-win_amd64.whl", hash = "sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029"},
+    {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf"},
+    {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2"},
+    {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8"},
+    {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3"},
+    {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465"},
+    {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e"},
+    {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea"},
+    {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6"},
+    {file = "MarkupSafe-2.1.5-cp39-cp39-win32.whl", hash = "sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf"},
+    {file = "MarkupSafe-2.1.5-cp39-cp39-win_amd64.whl", hash = "sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5"},
+    {file = "MarkupSafe-2.1.5.tar.gz", hash = "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b"},
+]
+
+[[package]]
+name = "matplotlib-inline"
+version = "0.1.6"
+description = "Inline Matplotlib backend for Jupyter"
+optional = false
+python-versions = ">=3.5"
+files = [
+    {file = "matplotlib-inline-0.1.6.tar.gz", hash = "sha256:f887e5f10ba98e8d2b150ddcf4702c1e5f8b3a20005eb0f74bfdbd360ee6f304"},
+    {file = "matplotlib_inline-0.1.6-py3-none-any.whl", hash = "sha256:f1f41aab5328aa5aaea9b16d083b128102f8712542f819fe7e6a420ff581b311"},
+]
+
+[package.dependencies]
+traitlets = "*"
+
+[[package]]
+name = "mdit-py-plugins"
+version = "0.4.0"
+description = "Collection of plugins for markdown-it-py"
+optional = false
+python-versions = ">=3.8"
+files = [
+    {file = "mdit_py_plugins-0.4.0-py3-none-any.whl", hash = "sha256:b51b3bb70691f57f974e257e367107857a93b36f322a9e6d44ca5bf28ec2def9"},
+    {file = "mdit_py_plugins-0.4.0.tar.gz", hash = "sha256:d8ab27e9aed6c38aa716819fedfde15ca275715955f8a185a8e1cf90fb1d2c1b"},
+]
+
+[package.dependencies]
+markdown-it-py = ">=1.0.0,<4.0.0"
+
+[package.extras]
+code-style = ["pre-commit"]
+rtd = ["myst-parser", "sphinx-book-theme"]
+testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"]
+
+[[package]]
+name = "mdurl"
+version = "0.1.2"
+description = "Markdown URL utilities"
+optional = false
+python-versions = ">=3.7"
+files = [
+    {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"},
+    {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"},
+]
+
+[[package]]
+name = "mergedeep"
+version = "1.3.4"
+description = "A deep merge function for 🐍."
+optional = false
+python-versions = ">=3.6"
+files = [
+    {file = "mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307"},
+    {file = "mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8"},
+]
+
+[[package]]
+name = "mistune"
+version = "3.0.2"
+description = "A sane and fast Markdown parser with useful plugins and renderers"
+optional = false
+python-versions = ">=3.7"
+files = [
+    {file = "mistune-3.0.2-py3-none-any.whl", hash = "sha256:71481854c30fdbc938963d3605b72501f5c10a9320ecd412c121c163a1c7d205"},
+    {file = "mistune-3.0.2.tar.gz", hash = "sha256:fc7f93ded930c92394ef2cb6f04a8aabab4117a91449e72dcc8dfa646a508be8"},
+]
+
+[[package]]
+name = "mkdocs"
+version = "1.5.3"
+description = "Project documentation with Markdown."
+optional = false
+python-versions = ">=3.7"
+files = [
+    {file = "mkdocs-1.5.3-py3-none-any.whl", hash = "sha256:3b3a78e736b31158d64dbb2f8ba29bd46a379d0c6e324c2246c3bc3d2189cfc1"},
+    {file = "mkdocs-1.5.3.tar.gz", hash = "sha256:eb7c99214dcb945313ba30426c2451b735992c73c2e10838f76d09e39ff4d0e2"},
+]
+
+[package.dependencies]
+click = ">=7.0"
+colorama = {version = ">=0.4", markers = "platform_system == \"Windows\""}
+ghp-import = ">=1.0"
+jinja2 = ">=2.11.1"
+markdown = ">=3.2.1"
+markupsafe = ">=2.0.1"
+mergedeep = ">=1.3.4"
+packaging = ">=20.5"
+pathspec = ">=0.11.1"
+platformdirs = ">=2.2.0"
+pyyaml = ">=5.1"
+pyyaml-env-tag = ">=0.1"
+watchdog = ">=2.0"
+
+[package.extras]
+i18n = ["babel (>=2.9.0)"]
+min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-import (==1.0)", "importlib-metadata (==4.3)", "jinja2 (==2.11.1)", "markdown (==3.2.1)", "markupsafe (==2.0.1)", "mergedeep (==1.3.4)", "packaging (==20.5)", "pathspec (==0.11.1)", "platformdirs (==2.2.0)", "pyyaml (==5.1)", "pyyaml-env-tag (==0.1)", "typing-extensions (==3.10)", "watchdog (==2.0)"]
+
+[[package]]
+name = "mkdocs-autorefs"
+version = "1.0.1"
+description = "Automatically link across pages in MkDocs."
+optional = false
+python-versions = ">=3.8"
+files = [
+    {file = "mkdocs_autorefs-1.0.1-py3-none-any.whl", hash = "sha256:aacdfae1ab197780fb7a2dac92ad8a3d8f7ca8049a9cbe56a4218cd52e8da570"},
+    {file = "mkdocs_autorefs-1.0.1.tar.gz", hash = "sha256:f684edf847eced40b570b57846b15f0bf57fb93ac2c510450775dcf16accb971"},
+]
+
+[package.dependencies]
+Markdown = ">=3.3"
+markupsafe = ">=2.0.1"
+mkdocs = ">=1.1"
+
+[[package]]
+name = "mkdocs-include-dir-to-nav"
+version = "1.2.0"
+description = "A MkDocs plugin include all file in dir to navigation"
+optional = false
+python-versions = ">=3.6"
+files = [
+    {file = "mkdocs_include_dir_to_nav-1.2.0-py3-none-any.whl", hash = "sha256:b09de17ad754aa93aec7ba64acf8fdd53f7a2ceb92e8cffe21646b0e97f4ddf0"},
+    {file = "mkdocs_include_dir_to_nav-1.2.0.tar.gz", hash = "sha256:2d7b0bb581471fce6f215b6381f1f4d90a3a069829281b7f5d01a5b7abee15d0"},
+]
+
+[package.dependencies]
+mkdocs = ">=1.0.4"
+
+[[package]]
+name = "mkdocs-jupyter"
+version = "0.24.6"
+description = "Use Jupyter in mkdocs websites"
+optional = false
+python-versions = ">=3.9"
+files = [
+    {file = "mkdocs_jupyter-0.24.6-py3-none-any.whl", hash = "sha256:56fb7ad796f2414a4143d54a966b805caf315c32413e97f85591623fa87dceca"},
+    {file = "mkdocs_jupyter-0.24.6.tar.gz", hash = "sha256:89fcbe8a9523864d5416de1a60711640b6bc2972279d2adf46ed2776c2d9ff7c"},
+]
+
+[package.dependencies]
+ipykernel = ">6.0.0,<7.0.0"
+jupytext = ">1.13.8,<2"
+mkdocs = ">=1.4.0,<2"
+mkdocs-material = ">9.0.0"
+nbconvert = ">=7.2.9,<8"
+pygments = ">2.12.0"
+
+[[package]]
+name = "mkdocs-material"
+version = "9.5.13"
+description = "Documentation that simply works"
+optional = false
+python-versions = ">=3.8"
+files = [
+    {file = "mkdocs_material-9.5.13-py3-none-any.whl", hash = "sha256:5cbe17fee4e3b4980c8420a04cc762d8dc052ef1e10532abd4fce88e5ea9ce6a"},
+    {file = "mkdocs_material-9.5.13.tar.gz", hash = "sha256:d8e4caae576312a88fd2609b81cf43d233cdbe36860d67a68702b018b425bd87"},
+]
+
+[package.dependencies]
+babel = ">=2.10,<3.0"
+colorama = ">=0.4,<1.0"
+jinja2 = ">=3.0,<4.0"
+markdown = ">=3.2,<4.0"
+mkdocs = ">=1.5.3,<1.6.0"
+mkdocs-material-extensions = ">=1.3,<2.0"
+paginate = ">=0.5,<1.0"
+pygments = ">=2.16,<3.0"
+pymdown-extensions = ">=10.2,<11.0"
+regex = ">=2022.4"
+requests = ">=2.26,<3.0"
+
+[package.extras]
+git = ["mkdocs-git-committers-plugin-2 (>=1.1,<2.0)", "mkdocs-git-revision-date-localized-plugin (>=1.2.4,<2.0)"]
+imaging = ["cairosvg (>=2.6,<3.0)", "pillow (>=10.2,<11.0)"]
+recommended = ["mkdocs-minify-plugin (>=0.7,<1.0)", "mkdocs-redirects (>=1.2,<2.0)", "mkdocs-rss-plugin (>=1.6,<2.0)"]
+
+[[package]]
+name = "mkdocs-material-extensions"
+version = "1.3.1"
+description = "Extension pack for Python Markdown and MkDocs Material."
+optional = false
+python-versions = ">=3.8"
+files = [
+    {file = "mkdocs_material_extensions-1.3.1-py3-none-any.whl", hash = "sha256:adff8b62700b25cb77b53358dad940f3ef973dd6db797907c49e3c2ef3ab4e31"},
+    {file = "mkdocs_material_extensions-1.3.1.tar.gz", hash = "sha256:10c9511cea88f568257f960358a467d12b970e1f7b2c0e5fb2bb48cab1928443"},
+]
+
+[[package]]
+name = "mkdocs-redirects"
+version = "1.2.1"
+description = "A MkDocs plugin for dynamic page redirects to prevent broken links."
+optional = false
+python-versions = ">=3.6"
+files = [
+    {file = "mkdocs-redirects-1.2.1.tar.gz", hash = "sha256:9420066d70e2a6bb357adf86e67023dcdca1857f97f07c7fe450f8f1fb42f861"},
+]
+
+[package.dependencies]
+mkdocs = ">=1.1.1"
+
+[package.extras]
+dev = ["autoflake", "black", "isort", "pytest", "twine (>=1.13.0)"]
+release = ["twine (>=1.13.0)"]
+test = ["autoflake", "black", "isort", "pytest"]
+
+[[package]]
+name = "mkdocstrings"
+version = "0.24.1"
+description = "Automatic documentation from sources, for MkDocs."
+optional = false
+python-versions = ">=3.8"
+files = [
+    {file = "mkdocstrings-0.24.1-py3-none-any.whl", hash = "sha256:b4206f9a2ca8a648e222d5a0ca1d36ba7dee53c88732818de183b536f9042b5d"},
+    {file = "mkdocstrings-0.24.1.tar.gz", hash = "sha256:cc83f9a1c8724fc1be3c2fa071dd73d91ce902ef6a79710249ec8d0ee1064401"},
+]
+
+[package.dependencies]
+click = ">=7.0"
+Jinja2 = ">=2.11.1"
+Markdown = ">=3.3"
+MarkupSafe = ">=1.1"
+mkdocs = ">=1.4"
+mkdocs-autorefs = ">=0.3.1"
+mkdocstrings-python = {version = ">=0.5.2", optional = true, markers = "extra == \"python\""}
+platformdirs = ">=2.2.0"
+pymdown-extensions = ">=6.3"
+
+[package.extras]
+crystal = ["mkdocstrings-crystal (>=0.3.4)"]
+python = ["mkdocstrings-python (>=0.5.2)"]
+python-legacy = ["mkdocstrings-python-legacy (>=0.2.1)"]
+
+[[package]]
+name = "mkdocstrings-python"
+version = "1.9.0"
+description = "A Python handler for mkdocstrings."
+optional = false
+python-versions = ">=3.8"
+files = [
+    {file = "mkdocstrings_python-1.9.0-py3-none-any.whl", hash = "sha256:fad27d7314b4ec9c0359a187b477fb94c65ef561fdae941dca1b717c59aae96f"},
+    {file = "mkdocstrings_python-1.9.0.tar.gz", hash = "sha256:6e1a442367cf75d30cf69774cbb1ad02aebec58bfff26087439df4955efecfde"},
+]
+
+[package.dependencies]
+griffe = ">=0.37"
+markdown = ">=3.3,<3.6"
+mkdocstrings = ">=0.20"
+
+[[package]]
+name = "nbclient"
+version = "0.10.0"
+description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor."
+optional = false
+python-versions = ">=3.8.0"
+files = [
+    {file = "nbclient-0.10.0-py3-none-any.whl", hash = "sha256:f13e3529332a1f1f81d82a53210322476a168bb7090a0289c795fe9cc11c9d3f"},
+    {file = "nbclient-0.10.0.tar.gz", hash = "sha256:4b3f1b7dba531e498449c4db4f53da339c91d449dc11e9af3a43b4eb5c5abb09"},
+]
+
+[package.dependencies]
+jupyter-client = ">=6.1.12"
+jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0"
+nbformat = ">=5.1"
+traitlets = ">=5.4"
+
+[package.extras]
+dev = ["pre-commit"]
+docs = ["autodoc-traits", "mock", "moto", "myst-parser", "nbclient[test]", "sphinx (>=1.7)", "sphinx-book-theme", "sphinxcontrib-spelling"]
+test = ["flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "nbconvert (>=7.0.0)", "pytest (>=7.0,<8)", "pytest-asyncio", "pytest-cov (>=4.0)", "testpath", "xmltodict"]
+
+[[package]]
+name = "nbconvert"
+version = "7.16.2"
+description = "Converting Jupyter Notebooks (.ipynb files) to other formats.  Output formats include asciidoc, html, latex, markdown, pdf, py, rst, script.  nbconvert can be used both as a Python library (`import nbconvert`) or as a command line tool (invoked as `jupyter nbconvert ...`)."
+optional = false
+python-versions = ">=3.8"
+files = [
+    {file = "nbconvert-7.16.2-py3-none-any.whl", hash = "sha256:0c01c23981a8de0220255706822c40b751438e32467d6a686e26be08ba784382"},
+    {file = "nbconvert-7.16.2.tar.gz", hash = "sha256:8310edd41e1c43947e4ecf16614c61469ebc024898eb808cce0999860fc9fb16"},
+]
+
+[package.dependencies]
+beautifulsoup4 = "*"
+bleach = "!=5.0.0"
+defusedxml = "*"
+jinja2 = ">=3.0"
+jupyter-core = ">=4.7"
+jupyterlab-pygments = "*"
+markupsafe = ">=2.0"
+mistune = ">=2.0.3,<4"
+nbclient = ">=0.5.0"
+nbformat = ">=5.7"
+packaging = "*"
+pandocfilters = ">=1.4.1"
+pygments = ">=2.4.1"
+tinycss2 = "*"
+traitlets = ">=5.1"
+
+[package.extras]
+all = ["nbconvert[docs,qtpdf,serve,test,webpdf]"]
+docs = ["ipykernel", "ipython", "myst-parser", "nbsphinx (>=0.2.12)", "pydata-sphinx-theme", "sphinx (==5.0.2)", "sphinxcontrib-spelling"]
+qtpdf = ["nbconvert[qtpng]"]
+qtpng = ["pyqtwebengine (>=5.15)"]
+serve = ["tornado (>=6.1)"]
+test = ["flaky", "ipykernel", "ipywidgets (>=7.5)", "pytest"]
+webpdf = ["playwright"]
+
+[[package]]
+name = "nbformat"
+version = "5.10.2"
+description = "The Jupyter Notebook format"
+optional = false
+python-versions = ">=3.8"
+files = [
+    {file = "nbformat-5.10.2-py3-none-any.whl", hash = "sha256:7381189a0d537586b3f18bae5dbad347d7dd0a7cf0276b09cdcd5c24d38edd99"},
+    {file = "nbformat-5.10.2.tar.gz", hash = "sha256:c535b20a0d4310167bf4d12ad31eccfb0dc61e6392d6f8c570ab5b45a06a49a3"},
+]
+
+[package.dependencies]
+fastjsonschema = "*"
+jsonschema = ">=2.6"
+jupyter-core = "*"
+traitlets = ">=5.1"
+
+[package.extras]
+docs = ["myst-parser", "pydata-sphinx-theme", "sphinx", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"]
+test = ["pep440", "pre-commit", "pytest", "testpath"]
+
+[[package]]
+name = "nest-asyncio"
+version = "1.6.0"
+description = "Patch asyncio to allow nested event loops"
+optional = false
+python-versions = ">=3.5"
+files = [
+    {file = "nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c"},
+    {file = "nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe"},
+]
+
+[[package]]
+name = "packaging"
+version = "24.0"
+description = "Core utilities for Python packages"
+optional = false
+python-versions = ">=3.7"
+files = [
+    {file = "packaging-24.0-py3-none-any.whl", hash = "sha256:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5"},
+    {file = "packaging-24.0.tar.gz", hash = "sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9"},
+]
+
+[[package]]
+name = "paginate"
+version = "0.5.6"
+description = "Divides large result sets into pages for easier browsing"
+optional = false
+python-versions = "*"
+files = [
+    {file = "paginate-0.5.6.tar.gz", hash = "sha256:5e6007b6a9398177a7e1648d04fdd9f8c9766a1a945bceac82f1929e8c78af2d"},
+]
+
+[[package]]
+name = "pandocfilters"
+version = "1.5.1"
+description = "Utilities for writing pandoc filters in python"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+files = [
+    {file = "pandocfilters-1.5.1-py2.py3-none-any.whl", hash = "sha256:93be382804a9cdb0a7267585f157e5d1731bbe5545a85b268d6f5fe6232de2bc"},
+    {file = "pandocfilters-1.5.1.tar.gz", hash = "sha256:002b4a555ee4ebc03f8b66307e287fa492e4a77b4ea14d3f934328297bb4939e"},
+]
+
+[[package]]
+name = "parso"
+version = "0.8.3"
+description = "A Python Parser"
+optional = false
+python-versions = ">=3.6"
+files = [
+    {file = "parso-0.8.3-py2.py3-none-any.whl", hash = "sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75"},
+    {file = "parso-0.8.3.tar.gz", hash = "sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0"},
+]
+
+[package.extras]
+qa = ["flake8 (==3.8.3)", "mypy (==0.782)"]
+testing = ["docopt", "pytest (<6.0.0)"]
+
+[[package]]
+name = "pathspec"
+version = "0.12.1"
+description = "Utility library for gitignore style pattern matching of file paths."
+optional = false
+python-versions = ">=3.8"
+files = [
+    {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"},
+    {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"},
+]
+
+[[package]]
+name = "pexpect"
+version = "4.9.0"
+description = "Pexpect allows easy control of interactive console applications."
+optional = false
+python-versions = "*"
+files = [
+    {file = "pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523"},
+    {file = "pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f"},
+]
+
+[package.dependencies]
+ptyprocess = ">=0.5"
+
+[[package]]
+name = "platformdirs"
+version = "4.2.0"
+description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"."
+optional = false
+python-versions = ">=3.8"
+files = [
+    {file = "platformdirs-4.2.0-py3-none-any.whl", hash = "sha256:0614df2a2f37e1a662acbd8e2b25b92ccf8632929bc6d43467e17fe89c75e068"},
+    {file = "platformdirs-4.2.0.tar.gz", hash = "sha256:ef0cc731df711022c174543cb70a9b5bd22e5a9337c8624ef2c2ceb8ddad8768"},
+]
+
+[package.extras]
+docs = ["furo (>=2023.9.10)", "proselint (>=0.13)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"]
+test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)"]
+
+[[package]]
+name = "prompt-toolkit"
+version = "3.0.43"
+description = "Library for building powerful interactive command lines in Python"
+optional = false
+python-versions = ">=3.7.0"
+files = [
+    {file = "prompt_toolkit-3.0.43-py3-none-any.whl", hash = "sha256:a11a29cb3bf0a28a387fe5122cdb649816a957cd9261dcedf8c9f1fef33eacf6"},
+    {file = "prompt_toolkit-3.0.43.tar.gz", hash = "sha256:3527b7af26106cbc65a040bcc84839a3566ec1b051bb0bfe953631e704b0ff7d"},
+]
+
+[package.dependencies]
+wcwidth = "*"
+
+[[package]]
+name = "psutil"
+version = "5.9.8"
+description = "Cross-platform lib for process and system monitoring in Python."
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
+files = [
+    {file = "psutil-5.9.8-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:26bd09967ae00920df88e0352a91cff1a78f8d69b3ecabbfe733610c0af486c8"},
+    {file = "psutil-5.9.8-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:05806de88103b25903dff19bb6692bd2e714ccf9e668d050d144012055cbca73"},
+    {file = "psutil-5.9.8-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:611052c4bc70432ec770d5d54f64206aa7203a101ec273a0cd82418c86503bb7"},
+    {file = "psutil-5.9.8-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:50187900d73c1381ba1454cf40308c2bf6f34268518b3f36a9b663ca87e65e36"},
+    {file = "psutil-5.9.8-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:02615ed8c5ea222323408ceba16c60e99c3f91639b07da6373fb7e6539abc56d"},
+    {file = "psutil-5.9.8-cp27-none-win32.whl", hash = "sha256:36f435891adb138ed3c9e58c6af3e2e6ca9ac2f365efe1f9cfef2794e6c93b4e"},
+    {file = "psutil-5.9.8-cp27-none-win_amd64.whl", hash = "sha256:bd1184ceb3f87651a67b2708d4c3338e9b10c5df903f2e3776b62303b26cb631"},
+    {file = "psutil-5.9.8-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:aee678c8720623dc456fa20659af736241f575d79429a0e5e9cf88ae0605cc81"},
+    {file = "psutil-5.9.8-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8cb6403ce6d8e047495a701dc7c5bd788add903f8986d523e3e20b98b733e421"},
+    {file = "psutil-5.9.8-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d06016f7f8625a1825ba3732081d77c94589dca78b7a3fc072194851e88461a4"},
+    {file = "psutil-5.9.8-cp36-cp36m-win32.whl", hash = "sha256:7d79560ad97af658a0f6adfef8b834b53f64746d45b403f225b85c5c2c140eee"},
+    {file = "psutil-5.9.8-cp36-cp36m-win_amd64.whl", hash = "sha256:27cc40c3493bb10de1be4b3f07cae4c010ce715290a5be22b98493509c6299e2"},
+    {file = "psutil-5.9.8-cp37-abi3-win32.whl", hash = "sha256:bc56c2a1b0d15aa3eaa5a60c9f3f8e3e565303b465dbf57a1b730e7a2b9844e0"},
+    {file = "psutil-5.9.8-cp37-abi3-win_amd64.whl", hash = "sha256:8db4c1b57507eef143a15a6884ca10f7c73876cdf5d51e713151c1236a0e68cf"},
+    {file = "psutil-5.9.8-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:d16bbddf0693323b8c6123dd804100241da461e41d6e332fb0ba6058f630f8c8"},
+    {file = "psutil-5.9.8.tar.gz", hash = "sha256:6be126e3225486dff286a8fb9a06246a5253f4c7c53b475ea5f5ac934e64194c"},
+]
+
+[package.extras]
+test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"]
+
+[[package]]
+name = "ptyprocess"
+version = "0.7.0"
+description = "Run a subprocess in a pseudo terminal"
+optional = false
+python-versions = "*"
+files = [
+    {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"},
+    {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"},
+]
+
+[[package]]
+name = "pure-eval"
+version = "0.2.2"
+description = "Safely evaluate AST nodes without side effects"
+optional = false
+python-versions = "*"
+files = [
+    {file = "pure_eval-0.2.2-py3-none-any.whl", hash = "sha256:01eaab343580944bc56080ebe0a674b39ec44a945e6d09ba7db3cb8cec289350"},
+    {file = "pure_eval-0.2.2.tar.gz", hash = "sha256:2b45320af6dfaa1750f543d714b6d1c520a1688dec6fd24d339063ce0aaa9ac3"},
+]
+
+[package.extras]
+tests = ["pytest"]
+
+[[package]]
+name = "pycparser"
+version = "2.21"
+description = "C parser in Python"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+files = [
+    {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"},
+    {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"},
+]
+
+[[package]]
+name = "pygments"
+version = "2.17.2"
+description = "Pygments is a syntax highlighting package written in Python."
+optional = false
+python-versions = ">=3.7"
+files = [
+    {file = "pygments-2.17.2-py3-none-any.whl", hash = "sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c"},
+    {file = "pygments-2.17.2.tar.gz", hash = "sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367"},
+]
+
+[package.extras]
+plugins = ["importlib-metadata"]
+windows-terminal = ["colorama (>=0.4.6)"]
+
+[[package]]
+name = "pymdown-extensions"
+version = "10.7.1"
+description = "Extension pack for Python Markdown."
+optional = false
+python-versions = ">=3.8"
+files = [
+    {file = "pymdown_extensions-10.7.1-py3-none-any.whl", hash = "sha256:f5cc7000d7ff0d1ce9395d216017fa4df3dde800afb1fb72d1c7d3fd35e710f4"},
+    {file = "pymdown_extensions-10.7.1.tar.gz", hash = "sha256:c70e146bdd83c744ffc766b4671999796aba18842b268510a329f7f64700d584"},
+]
+
+[package.dependencies]
+markdown = ">=3.5"
+pyyaml = "*"
+
+[package.extras]
+extra = ["pygments (>=2.12)"]
+
+[[package]]
+name = "python-dateutil"
+version = "2.9.0.post0"
+description = "Extensions to the standard Python datetime module"
+optional = false
+python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7"
+files = [
+    {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"},
+    {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"},
+]
+
+[package.dependencies]
+six = ">=1.5"
+
+[[package]]
+name = "pywin32"
+version = "306"
+description = "Python for Window Extensions"
+optional = false
+python-versions = "*"
+files = [
+    {file = "pywin32-306-cp310-cp310-win32.whl", hash = "sha256:06d3420a5155ba65f0b72f2699b5bacf3109f36acbe8923765c22938a69dfc8d"},
+    {file = "pywin32-306-cp310-cp310-win_amd64.whl", hash = "sha256:84f4471dbca1887ea3803d8848a1616429ac94a4a8d05f4bc9c5dcfd42ca99c8"},
+    {file = "pywin32-306-cp311-cp311-win32.whl", hash = "sha256:e65028133d15b64d2ed8f06dd9fbc268352478d4f9289e69c190ecd6818b6407"},
+    {file = "pywin32-306-cp311-cp311-win_amd64.whl", hash = "sha256:a7639f51c184c0272e93f244eb24dafca9b1855707d94c192d4a0b4c01e1100e"},
+    {file = "pywin32-306-cp311-cp311-win_arm64.whl", hash = "sha256:70dba0c913d19f942a2db25217d9a1b726c278f483a919f1abfed79c9cf64d3a"},
+    {file = "pywin32-306-cp312-cp312-win32.whl", hash = "sha256:383229d515657f4e3ed1343da8be101000562bf514591ff383ae940cad65458b"},
+    {file = "pywin32-306-cp312-cp312-win_amd64.whl", hash = "sha256:37257794c1ad39ee9be652da0462dc2e394c8159dfd913a8a4e8eb6fd346da0e"},
+    {file = "pywin32-306-cp312-cp312-win_arm64.whl", hash = "sha256:5821ec52f6d321aa59e2db7e0a35b997de60c201943557d108af9d4ae1ec7040"},
+    {file = "pywin32-306-cp37-cp37m-win32.whl", hash = "sha256:1c73ea9a0d2283d889001998059f5eaaba3b6238f767c9cf2833b13e6a685f65"},
+    {file = "pywin32-306-cp37-cp37m-win_amd64.whl", hash = "sha256:72c5f621542d7bdd4fdb716227be0dd3f8565c11b280be6315b06ace35487d36"},
+    {file = "pywin32-306-cp38-cp38-win32.whl", hash = "sha256:e4c092e2589b5cf0d365849e73e02c391c1349958c5ac3e9d5ccb9a28e017b3a"},
+    {file = "pywin32-306-cp38-cp38-win_amd64.whl", hash = "sha256:e8ac1ae3601bee6ca9f7cb4b5363bf1c0badb935ef243c4733ff9a393b1690c0"},
+    {file = "pywin32-306-cp39-cp39-win32.whl", hash = "sha256:e25fd5b485b55ac9c057f67d94bc203f3f6595078d1fb3b458c9c28b7153a802"},
+    {file = "pywin32-306-cp39-cp39-win_amd64.whl", hash = "sha256:39b61c15272833b5c329a2989999dcae836b1eed650252ab1b7bfbe1d59f30f4"},
+]
+
+[[package]]
+name = "pyyaml"
+version = "6.0.1"
+description = "YAML parser and emitter for Python"
+optional = false
+python-versions = ">=3.6"
+files = [
+    {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"},
+    {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"},
+    {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"},
+    {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"},
+    {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"},
+    {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"},
+    {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"},
+    {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"},
+    {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"},
+    {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"},
+    {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"},
+    {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"},
+    {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"},
+    {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"},
+    {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"},
+    {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"},
+    {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"},
+    {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"},
+    {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"},
+    {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"},
+    {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"},
+    {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"},
+    {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"},
+    {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"},
+    {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"},
+    {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"},
+    {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"},
+    {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"},
+    {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"},
+    {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"},
+    {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"},
+    {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"},
+    {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"},
+    {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"},
+    {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"},
+    {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"},
+    {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"},
+    {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"},
+    {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"},
+    {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"},
+    {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"},
+    {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"},
+    {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"},
+    {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"},
+    {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"},
+    {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"},
+    {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"},
+    {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"},
+    {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"},
+    {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"},
+]
+
+[[package]]
+name = "pyyaml-env-tag"
+version = "0.1"
+description = "A custom YAML tag for referencing environment variables in YAML files. "
+optional = false
+python-versions = ">=3.6"
+files = [
+    {file = "pyyaml_env_tag-0.1-py3-none-any.whl", hash = "sha256:af31106dec8a4d68c60207c1886031cbf839b68aa7abccdb19868200532c2069"},
+    {file = "pyyaml_env_tag-0.1.tar.gz", hash = "sha256:70092675bda14fdec33b31ba77e7543de9ddc88f2e5b99160396572d11525bdb"},
+]
+
+[package.dependencies]
+pyyaml = "*"
+
+[[package]]
+name = "pyzmq"
+version = "25.1.2"
+description = "Python bindings for 0MQ"
+optional = false
+python-versions = ">=3.6"
+files = [
+    {file = "pyzmq-25.1.2-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:e624c789359f1a16f83f35e2c705d07663ff2b4d4479bad35621178d8f0f6ea4"},
+    {file = "pyzmq-25.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:49151b0efece79f6a79d41a461d78535356136ee70084a1c22532fc6383f4ad0"},
+    {file = "pyzmq-25.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d9a5f194cf730f2b24d6af1f833c14c10f41023da46a7f736f48b6d35061e76e"},
+    {file = "pyzmq-25.1.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:faf79a302f834d9e8304fafdc11d0d042266667ac45209afa57e5efc998e3872"},
+    {file = "pyzmq-25.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f51a7b4ead28d3fca8dda53216314a553b0f7a91ee8fc46a72b402a78c3e43d"},
+    {file = "pyzmq-25.1.2-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:0ddd6d71d4ef17ba5a87becf7ddf01b371eaba553c603477679ae817a8d84d75"},
+    {file = "pyzmq-25.1.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:246747b88917e4867e2367b005fc8eefbb4a54b7db363d6c92f89d69abfff4b6"},
+    {file = "pyzmq-25.1.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:00c48ae2fd81e2a50c3485de1b9d5c7c57cd85dc8ec55683eac16846e57ac979"},
+    {file = "pyzmq-25.1.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5a68d491fc20762b630e5db2191dd07ff89834086740f70e978bb2ef2668be08"},
+    {file = "pyzmq-25.1.2-cp310-cp310-win32.whl", hash = "sha256:09dfe949e83087da88c4a76767df04b22304a682d6154de2c572625c62ad6886"},
+    {file = "pyzmq-25.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:fa99973d2ed20417744fca0073390ad65ce225b546febb0580358e36aa90dba6"},
+    {file = "pyzmq-25.1.2-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:82544e0e2d0c1811482d37eef297020a040c32e0687c1f6fc23a75b75db8062c"},
+    {file = "pyzmq-25.1.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:01171fc48542348cd1a360a4b6c3e7d8f46cdcf53a8d40f84db6707a6768acc1"},
+    {file = "pyzmq-25.1.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bc69c96735ab501419c432110016329bf0dea8898ce16fab97c6d9106dc0b348"},
+    {file = "pyzmq-25.1.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3e124e6b1dd3dfbeb695435dff0e383256655bb18082e094a8dd1f6293114642"},
+    {file = "pyzmq-25.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7598d2ba821caa37a0f9d54c25164a4fa351ce019d64d0b44b45540950458840"},
+    {file = "pyzmq-25.1.2-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:d1299d7e964c13607efd148ca1f07dcbf27c3ab9e125d1d0ae1d580a1682399d"},
+    {file = "pyzmq-25.1.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:4e6f689880d5ad87918430957297c975203a082d9a036cc426648fcbedae769b"},
+    {file = "pyzmq-25.1.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:cc69949484171cc961e6ecd4a8911b9ce7a0d1f738fcae717177c231bf77437b"},
+    {file = "pyzmq-25.1.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9880078f683466b7f567b8624bfc16cad65077be046b6e8abb53bed4eeb82dd3"},
+    {file = "pyzmq-25.1.2-cp311-cp311-win32.whl", hash = "sha256:4e5837af3e5aaa99a091302df5ee001149baff06ad22b722d34e30df5f0d9097"},
+    {file = "pyzmq-25.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:25c2dbb97d38b5ac9fd15586e048ec5eb1e38f3d47fe7d92167b0c77bb3584e9"},
+    {file = "pyzmq-25.1.2-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:11e70516688190e9c2db14fcf93c04192b02d457b582a1f6190b154691b4c93a"},
+    {file = "pyzmq-25.1.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:313c3794d650d1fccaaab2df942af9f2c01d6217c846177cfcbc693c7410839e"},
+    {file = "pyzmq-25.1.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b3cbba2f47062b85fe0ef9de5b987612140a9ba3a9c6d2543c6dec9f7c2ab27"},
+    {file = "pyzmq-25.1.2-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fc31baa0c32a2ca660784d5af3b9487e13b61b3032cb01a115fce6588e1bed30"},
+    {file = "pyzmq-25.1.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:02c9087b109070c5ab0b383079fa1b5f797f8d43e9a66c07a4b8b8bdecfd88ee"},
+    {file = "pyzmq-25.1.2-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:f8429b17cbb746c3e043cb986328da023657e79d5ed258b711c06a70c2ea7537"},
+    {file = "pyzmq-25.1.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:5074adeacede5f810b7ef39607ee59d94e948b4fd954495bdb072f8c54558181"},
+    {file = "pyzmq-25.1.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:7ae8f354b895cbd85212da245f1a5ad8159e7840e37d78b476bb4f4c3f32a9fe"},
+    {file = "pyzmq-25.1.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:b264bf2cc96b5bc43ce0e852be995e400376bd87ceb363822e2cb1964fcdc737"},
+    {file = "pyzmq-25.1.2-cp312-cp312-win32.whl", hash = "sha256:02bbc1a87b76e04fd780b45e7f695471ae6de747769e540da909173d50ff8e2d"},
+    {file = "pyzmq-25.1.2-cp312-cp312-win_amd64.whl", hash = "sha256:ced111c2e81506abd1dc142e6cd7b68dd53747b3b7ae5edbea4578c5eeff96b7"},
+    {file = "pyzmq-25.1.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:7b6d09a8962a91151f0976008eb7b29b433a560fde056ec7a3db9ec8f1075438"},
+    {file = "pyzmq-25.1.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:967668420f36878a3c9ecb5ab33c9d0ff8d054f9c0233d995a6d25b0e95e1b6b"},
+    {file = "pyzmq-25.1.2-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5edac3f57c7ddaacdb4d40f6ef2f9e299471fc38d112f4bc6d60ab9365445fb0"},
+    {file = "pyzmq-25.1.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:0dabfb10ef897f3b7e101cacba1437bd3a5032ee667b7ead32bbcdd1a8422fe7"},
+    {file = "pyzmq-25.1.2-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:2c6441e0398c2baacfe5ba30c937d274cfc2dc5b55e82e3749e333aabffde561"},
+    {file = "pyzmq-25.1.2-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:16b726c1f6c2e7625706549f9dbe9b06004dfbec30dbed4bf50cbdfc73e5b32a"},
+    {file = "pyzmq-25.1.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:a86c2dd76ef71a773e70551a07318b8e52379f58dafa7ae1e0a4be78efd1ff16"},
+    {file = "pyzmq-25.1.2-cp36-cp36m-win32.whl", hash = "sha256:359f7f74b5d3c65dae137f33eb2bcfa7ad9ebefd1cab85c935f063f1dbb245cc"},
+    {file = "pyzmq-25.1.2-cp36-cp36m-win_amd64.whl", hash = "sha256:55875492f820d0eb3417b51d96fea549cde77893ae3790fd25491c5754ea2f68"},
+    {file = "pyzmq-25.1.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b8c8a419dfb02e91b453615c69568442e897aaf77561ee0064d789705ff37a92"},
+    {file = "pyzmq-25.1.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8807c87fa893527ae8a524c15fc505d9950d5e856f03dae5921b5e9aa3b8783b"},
+    {file = "pyzmq-25.1.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5e319ed7d6b8f5fad9b76daa0a68497bc6f129858ad956331a5835785761e003"},
+    {file = "pyzmq-25.1.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:3c53687dde4d9d473c587ae80cc328e5b102b517447456184b485587ebd18b62"},
+    {file = "pyzmq-25.1.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:9add2e5b33d2cd765ad96d5eb734a5e795a0755f7fc49aa04f76d7ddda73fd70"},
+    {file = "pyzmq-25.1.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:e690145a8c0c273c28d3b89d6fb32c45e0d9605b2293c10e650265bf5c11cfec"},
+    {file = "pyzmq-25.1.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:00a06faa7165634f0cac1abb27e54d7a0b3b44eb9994530b8ec73cf52e15353b"},
+    {file = "pyzmq-25.1.2-cp37-cp37m-win32.whl", hash = "sha256:0f97bc2f1f13cb16905a5f3e1fbdf100e712d841482b2237484360f8bc4cb3d7"},
+    {file = "pyzmq-25.1.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6cc0020b74b2e410287e5942e1e10886ff81ac77789eb20bec13f7ae681f0fdd"},
+    {file = "pyzmq-25.1.2-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:bef02cfcbded83473bdd86dd8d3729cd82b2e569b75844fb4ea08fee3c26ae41"},
+    {file = "pyzmq-25.1.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e10a4b5a4b1192d74853cc71a5e9fd022594573926c2a3a4802020360aa719d8"},
+    {file = "pyzmq-25.1.2-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8c5f80e578427d4695adac6fdf4370c14a2feafdc8cb35549c219b90652536ae"},
+    {file = "pyzmq-25.1.2-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5dde6751e857910c1339890f3524de74007958557593b9e7e8c5f01cd919f8a7"},
+    {file = "pyzmq-25.1.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea1608dd169da230a0ad602d5b1ebd39807ac96cae1845c3ceed39af08a5c6df"},
+    {file = "pyzmq-25.1.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0f513130c4c361201da9bc69df25a086487250e16b5571ead521b31ff6b02220"},
+    {file = "pyzmq-25.1.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:019744b99da30330798bb37df33549d59d380c78e516e3bab9c9b84f87a9592f"},
+    {file = "pyzmq-25.1.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2e2713ef44be5d52dd8b8e2023d706bf66cb22072e97fc71b168e01d25192755"},
+    {file = "pyzmq-25.1.2-cp38-cp38-win32.whl", hash = "sha256:07cd61a20a535524906595e09344505a9bd46f1da7a07e504b315d41cd42eb07"},
+    {file = "pyzmq-25.1.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb7e49a17fb8c77d3119d41a4523e432eb0c6932187c37deb6fbb00cc3028088"},
+    {file = "pyzmq-25.1.2-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:94504ff66f278ab4b7e03e4cba7e7e400cb73bfa9d3d71f58d8972a8dc67e7a6"},
+    {file = "pyzmq-25.1.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6dd0d50bbf9dca1d0bdea219ae6b40f713a3fb477c06ca3714f208fd69e16fd8"},
+    {file = "pyzmq-25.1.2-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:004ff469d21e86f0ef0369717351073e0e577428e514c47c8480770d5e24a565"},
+    {file = "pyzmq-25.1.2-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c0b5ca88a8928147b7b1e2dfa09f3b6c256bc1135a1338536cbc9ea13d3b7add"},
+    {file = "pyzmq-25.1.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c9a79f1d2495b167119d02be7448bfba57fad2a4207c4f68abc0bab4b92925b"},
+    {file = "pyzmq-25.1.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:518efd91c3d8ac9f9b4f7dd0e2b7b8bf1a4fe82a308009016b07eaa48681af82"},
+    {file = "pyzmq-25.1.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:1ec23bd7b3a893ae676d0e54ad47d18064e6c5ae1fadc2f195143fb27373f7f6"},
+    {file = "pyzmq-25.1.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:db36c27baed588a5a8346b971477b718fdc66cf5b80cbfbd914b4d6d355e44e2"},
+    {file = "pyzmq-25.1.2-cp39-cp39-win32.whl", hash = "sha256:39b1067f13aba39d794a24761e385e2eddc26295826530a8c7b6c6c341584289"},
+    {file = "pyzmq-25.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:8e9f3fabc445d0ce320ea2c59a75fe3ea591fdbdeebec5db6de530dd4b09412e"},
+    {file = "pyzmq-25.1.2-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a8c1d566344aee826b74e472e16edae0a02e2a044f14f7c24e123002dcff1c05"},
+    {file = "pyzmq-25.1.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:759cfd391a0996345ba94b6a5110fca9c557ad4166d86a6e81ea526c376a01e8"},
+    {file = "pyzmq-25.1.2-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7c61e346ac34b74028ede1c6b4bcecf649d69b707b3ff9dc0fab453821b04d1e"},
+    {file = "pyzmq-25.1.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4cb8fc1f8d69b411b8ec0b5f1ffbcaf14c1db95b6bccea21d83610987435f1a4"},
+    {file = "pyzmq-25.1.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:3c00c9b7d1ca8165c610437ca0c92e7b5607b2f9076f4eb4b095c85d6e680a1d"},
+    {file = "pyzmq-25.1.2-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:df0c7a16ebb94452d2909b9a7b3337940e9a87a824c4fc1c7c36bb4404cb0cde"},
+    {file = "pyzmq-25.1.2-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:45999e7f7ed5c390f2e87ece7f6c56bf979fb213550229e711e45ecc7d42ccb8"},
+    {file = "pyzmq-25.1.2-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ac170e9e048b40c605358667aca3d94e98f604a18c44bdb4c102e67070f3ac9b"},
+    {file = "pyzmq-25.1.2-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d1b604734bec94f05f81b360a272fc824334267426ae9905ff32dc2be433ab96"},
+    {file = "pyzmq-25.1.2-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:a793ac733e3d895d96f865f1806f160696422554e46d30105807fdc9841b9f7d"},
+    {file = "pyzmq-25.1.2-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0806175f2ae5ad4b835ecd87f5f85583316b69f17e97786f7443baaf54b9bb98"},
+    {file = "pyzmq-25.1.2-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ef12e259e7bc317c7597d4f6ef59b97b913e162d83b421dd0db3d6410f17a244"},
+    {file = "pyzmq-25.1.2-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ea253b368eb41116011add00f8d5726762320b1bda892f744c91997b65754d73"},
+    {file = "pyzmq-25.1.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b9b1f2ad6498445a941d9a4fee096d387fee436e45cc660e72e768d3d8ee611"},
+    {file = "pyzmq-25.1.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:8b14c75979ce932c53b79976a395cb2a8cd3aaf14aef75e8c2cb55a330b9b49d"},
+    {file = "pyzmq-25.1.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:889370d5174a741a62566c003ee8ddba4b04c3f09a97b8000092b7ca83ec9c49"},
+    {file = "pyzmq-25.1.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9a18fff090441a40ffda8a7f4f18f03dc56ae73f148f1832e109f9bffa85df15"},
+    {file = "pyzmq-25.1.2-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:99a6b36f95c98839ad98f8c553d8507644c880cf1e0a57fe5e3a3f3969040882"},
+    {file = "pyzmq-25.1.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4345c9a27f4310afbb9c01750e9461ff33d6fb74cd2456b107525bbeebcb5be3"},
+    {file = "pyzmq-25.1.2-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:3516e0b6224cf6e43e341d56da15fd33bdc37fa0c06af4f029f7d7dfceceabbc"},
+    {file = "pyzmq-25.1.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:146b9b1f29ead41255387fb07be56dc29639262c0f7344f570eecdcd8d683314"},
+    {file = "pyzmq-25.1.2.tar.gz", hash = "sha256:93f1aa311e8bb912e34f004cf186407a4e90eec4f0ecc0efd26056bf7eda0226"},
+]
+
+[package.dependencies]
+cffi = {version = "*", markers = "implementation_name == \"pypy\""}
+
+[[package]]
+name = "referencing"
+version = "0.33.0"
+description = "JSON Referencing + Python"
+optional = false
+python-versions = ">=3.8"
+files = [
+    {file = "referencing-0.33.0-py3-none-any.whl", hash = "sha256:39240f2ecc770258f28b642dd47fd74bc8b02484de54e1882b74b35ebd779bd5"},
+    {file = "referencing-0.33.0.tar.gz", hash = "sha256:c775fedf74bc0f9189c2a3be1c12fd03e8c23f4d371dce795df44e06c5b412f7"},
+]
+
+[package.dependencies]
+attrs = ">=22.2.0"
+rpds-py = ">=0.7.0"
+
+[[package]]
+name = "regex"
+version = "2023.12.25"
+description = "Alternative regular expression module, to replace re."
+optional = false
+python-versions = ">=3.7"
+files = [
+    {file = "regex-2023.12.25-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0694219a1d54336fd0445ea382d49d36882415c0134ee1e8332afd1529f0baa5"},
+    {file = "regex-2023.12.25-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b014333bd0217ad3d54c143de9d4b9a3ca1c5a29a6d0d554952ea071cff0f1f8"},
+    {file = "regex-2023.12.25-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d865984b3f71f6d0af64d0d88f5733521698f6c16f445bb09ce746c92c97c586"},
+    {file = "regex-2023.12.25-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e0eabac536b4cc7f57a5f3d095bfa557860ab912f25965e08fe1545e2ed8b4c"},
+    {file = "regex-2023.12.25-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c25a8ad70e716f96e13a637802813f65d8a6760ef48672aa3502f4c24ea8b400"},
+    {file = "regex-2023.12.25-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9b6d73353f777630626f403b0652055ebfe8ff142a44ec2cf18ae470395766e"},
+    {file = "regex-2023.12.25-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9cc99d6946d750eb75827cb53c4371b8b0fe89c733a94b1573c9dd16ea6c9e4"},
+    {file = "regex-2023.12.25-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88d1f7bef20c721359d8675f7d9f8e414ec5003d8f642fdfd8087777ff7f94b5"},
+    {file = "regex-2023.12.25-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cb3fe77aec8f1995611f966d0c656fdce398317f850d0e6e7aebdfe61f40e1cd"},
+    {file = "regex-2023.12.25-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:7aa47c2e9ea33a4a2a05f40fcd3ea36d73853a2aae7b4feab6fc85f8bf2c9704"},
+    {file = "regex-2023.12.25-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:df26481f0c7a3f8739fecb3e81bc9da3fcfae34d6c094563b9d4670b047312e1"},
+    {file = "regex-2023.12.25-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:c40281f7d70baf6e0db0c2f7472b31609f5bc2748fe7275ea65a0b4601d9b392"},
+    {file = "regex-2023.12.25-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:d94a1db462d5690ebf6ae86d11c5e420042b9898af5dcf278bd97d6bda065423"},
+    {file = "regex-2023.12.25-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ba1b30765a55acf15dce3f364e4928b80858fa8f979ad41f862358939bdd1f2f"},
+    {file = "regex-2023.12.25-cp310-cp310-win32.whl", hash = "sha256:150c39f5b964e4d7dba46a7962a088fbc91f06e606f023ce57bb347a3b2d4630"},
+    {file = "regex-2023.12.25-cp310-cp310-win_amd64.whl", hash = "sha256:09da66917262d9481c719599116c7dc0c321ffcec4b1f510c4f8a066f8768105"},
+    {file = "regex-2023.12.25-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:1b9d811f72210fa9306aeb88385b8f8bcef0dfbf3873410413c00aa94c56c2b6"},
+    {file = "regex-2023.12.25-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d902a43085a308cef32c0d3aea962524b725403fd9373dea18110904003bac97"},
+    {file = "regex-2023.12.25-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d166eafc19f4718df38887b2bbe1467a4f74a9830e8605089ea7a30dd4da8887"},
+    {file = "regex-2023.12.25-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7ad32824b7f02bb3c9f80306d405a1d9b7bb89362d68b3c5a9be53836caebdb"},
+    {file = "regex-2023.12.25-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:636ba0a77de609d6510235b7f0e77ec494d2657108f777e8765efc060094c98c"},
+    {file = "regex-2023.12.25-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0fda75704357805eb953a3ee15a2b240694a9a514548cd49b3c5124b4e2ad01b"},
+    {file = "regex-2023.12.25-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f72cbae7f6b01591f90814250e636065850c5926751af02bb48da94dfced7baa"},
+    {file = "regex-2023.12.25-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:db2a0b1857f18b11e3b0e54ddfefc96af46b0896fb678c85f63fb8c37518b3e7"},
+    {file = "regex-2023.12.25-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:7502534e55c7c36c0978c91ba6f61703faf7ce733715ca48f499d3dbbd7657e0"},
+    {file = "regex-2023.12.25-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:e8c7e08bb566de4faaf11984af13f6bcf6a08f327b13631d41d62592681d24fe"},
+    {file = "regex-2023.12.25-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:283fc8eed679758de38fe493b7d7d84a198b558942b03f017b1f94dda8efae80"},
+    {file = "regex-2023.12.25-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:f44dd4d68697559d007462b0a3a1d9acd61d97072b71f6d1968daef26bc744bd"},
+    {file = "regex-2023.12.25-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:67d3ccfc590e5e7197750fcb3a2915b416a53e2de847a728cfa60141054123d4"},
+    {file = "regex-2023.12.25-cp311-cp311-win32.whl", hash = "sha256:68191f80a9bad283432385961d9efe09d783bcd36ed35a60fb1ff3f1ec2efe87"},
+    {file = "regex-2023.12.25-cp311-cp311-win_amd64.whl", hash = "sha256:7d2af3f6b8419661a0c421584cfe8aaec1c0e435ce7e47ee2a97e344b98f794f"},
+    {file = "regex-2023.12.25-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:8a0ccf52bb37d1a700375a6b395bff5dd15c50acb745f7db30415bae3c2b0715"},
+    {file = "regex-2023.12.25-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c3c4a78615b7762740531c27cf46e2f388d8d727d0c0c739e72048beb26c8a9d"},
+    {file = "regex-2023.12.25-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ad83e7545b4ab69216cef4cc47e344d19622e28aabec61574b20257c65466d6a"},
+    {file = "regex-2023.12.25-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b7a635871143661feccce3979e1727c4e094f2bdfd3ec4b90dfd4f16f571a87a"},
+    {file = "regex-2023.12.25-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d498eea3f581fbe1b34b59c697512a8baef88212f92e4c7830fcc1499f5b45a5"},
+    {file = "regex-2023.12.25-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:43f7cd5754d02a56ae4ebb91b33461dc67be8e3e0153f593c509e21d219c5060"},
+    {file = "regex-2023.12.25-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:51f4b32f793812714fd5307222a7f77e739b9bc566dc94a18126aba3b92b98a3"},
+    {file = "regex-2023.12.25-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ba99d8077424501b9616b43a2d208095746fb1284fc5ba490139651f971d39d9"},
+    {file = "regex-2023.12.25-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:4bfc2b16e3ba8850e0e262467275dd4d62f0d045e0e9eda2bc65078c0110a11f"},
+    {file = "regex-2023.12.25-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8c2c19dae8a3eb0ea45a8448356ed561be843b13cbc34b840922ddf565498c1c"},
+    {file = "regex-2023.12.25-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:60080bb3d8617d96f0fb7e19796384cc2467447ef1c491694850ebd3670bc457"},
+    {file = "regex-2023.12.25-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b77e27b79448e34c2c51c09836033056a0547aa360c45eeeb67803da7b0eedaf"},
+    {file = "regex-2023.12.25-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:518440c991f514331f4850a63560321f833979d145d7d81186dbe2f19e27ae3d"},
+    {file = "regex-2023.12.25-cp312-cp312-win32.whl", hash = "sha256:e2610e9406d3b0073636a3a2e80db05a02f0c3169b5632022b4e81c0364bcda5"},
+    {file = "regex-2023.12.25-cp312-cp312-win_amd64.whl", hash = "sha256:cc37b9aeebab425f11f27e5e9e6cf580be7206c6582a64467a14dda211abc232"},
+    {file = "regex-2023.12.25-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:da695d75ac97cb1cd725adac136d25ca687da4536154cdc2815f576e4da11c69"},
+    {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d126361607b33c4eb7b36debc173bf25d7805847346dd4d99b5499e1fef52bc7"},
+    {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4719bb05094d7d8563a450cf8738d2e1061420f79cfcc1fa7f0a44744c4d8f73"},
+    {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5dd58946bce44b53b06d94aa95560d0b243eb2fe64227cba50017a8d8b3cd3e2"},
+    {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:22a86d9fff2009302c440b9d799ef2fe322416d2d58fc124b926aa89365ec482"},
+    {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2aae8101919e8aa05ecfe6322b278f41ce2994c4a430303c4cd163fef746e04f"},
+    {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e692296c4cc2873967771345a876bcfc1c547e8dd695c6b89342488b0ea55cd8"},
+    {file = "regex-2023.12.25-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:263ef5cc10979837f243950637fffb06e8daed7f1ac1e39d5910fd29929e489a"},
+    {file = "regex-2023.12.25-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:d6f7e255e5fa94642a0724e35406e6cb7001c09d476ab5fce002f652b36d0c39"},
+    {file = "regex-2023.12.25-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:88ad44e220e22b63b0f8f81f007e8abbb92874d8ced66f32571ef8beb0643b2b"},
+    {file = "regex-2023.12.25-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:3a17d3ede18f9cedcbe23d2daa8a2cd6f59fe2bf082c567e43083bba3fb00347"},
+    {file = "regex-2023.12.25-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d15b274f9e15b1a0b7a45d2ac86d1f634d983ca40d6b886721626c47a400bf39"},
+    {file = "regex-2023.12.25-cp37-cp37m-win32.whl", hash = "sha256:ed19b3a05ae0c97dd8f75a5d8f21f7723a8c33bbc555da6bbe1f96c470139d3c"},
+    {file = "regex-2023.12.25-cp37-cp37m-win_amd64.whl", hash = "sha256:a6d1047952c0b8104a1d371f88f4ab62e6275567d4458c1e26e9627ad489b445"},
+    {file = "regex-2023.12.25-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:b43523d7bc2abd757119dbfb38af91b5735eea45537ec6ec3a5ec3f9562a1c53"},
+    {file = "regex-2023.12.25-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:efb2d82f33b2212898f1659fb1c2e9ac30493ac41e4d53123da374c3b5541e64"},
+    {file = "regex-2023.12.25-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b7fca9205b59c1a3d5031f7e64ed627a1074730a51c2a80e97653e3e9fa0d415"},
+    {file = "regex-2023.12.25-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:086dd15e9435b393ae06f96ab69ab2d333f5d65cbe65ca5a3ef0ec9564dfe770"},
+    {file = "regex-2023.12.25-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e81469f7d01efed9b53740aedd26085f20d49da65f9c1f41e822a33992cb1590"},
+    {file = "regex-2023.12.25-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:34e4af5b27232f68042aa40a91c3b9bb4da0eeb31b7632e0091afc4310afe6cb"},
+    {file = "regex-2023.12.25-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9852b76ab558e45b20bf1893b59af64a28bd3820b0c2efc80e0a70a4a3ea51c1"},
+    {file = "regex-2023.12.25-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ff100b203092af77d1a5a7abe085b3506b7eaaf9abf65b73b7d6905b6cb76988"},
+    {file = "regex-2023.12.25-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cc038b2d8b1470364b1888a98fd22d616fba2b6309c5b5f181ad4483e0017861"},
+    {file = "regex-2023.12.25-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:094ba386bb5c01e54e14434d4caabf6583334090865b23ef58e0424a6286d3dc"},
+    {file = "regex-2023.12.25-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5cd05d0f57846d8ba4b71d9c00f6f37d6b97d5e5ef8b3c3840426a475c8f70f4"},
+    {file = "regex-2023.12.25-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:9aa1a67bbf0f957bbe096375887b2505f5d8ae16bf04488e8b0f334c36e31360"},
+    {file = "regex-2023.12.25-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:98a2636994f943b871786c9e82bfe7883ecdaba2ef5df54e1450fa9869d1f756"},
+    {file = "regex-2023.12.25-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:37f8e93a81fc5e5bd8db7e10e62dc64261bcd88f8d7e6640aaebe9bc180d9ce2"},
+    {file = "regex-2023.12.25-cp38-cp38-win32.whl", hash = "sha256:d78bd484930c1da2b9679290a41cdb25cc127d783768a0369d6b449e72f88beb"},
+    {file = "regex-2023.12.25-cp38-cp38-win_amd64.whl", hash = "sha256:b521dcecebc5b978b447f0f69b5b7f3840eac454862270406a39837ffae4e697"},
+    {file = "regex-2023.12.25-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f7bc09bc9c29ebead055bcba136a67378f03d66bf359e87d0f7c759d6d4ffa31"},
+    {file = "regex-2023.12.25-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e14b73607d6231f3cc4622809c196b540a6a44e903bcfad940779c80dffa7be7"},
+    {file = "regex-2023.12.25-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9eda5f7a50141291beda3edd00abc2d4a5b16c29c92daf8d5bd76934150f3edc"},
+    {file = "regex-2023.12.25-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc6bb9aa69aacf0f6032c307da718f61a40cf970849e471254e0e91c56ffca95"},
+    {file = "regex-2023.12.25-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:298dc6354d414bc921581be85695d18912bea163a8b23cac9a2562bbcd5088b1"},
+    {file = "regex-2023.12.25-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2f4e475a80ecbd15896a976aa0b386c5525d0ed34d5c600b6d3ebac0a67c7ddf"},
+    {file = "regex-2023.12.25-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:531ac6cf22b53e0696f8e1d56ce2396311254eb806111ddd3922c9d937151dae"},
+    {file = "regex-2023.12.25-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22f3470f7524b6da61e2020672df2f3063676aff444db1daa283c2ea4ed259d6"},
+    {file = "regex-2023.12.25-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:89723d2112697feaa320c9d351e5f5e7b841e83f8b143dba8e2d2b5f04e10923"},
+    {file = "regex-2023.12.25-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0ecf44ddf9171cd7566ef1768047f6e66975788258b1c6c6ca78098b95cf9a3d"},
+    {file = "regex-2023.12.25-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:905466ad1702ed4acfd67a902af50b8db1feeb9781436372261808df7a2a7bca"},
+    {file = "regex-2023.12.25-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:4558410b7a5607a645e9804a3e9dd509af12fb72b9825b13791a37cd417d73a5"},
+    {file = "regex-2023.12.25-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:7e316026cc1095f2a3e8cc012822c99f413b702eaa2ca5408a513609488cb62f"},
+    {file = "regex-2023.12.25-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:3b1de218d5375cd6ac4b5493e0b9f3df2be331e86520f23382f216c137913d20"},
+    {file = "regex-2023.12.25-cp39-cp39-win32.whl", hash = "sha256:11a963f8e25ab5c61348d090bf1b07f1953929c13bd2309a0662e9ff680763c9"},
+    {file = "regex-2023.12.25-cp39-cp39-win_amd64.whl", hash = "sha256:e693e233ac92ba83a87024e1d32b5f9ab15ca55ddd916d878146f4e3406b5c91"},
+    {file = "regex-2023.12.25.tar.gz", hash = "sha256:29171aa128da69afdf4bde412d5bedc335f2ca8fcfe4489038577d05f16181e5"},
+]
+
+[[package]]
+name = "requests"
+version = "2.31.0"
+description = "Python HTTP for Humans."
+optional = false
+python-versions = ">=3.7"
+files = [
+    {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"},
+    {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"},
+]
+
+[package.dependencies]
+certifi = ">=2017.4.17"
+charset-normalizer = ">=2,<4"
+idna = ">=2.5,<4"
+urllib3 = ">=1.21.1,<3"
+
+[package.extras]
+socks = ["PySocks (>=1.5.6,!=1.5.7)"]
+use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"]
+
+[[package]]
+name = "rpds-py"
+version = "0.18.0"
+description = "Python bindings to Rust's persistent data structures (rpds)"
+optional = false
+python-versions = ">=3.8"
+files = [
+    {file = "rpds_py-0.18.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:5b4e7d8d6c9b2e8ee2d55c90b59c707ca59bc30058269b3db7b1f8df5763557e"},
+    {file = "rpds_py-0.18.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c463ed05f9dfb9baebef68048aed8dcdc94411e4bf3d33a39ba97e271624f8f7"},
+    {file = "rpds_py-0.18.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:01e36a39af54a30f28b73096dd39b6802eddd04c90dbe161c1b8dbe22353189f"},
+    {file = "rpds_py-0.18.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d62dec4976954a23d7f91f2f4530852b0c7608116c257833922a896101336c51"},
+    {file = "rpds_py-0.18.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dd18772815d5f008fa03d2b9a681ae38d5ae9f0e599f7dda233c439fcaa00d40"},
+    {file = "rpds_py-0.18.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:923d39efa3cfb7279a0327e337a7958bff00cc447fd07a25cddb0a1cc9a6d2da"},
+    {file = "rpds_py-0.18.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39514da80f971362f9267c600b6d459bfbbc549cffc2cef8e47474fddc9b45b1"},
+    {file = "rpds_py-0.18.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a34d557a42aa28bd5c48a023c570219ba2593bcbbb8dc1b98d8cf5d529ab1434"},
+    {file = "rpds_py-0.18.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:93df1de2f7f7239dc9cc5a4a12408ee1598725036bd2dedadc14d94525192fc3"},
+    {file = "rpds_py-0.18.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:34b18ba135c687f4dac449aa5157d36e2cbb7c03cbea4ddbd88604e076aa836e"},
+    {file = "rpds_py-0.18.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:c0b5dcf9193625afd8ecc92312d6ed78781c46ecbf39af9ad4681fc9f464af88"},
+    {file = "rpds_py-0.18.0-cp310-none-win32.whl", hash = "sha256:c4325ff0442a12113a6379af66978c3fe562f846763287ef66bdc1d57925d337"},
+    {file = "rpds_py-0.18.0-cp310-none-win_amd64.whl", hash = "sha256:7223a2a5fe0d217e60a60cdae28d6949140dde9c3bcc714063c5b463065e3d66"},
+    {file = "rpds_py-0.18.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:3a96e0c6a41dcdba3a0a581bbf6c44bb863f27c541547fb4b9711fd8cf0ffad4"},
+    {file = "rpds_py-0.18.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30f43887bbae0d49113cbaab729a112251a940e9b274536613097ab8b4899cf6"},
+    {file = "rpds_py-0.18.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fcb25daa9219b4cf3a0ab24b0eb9a5cc8949ed4dc72acb8fa16b7e1681aa3c58"},
+    {file = "rpds_py-0.18.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d68c93e381010662ab873fea609bf6c0f428b6d0bb00f2c6939782e0818d37bf"},
+    {file = "rpds_py-0.18.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b34b7aa8b261c1dbf7720b5d6f01f38243e9b9daf7e6b8bc1fd4657000062f2c"},
+    {file = "rpds_py-0.18.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2e6d75ab12b0bbab7215e5d40f1e5b738aa539598db27ef83b2ec46747df90e1"},
+    {file = "rpds_py-0.18.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b8612cd233543a3781bc659c731b9d607de65890085098986dfd573fc2befe5"},
+    {file = "rpds_py-0.18.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:aec493917dd45e3c69d00a8874e7cbed844efd935595ef78a0f25f14312e33c6"},
+    {file = "rpds_py-0.18.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:661d25cbffaf8cc42e971dd570d87cb29a665f49f4abe1f9e76be9a5182c4688"},
+    {file = "rpds_py-0.18.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:1df3659d26f539ac74fb3b0c481cdf9d725386e3552c6fa2974f4d33d78e544b"},
+    {file = "rpds_py-0.18.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a1ce3ba137ed54f83e56fb983a5859a27d43a40188ba798993812fed73c70836"},
+    {file = "rpds_py-0.18.0-cp311-none-win32.whl", hash = "sha256:69e64831e22a6b377772e7fb337533c365085b31619005802a79242fee620bc1"},
+    {file = "rpds_py-0.18.0-cp311-none-win_amd64.whl", hash = "sha256:998e33ad22dc7ec7e030b3df701c43630b5bc0d8fbc2267653577e3fec279afa"},
+    {file = "rpds_py-0.18.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:7f2facbd386dd60cbbf1a794181e6aa0bd429bd78bfdf775436020172e2a23f0"},
+    {file = "rpds_py-0.18.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1d9a5be316c15ffb2b3c405c4ff14448c36b4435be062a7f578ccd8b01f0c4d8"},
+    {file = "rpds_py-0.18.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cd5bf1af8efe569654bbef5a3e0a56eca45f87cfcffab31dd8dde70da5982475"},
+    {file = "rpds_py-0.18.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5417558f6887e9b6b65b4527232553c139b57ec42c64570569b155262ac0754f"},
+    {file = "rpds_py-0.18.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:56a737287efecafc16f6d067c2ea0117abadcd078d58721f967952db329a3e5c"},
+    {file = "rpds_py-0.18.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8f03bccbd8586e9dd37219bce4d4e0d3ab492e6b3b533e973fa08a112cb2ffc9"},
+    {file = "rpds_py-0.18.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4457a94da0d5c53dc4b3e4de1158bdab077db23c53232f37a3cb7afdb053a4e3"},
+    {file = "rpds_py-0.18.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0ab39c1ba9023914297dd88ec3b3b3c3f33671baeb6acf82ad7ce883f6e8e157"},
+    {file = "rpds_py-0.18.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9d54553c1136b50fd12cc17e5b11ad07374c316df307e4cfd6441bea5fb68496"},
+    {file = "rpds_py-0.18.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0af039631b6de0397ab2ba16eaf2872e9f8fca391b44d3d8cac317860a700a3f"},
+    {file = "rpds_py-0.18.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:84ffab12db93b5f6bad84c712c92060a2d321b35c3c9960b43d08d0f639d60d7"},
+    {file = "rpds_py-0.18.0-cp312-none-win32.whl", hash = "sha256:685537e07897f173abcf67258bee3c05c374fa6fff89d4c7e42fb391b0605e98"},
+    {file = "rpds_py-0.18.0-cp312-none-win_amd64.whl", hash = "sha256:e003b002ec72c8d5a3e3da2989c7d6065b47d9eaa70cd8808b5384fbb970f4ec"},
+    {file = "rpds_py-0.18.0-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:08f9ad53c3f31dfb4baa00da22f1e862900f45908383c062c27628754af2e88e"},
+    {file = "rpds_py-0.18.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c0013fe6b46aa496a6749c77e00a3eb07952832ad6166bd481c74bda0dcb6d58"},
+    {file = "rpds_py-0.18.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e32a92116d4f2a80b629778280103d2a510a5b3f6314ceccd6e38006b5e92dcb"},
+    {file = "rpds_py-0.18.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e541ec6f2ec456934fd279a3120f856cd0aedd209fc3852eca563f81738f6861"},
+    {file = "rpds_py-0.18.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bed88b9a458e354014d662d47e7a5baafd7ff81c780fd91584a10d6ec842cb73"},
+    {file = "rpds_py-0.18.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2644e47de560eb7bd55c20fc59f6daa04682655c58d08185a9b95c1970fa1e07"},
+    {file = "rpds_py-0.18.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e8916ae4c720529e18afa0b879473049e95949bf97042e938530e072fde061d"},
+    {file = "rpds_py-0.18.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:465a3eb5659338cf2a9243e50ad9b2296fa15061736d6e26240e713522b6235c"},
+    {file = "rpds_py-0.18.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:ea7d4a99f3b38c37eac212dbd6ec42b7a5ec51e2c74b5d3223e43c811609e65f"},
+    {file = "rpds_py-0.18.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:67071a6171e92b6da534b8ae326505f7c18022c6f19072a81dcf40db2638767c"},
+    {file = "rpds_py-0.18.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:41ef53e7c58aa4ef281da975f62c258950f54b76ec8e45941e93a3d1d8580594"},
+    {file = "rpds_py-0.18.0-cp38-none-win32.whl", hash = "sha256:fdea4952db2793c4ad0bdccd27c1d8fdd1423a92f04598bc39425bcc2b8ee46e"},
+    {file = "rpds_py-0.18.0-cp38-none-win_amd64.whl", hash = "sha256:7cd863afe7336c62ec78d7d1349a2f34c007a3cc6c2369d667c65aeec412a5b1"},
+    {file = "rpds_py-0.18.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:5307def11a35f5ae4581a0b658b0af8178c65c530e94893345bebf41cc139d33"},
+    {file = "rpds_py-0.18.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:77f195baa60a54ef9d2de16fbbfd3ff8b04edc0c0140a761b56c267ac11aa467"},
+    {file = "rpds_py-0.18.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:39f5441553f1c2aed4de4377178ad8ff8f9d733723d6c66d983d75341de265ab"},
+    {file = "rpds_py-0.18.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9a00312dea9310d4cb7dbd7787e722d2e86a95c2db92fbd7d0155f97127bcb40"},
+    {file = "rpds_py-0.18.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8f2fc11e8fe034ee3c34d316d0ad8808f45bc3b9ce5857ff29d513f3ff2923a1"},
+    {file = "rpds_py-0.18.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:586f8204935b9ec884500498ccc91aa869fc652c40c093bd9e1471fbcc25c022"},
+    {file = "rpds_py-0.18.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ddc2f4dfd396c7bfa18e6ce371cba60e4cf9d2e5cdb71376aa2da264605b60b9"},
+    {file = "rpds_py-0.18.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5ddcba87675b6d509139d1b521e0c8250e967e63b5909a7e8f8944d0f90ff36f"},
+    {file = "rpds_py-0.18.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:7bd339195d84439cbe5771546fe8a4e8a7a045417d8f9de9a368c434e42a721e"},
+    {file = "rpds_py-0.18.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:d7c36232a90d4755b720fbd76739d8891732b18cf240a9c645d75f00639a9024"},
+    {file = "rpds_py-0.18.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:6b0817e34942b2ca527b0e9298373e7cc75f429e8da2055607f4931fded23e20"},
+    {file = "rpds_py-0.18.0-cp39-none-win32.whl", hash = "sha256:99f70b740dc04d09e6b2699b675874367885217a2e9f782bdf5395632ac663b7"},
+    {file = "rpds_py-0.18.0-cp39-none-win_amd64.whl", hash = "sha256:6ef687afab047554a2d366e112dd187b62d261d49eb79b77e386f94644363294"},
+    {file = "rpds_py-0.18.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:ad36cfb355e24f1bd37cac88c112cd7730873f20fb0bdaf8ba59eedf8216079f"},
+    {file = "rpds_py-0.18.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:36b3ee798c58ace201289024b52788161e1ea133e4ac93fba7d49da5fec0ef9e"},
+    {file = "rpds_py-0.18.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8a2f084546cc59ea99fda8e070be2fd140c3092dc11524a71aa8f0f3d5a55ca"},
+    {file = "rpds_py-0.18.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e4461d0f003a0aa9be2bdd1b798a041f177189c1a0f7619fe8c95ad08d9a45d7"},
+    {file = "rpds_py-0.18.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8db715ebe3bb7d86d77ac1826f7d67ec11a70dbd2376b7cc214199360517b641"},
+    {file = "rpds_py-0.18.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:793968759cd0d96cac1e367afd70c235867831983f876a53389ad869b043c948"},
+    {file = "rpds_py-0.18.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66e6a3af5a75363d2c9a48b07cb27c4ea542938b1a2e93b15a503cdfa8490795"},
+    {file = "rpds_py-0.18.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6ef0befbb5d79cf32d0266f5cff01545602344eda89480e1dd88aca964260b18"},
+    {file = "rpds_py-0.18.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:1d4acf42190d449d5e89654d5c1ed3a4f17925eec71f05e2a41414689cda02d1"},
+    {file = "rpds_py-0.18.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:a5f446dd5055667aabaee78487f2b5ab72e244f9bc0b2ffebfeec79051679984"},
+    {file = "rpds_py-0.18.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:9dbbeb27f4e70bfd9eec1be5477517365afe05a9b2c441a0b21929ee61048124"},
+    {file = "rpds_py-0.18.0-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:22806714311a69fd0af9b35b7be97c18a0fc2826e6827dbb3a8c94eac6cf7eeb"},
+    {file = "rpds_py-0.18.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:b34ae4636dfc4e76a438ab826a0d1eed2589ca7d9a1b2d5bb546978ac6485461"},
+    {file = "rpds_py-0.18.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c8370641f1a7f0e0669ddccca22f1da893cef7628396431eb445d46d893e5cd"},
+    {file = "rpds_py-0.18.0-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c8362467a0fdeccd47935f22c256bec5e6abe543bf0d66e3d3d57a8fb5731863"},
+    {file = "rpds_py-0.18.0-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:11a8c85ef4a07a7638180bf04fe189d12757c696eb41f310d2426895356dcf05"},
+    {file = "rpds_py-0.18.0-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b316144e85316da2723f9d8dc75bada12fa58489a527091fa1d5a612643d1a0e"},
+    {file = "rpds_py-0.18.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cf1ea2e34868f6fbf070e1af291c8180480310173de0b0c43fc38a02929fc0e3"},
+    {file = "rpds_py-0.18.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e546e768d08ad55b20b11dbb78a745151acbd938f8f00d0cfbabe8b0199b9880"},
+    {file = "rpds_py-0.18.0-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:4901165d170a5fde6f589acb90a6b33629ad1ec976d4529e769c6f3d885e3e80"},
+    {file = "rpds_py-0.18.0-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:618a3d6cae6ef8ec88bb76dd80b83cfe415ad4f1d942ca2a903bf6b6ff97a2da"},
+    {file = "rpds_py-0.18.0-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:ed4eb745efbff0a8e9587d22a84be94a5eb7d2d99c02dacf7bd0911713ed14dd"},
+    {file = "rpds_py-0.18.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:6c81e5f372cd0dc5dc4809553d34f832f60a46034a5f187756d9b90586c2c307"},
+    {file = "rpds_py-0.18.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:43fbac5f22e25bee1d482c97474f930a353542855f05c1161fd804c9dc74a09d"},
+    {file = "rpds_py-0.18.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d7faa6f14017c0b1e69f5e2c357b998731ea75a442ab3841c0dbbbfe902d2c4"},
+    {file = "rpds_py-0.18.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:08231ac30a842bd04daabc4d71fddd7e6d26189406d5a69535638e4dcb88fe76"},
+    {file = "rpds_py-0.18.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:044a3e61a7c2dafacae99d1e722cc2d4c05280790ec5a05031b3876809d89a5c"},
+    {file = "rpds_py-0.18.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3f26b5bd1079acdb0c7a5645e350fe54d16b17bfc5e71f371c449383d3342e17"},
+    {file = "rpds_py-0.18.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:482103aed1dfe2f3b71a58eff35ba105289b8d862551ea576bd15479aba01f66"},
+    {file = "rpds_py-0.18.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1374f4129f9bcca53a1bba0bb86bf78325a0374577cf7e9e4cd046b1e6f20e24"},
+    {file = "rpds_py-0.18.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:635dc434ff724b178cb192c70016cc0ad25a275228f749ee0daf0eddbc8183b1"},
+    {file = "rpds_py-0.18.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:bc362ee4e314870a70f4ae88772d72d877246537d9f8cb8f7eacf10884862432"},
+    {file = "rpds_py-0.18.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:4832d7d380477521a8c1644bbab6588dfedea5e30a7d967b5fb75977c45fd77f"},
+    {file = "rpds_py-0.18.0.tar.gz", hash = "sha256:42821446ee7a76f5d9f71f9e33a4fb2ffd724bb3e7f93386150b61a43115788d"},
+]
+
+[[package]]
+name = "six"
+version = "1.16.0"
+description = "Python 2 and 3 compatibility utilities"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*"
+files = [
+    {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
+    {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"},
+]
+
+[[package]]
+name = "soupsieve"
+version = "2.5"
+description = "A modern CSS selector implementation for Beautiful Soup."
+optional = false
+python-versions = ">=3.8"
+files = [
+    {file = "soupsieve-2.5-py3-none-any.whl", hash = "sha256:eaa337ff55a1579b6549dc679565eac1e3d000563bcb1c8ab0d0fefbc0c2cdc7"},
+    {file = "soupsieve-2.5.tar.gz", hash = "sha256:5663d5a7b3bfaeee0bc4372e7fc48f9cff4940b3eec54a6451cc5299f1097690"},
+]
+
+[[package]]
+name = "stack-data"
+version = "0.6.3"
+description = "Extract data from python stack frames and tracebacks for informative displays"
+optional = false
+python-versions = "*"
+files = [
+    {file = "stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695"},
+    {file = "stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9"},
+]
+
+[package.dependencies]
+asttokens = ">=2.1.0"
+executing = ">=1.2.0"
+pure-eval = "*"
+
+[package.extras]
+tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"]
+
+[[package]]
+name = "tinycss2"
+version = "1.2.1"
+description = "A tiny CSS parser"
+optional = false
+python-versions = ">=3.7"
+files = [
+    {file = "tinycss2-1.2.1-py3-none-any.whl", hash = "sha256:2b80a96d41e7c3914b8cda8bc7f705a4d9c49275616e886103dd839dfc847847"},
+    {file = "tinycss2-1.2.1.tar.gz", hash = "sha256:8cff3a8f066c2ec677c06dbc7b45619804a6938478d9d73c284b29d14ecb0627"},
+]
+
+[package.dependencies]
+webencodings = ">=0.4"
+
+[package.extras]
+doc = ["sphinx", "sphinx_rtd_theme"]
+test = ["flake8", "isort", "pytest"]
+
+[[package]]
+name = "toml"
+version = "0.10.2"
+description = "Python Library for Tom's Obvious, Minimal Language"
+optional = false
+python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
+files = [
+    {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"},
+    {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"},
+]
+
+[[package]]
+name = "tornado"
+version = "6.4"
+description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed."
+optional = false
+python-versions = ">= 3.8"
+files = [
+    {file = "tornado-6.4-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:02ccefc7d8211e5a7f9e8bc3f9e5b0ad6262ba2fbb683a6443ecc804e5224ce0"},
+    {file = "tornado-6.4-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:27787de946a9cffd63ce5814c33f734c627a87072ec7eed71f7fc4417bb16263"},
+    {file = "tornado-6.4-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f7894c581ecdcf91666a0912f18ce5e757213999e183ebfc2c3fdbf4d5bd764e"},
+    {file = "tornado-6.4-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e43bc2e5370a6a8e413e1e1cd0c91bedc5bd62a74a532371042a18ef19e10579"},
+    {file = "tornado-6.4-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f0251554cdd50b4b44362f73ad5ba7126fc5b2c2895cc62b14a1c2d7ea32f212"},
+    {file = "tornado-6.4-cp38-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:fd03192e287fbd0899dd8f81c6fb9cbbc69194d2074b38f384cb6fa72b80e9c2"},
+    {file = "tornado-6.4-cp38-abi3-musllinux_1_1_i686.whl", hash = "sha256:88b84956273fbd73420e6d4b8d5ccbe913c65d31351b4c004ae362eba06e1f78"},
+    {file = "tornado-6.4-cp38-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:71ddfc23a0e03ef2df1c1397d859868d158c8276a0603b96cf86892bff58149f"},
+    {file = "tornado-6.4-cp38-abi3-win32.whl", hash = "sha256:6f8a6c77900f5ae93d8b4ae1196472d0ccc2775cc1dfdc9e7727889145c45052"},
+    {file = "tornado-6.4-cp38-abi3-win_amd64.whl", hash = "sha256:10aeaa8006333433da48dec9fe417877f8bcc21f48dda8d661ae79da357b2a63"},
+    {file = "tornado-6.4.tar.gz", hash = "sha256:72291fa6e6bc84e626589f1c29d90a5a6d593ef5ae68052ee2ef000dfd273dee"},
+]
+
+[[package]]
+name = "traitlets"
+version = "5.14.2"
+description = "Traitlets Python configuration system"
+optional = false
+python-versions = ">=3.8"
+files = [
+    {file = "traitlets-5.14.2-py3-none-any.whl", hash = "sha256:fcdf85684a772ddeba87db2f398ce00b40ff550d1528c03c14dbf6a02003cd80"},
+    {file = "traitlets-5.14.2.tar.gz", hash = "sha256:8cdd83c040dab7d1dee822678e5f5d100b514f7b72b01615b26fc5718916fdf9"},
+]
+
+[package.extras]
+docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"]
+test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,<8.1)", "pytest-mock", "pytest-mypy-testing"]
+
+[[package]]
+name = "urllib3"
+version = "2.2.1"
+description = "HTTP library with thread-safe connection pooling, file post, and more."
+optional = false
+python-versions = ">=3.8"
+files = [
+    {file = "urllib3-2.2.1-py3-none-any.whl", hash = "sha256:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d"},
+    {file = "urllib3-2.2.1.tar.gz", hash = "sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19"},
+]
+
+[package.extras]
+brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"]
+h2 = ["h2 (>=4,<5)"]
+socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"]
+zstd = ["zstandard (>=0.18.0)"]
+
+[[package]]
+name = "watchdog"
+version = "4.0.0"
+description = "Filesystem events monitoring"
+optional = false
+python-versions = ">=3.8"
+files = [
+    {file = "watchdog-4.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:39cb34b1f1afbf23e9562501673e7146777efe95da24fab5707b88f7fb11649b"},
+    {file = "watchdog-4.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c522392acc5e962bcac3b22b9592493ffd06d1fc5d755954e6be9f4990de932b"},
+    {file = "watchdog-4.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6c47bdd680009b11c9ac382163e05ca43baf4127954c5f6d0250e7d772d2b80c"},
+    {file = "watchdog-4.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8350d4055505412a426b6ad8c521bc7d367d1637a762c70fdd93a3a0d595990b"},
+    {file = "watchdog-4.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c17d98799f32e3f55f181f19dd2021d762eb38fdd381b4a748b9f5a36738e935"},
+    {file = "watchdog-4.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4986db5e8880b0e6b7cd52ba36255d4793bf5cdc95bd6264806c233173b1ec0b"},
+    {file = "watchdog-4.0.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:11e12fafb13372e18ca1bbf12d50f593e7280646687463dd47730fd4f4d5d257"},
+    {file = "watchdog-4.0.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5369136a6474678e02426bd984466343924d1df8e2fd94a9b443cb7e3aa20d19"},
+    {file = "watchdog-4.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:76ad8484379695f3fe46228962017a7e1337e9acadafed67eb20aabb175df98b"},
+    {file = "watchdog-4.0.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:45cc09cc4c3b43fb10b59ef4d07318d9a3ecdbff03abd2e36e77b6dd9f9a5c85"},
+    {file = "watchdog-4.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:eed82cdf79cd7f0232e2fdc1ad05b06a5e102a43e331f7d041e5f0e0a34a51c4"},
+    {file = "watchdog-4.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ba30a896166f0fee83183cec913298151b73164160d965af2e93a20bbd2ab605"},
+    {file = "watchdog-4.0.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d18d7f18a47de6863cd480734613502904611730f8def45fc52a5d97503e5101"},
+    {file = "watchdog-4.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2895bf0518361a9728773083908801a376743bcc37dfa252b801af8fd281b1ca"},
+    {file = "watchdog-4.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:87e9df830022488e235dd601478c15ad73a0389628588ba0b028cb74eb72fed8"},
+    {file = "watchdog-4.0.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:6e949a8a94186bced05b6508faa61b7adacc911115664ccb1923b9ad1f1ccf7b"},
+    {file = "watchdog-4.0.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:6a4db54edea37d1058b08947c789a2354ee02972ed5d1e0dca9b0b820f4c7f92"},
+    {file = "watchdog-4.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d31481ccf4694a8416b681544c23bd271f5a123162ab603c7d7d2dd7dd901a07"},
+    {file = "watchdog-4.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:8fec441f5adcf81dd240a5fe78e3d83767999771630b5ddfc5867827a34fa3d3"},
+    {file = "watchdog-4.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:6a9c71a0b02985b4b0b6d14b875a6c86ddea2fdbebd0c9a720a806a8bbffc69f"},
+    {file = "watchdog-4.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:557ba04c816d23ce98a06e70af6abaa0485f6d94994ec78a42b05d1c03dcbd50"},
+    {file = "watchdog-4.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:d0f9bd1fd919134d459d8abf954f63886745f4660ef66480b9d753a7c9d40927"},
+    {file = "watchdog-4.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:f9b2fdca47dc855516b2d66eef3c39f2672cbf7e7a42e7e67ad2cbfcd6ba107d"},
+    {file = "watchdog-4.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:73c7a935e62033bd5e8f0da33a4dcb763da2361921a69a5a95aaf6c93aa03a87"},
+    {file = "watchdog-4.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:6a80d5cae8c265842c7419c560b9961561556c4361b297b4c431903f8c33b269"},
+    {file = "watchdog-4.0.0-py3-none-win32.whl", hash = "sha256:8f9a542c979df62098ae9c58b19e03ad3df1c9d8c6895d96c0d51da17b243b1c"},
+    {file = "watchdog-4.0.0-py3-none-win_amd64.whl", hash = "sha256:f970663fa4f7e80401a7b0cbeec00fa801bf0287d93d48368fc3e6fa32716245"},
+    {file = "watchdog-4.0.0-py3-none-win_ia64.whl", hash = "sha256:9a03e16e55465177d416699331b0f3564138f1807ecc5f2de9d55d8f188d08c7"},
+    {file = "watchdog-4.0.0.tar.gz", hash = "sha256:e3e7065cbdabe6183ab82199d7a4f6b3ba0a438c5a512a68559846ccb76a78ec"},
+]
+
+[package.extras]
+watchmedo = ["PyYAML (>=3.10)"]
+
+[[package]]
+name = "wcwidth"
+version = "0.2.13"
+description = "Measures the displayed width of unicode strings in a terminal"
+optional = false
+python-versions = "*"
+files = [
+    {file = "wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859"},
+    {file = "wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5"},
+]
+
+[[package]]
+name = "webencodings"
+version = "0.5.1"
+description = "Character encoding aliases for legacy web content"
+optional = false
+python-versions = "*"
+files = [
+    {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"},
+    {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"},
+]
+
+[metadata]
+lock-version = "2.0"
+python-versions = "^3.11"
+content-hash = "cecc71f9a46b4121cf4a1331721bcbffd6b361100b46af987e3b56760fadf28f"
diff --git a/docs/prepare_for_build.py b/docs/prepare_for_build.py
new file mode 100644
index 0000000000000000000000000000000000000000..bc23ab6599bcc9274e5e4d07d6e5dd35cd73a570
--- /dev/null
+++ b/docs/prepare_for_build.py
@@ -0,0 +1,435 @@
+"""Prepare the docs folder for building the documentation.
+
+This file will:
+1. Update the mkdocs.yml file to include all example notebooks
+2. Create API reference pages for all integration folders
+3. Update the search paths for the mkdocstrings plugin
+4. Copy over the latest CHANGELOG.md/CONTRIBUTING.md/DOCS_README.md
+   to the docs/docs folder
+"""
+
+import toml
+import yaml
+import os
+
+MKDOCS_YML = "docs/mkdocs.yml"
+
+# examples config
+EXAMPLES_DIR = "docs/docs/examples"
+FOLDER_NAME_TO_LABEL = {
+    "./examples/agent": "Agents",
+    "./examples/callbacks": "Callbacks",
+    "./examples/chat_engine": "Chat Engines",
+    "./examples/customization": "Customization",
+    "./examples/data_connectors": "Data Connectors",
+    "./examples/discover_llamaindex": "Discover LlamaIndex",
+    "./examples/docstore": "Docstores",
+    "./examples/embeddings": "Embeddings",
+    "./examples/evaluation": "Evaluation",
+    "./examples/finetuning": "Finetuning",
+    "./examples/ingestion": "Ingestion",
+    "./examples/llama_dataset": "Llama Datasets",
+    "./examples/llama_hub": "Llama Hub",
+    "./examples/llm": "LLMs",
+    "./examples/low_level": "Low Level",
+    "./examples/managed": "Managed Indexes",
+    "./examples/metadata_extraction": "Metadata Extractors",
+    "./examples/multi_modal": "Multi-Modal",
+    "./examples/multi_tenancy": "Multi-Tenancy",
+    "./examples/node_parsers": "Node Parsers & Text Splitters",
+    "./examples/node_postprocessor": "Node Postprocessors",
+    "./examples/objects": "Object Stores",
+    "./examples/output_parsing": "Output Parsers",
+    "./examples/param_optimizer": "Param Optimizer",
+    "./examples/pipeline": "Query Pipeline",
+    "./examples/prompts": "Prompts",
+    "./examples/query_engine": "Query Engines",
+    "./examples/query_transformations": "Query Transformations",
+    "./examples/response_synthesizers": "Response Synthesizers",
+    "./examples/retrievers": "Retrievers",
+    "./examples/tools": "Tools",
+    "./examples/transforms": "Transforms",
+    "./examples/usecases": "Use Cases",
+    "./examples/vector_stores": "Vector Stores",
+}
+
+# integration config
+INTEGRATION_FOLDERS = [
+    # "llama-index-networks",
+    # "llama-index-finetuning",
+    "llama-index-packs",
+    "llama-index-integrations",
+    # "llama-index-cli",
+]
+INTEGRATION_FOLDER_TO_LABEL = {
+    "finetuning": "Fine-tuning",
+    "llms": "LLMs",
+    "agent": "Agents",
+    "callbacks": "Callbacks",
+    "chat_engines": "Chat Engines",
+    "embeddings": "Embeddings",
+    "evaluation": "Evaluation",
+    "extractors": "Metadata Extractors",
+    "indices": "Indexes",
+    "ingestion": "Ingestion",
+    "instrumentation": "Instrumentation",
+    "llama_dataset": "Llama Datasets",
+    "packs": "Llama Packs",
+    "memory": "Memory",
+    "multi_modal_llms": "Multi-Modal LLMs",
+    "node_parsers": "Node Parsers & Text Splitters",
+    "objects": "Object Stores",
+    "output_parsers": "Output Parsers",
+    "postprocessor": "Node Postprocessors",
+    "program": "Programs",
+    "prompts": "Prompts",
+    "query_engine": "Query Engines",
+    "query_pipeline": "Query Pipeline",
+    "question_gen": "Question Generators",
+    "readers": "Readers",
+    "response_synthesizers": "Response Synthesizers",
+    "retrievers": "Retrievers",
+    "schema": "Schema",
+    "storage": "Storage",
+    "tools": "Tools",
+}
+API_REF_TEMPLATE = """::: {import_path}
+    options:
+      members:
+{members}
+"""
+API_REF_MEMBER_TEMPLATE = """        - {member}"""
+
+with open(MKDOCS_YML) as f:
+    mkdocs = yaml.safe_load(f)
+
+# get all example notebooks
+notebooks = []
+for root, dirs, files in os.walk(EXAMPLES_DIR):
+    for file in files:
+        if file.endswith(".ipynb"):
+            notebooks.append(os.path.join(root, file))
+
+# update the mkdocs.yml nav section
+examples_idx = -1
+for idx, item in enumerate(mkdocs["nav"]):
+    if "Examples" in item:
+        examples_idx = idx
+        break
+
+for path_name, label in FOLDER_NAME_TO_LABEL.items():
+    path_name = os.path.join(
+        EXAMPLES_DIR.replace("examples", ""), path_name.replace("./", "")
+    )
+
+    label_idx = -1
+    for idx, item in enumerate(mkdocs["nav"][examples_idx]["Examples"]):
+        if label in item:
+            label_idx = idx
+            break
+
+    if label_idx == -1:
+        mkdocs["nav"][examples_idx]["Examples"].append({label: []})
+
+    for file_name in os.listdir(path_name):
+        if file_name.endswith(".ipynb"):
+            toc_path_name = "./" + os.path.join(
+                path_name.replace("docs/docs/", ""), file_name
+            )
+            if (
+                toc_path_name
+                not in mkdocs["nav"][examples_idx]["Examples"][label_idx][
+                    label
+                ]
+            ):
+                mkdocs["nav"][examples_idx]["Examples"][label_idx][
+                    label
+                ].append(toc_path_name)
+        if os.path.isdir(os.path.join(path_name, file_name)):
+            for root, dirs, files in os.walk(
+                os.path.join(path_name, file_name)
+            ):
+                for file in files:
+                    if file.endswith(".ipynb"):
+                        toc_path_name = "./" + os.path.join(
+                            root.replace("docs/docs/", ""), file
+                        )
+                        if (
+                            toc_path_name
+                            not in mkdocs["nav"][examples_idx]["Examples"][
+                                label_idx
+                            ][label]
+                        ):
+                            mkdocs["nav"][examples_idx]["Examples"][label_idx][
+                                label
+                            ].append(toc_path_name)
+
+
+# find all pyproject.toml files in the integration folders
+# each toml file has a toml['tool']['llamahub']['import_path'] key that we need
+# toml['tool']['llamahub']['class_authors'] contains a list of exposed classes
+# For each class, we need to create an API reference page
+search_paths = []
+for folder in INTEGRATION_FOLDERS:
+    for root, dirs, files in os.walk(folder):
+        for file in files:
+            if file == "pyproject.toml":
+                toml_path = os.path.join(root, file)
+                with open(toml_path) as f:
+                    toml_data = toml.load(f)
+                import_path = toml_data["tool"]["llamahub"]["import_path"]
+                class_authors = toml_data["tool"]["llamahub"]["class_authors"]
+                members = "\n".join(
+                    [
+                        API_REF_MEMBER_TEMPLATE.format(member=member)
+                        for member in class_authors
+                    ]
+                )
+                api_ref = API_REF_TEMPLATE.format(
+                    import_path=import_path, members=members
+                )
+
+                folder_name = "/".join(import_path.split(".")[1:-1])
+                search_paths.append(os.path.join("../" + root))
+                # special cases
+                if folder_name == "vector_stores":
+                    folder_name = "storage/vector_store"
+                elif folder_name == "indices/managed":
+                    folder_name = "indices"
+                elif folder_name == "graph_stores":
+                    folder_name = "storage/graph_stores"
+
+                full_path = os.path.join(
+                    "docs/docs/api_reference", folder_name
+                )
+                module_name = import_path.split(".")[-1] + ".md"
+                os.makedirs(full_path, exist_ok=True)
+                with open(os.path.join(full_path, module_name), "w") as f:
+                    f.write(api_ref)
+
+                # update the mkdocs.yml nav section
+                api_ref_idx = -1
+                for idx, item in enumerate(mkdocs["nav"]):
+                    if "API Reference" in item:
+                        api_ref_idx = idx
+                        break
+
+                if "storage" in folder_name:
+                    label = "Storage"
+                else:
+                    label = INTEGRATION_FOLDER_TO_LABEL[
+                        import_path.split(".")[1]
+                    ]
+
+                label_idx = -1
+                for idx, item in enumerate(
+                    mkdocs["nav"][api_ref_idx]["API Reference"]
+                ):
+                    if label in item:
+                        label_idx = idx
+                        break
+
+                if label_idx == -1:
+                    mkdocs["nav"][api_ref_idx]["API Reference"].append(
+                        {label: []}
+                    )
+
+                toc_path_name = "./" + os.path.join(
+                    "api_reference", folder_name, module_name
+                )
+                if (
+                    toc_path_name
+                    not in mkdocs["nav"][api_ref_idx]["API Reference"][
+                        label_idx
+                    ][label]
+                ):
+                    # storage is a special case, multi-level
+                    if label == "Storage":
+                        sub_path = folder_name.split("/")[-1]
+                        sub_label = sub_path.replace("_", " ").title()
+                        sub_label_idx = -1
+                        for (
+                            existing_sub_label_idx,
+                            existing_sub_label,
+                        ) in enumerate(
+                            mkdocs["nav"][api_ref_idx]["API Reference"][
+                                label_idx
+                            ][label]
+                        ):
+                            if sub_label in existing_sub_label:
+                                sub_label_idx = existing_sub_label_idx
+                                break
+
+                        if sub_label_idx == -1:
+                            mkdocs["nav"][api_ref_idx]["API Reference"][
+                                label_idx
+                            ][label].append({sub_label: []})
+
+                        if (
+                            toc_path_name
+                            not in mkdocs["nav"][api_ref_idx]["API Reference"][
+                                label_idx
+                            ][label][sub_label_idx][sub_label]
+                        ):
+                            mkdocs["nav"][api_ref_idx]["API Reference"][
+                                label_idx
+                            ][label][sub_label_idx][sub_label].append(
+                                toc_path_name
+                            )
+
+                        # sort per sub-label
+                        mkdocs["nav"][api_ref_idx]["API Reference"][label_idx][
+                            label
+                        ][sub_label_idx][sub_label] = sorted(
+                            mkdocs["nav"][api_ref_idx]["API Reference"][
+                                label_idx
+                            ][label][sub_label_idx][sub_label],
+                            key=lambda x: next(iter(x.keys()))
+                            if isinstance(x, dict)
+                            else x,
+                        )
+                    else:
+                        mkdocs["nav"][api_ref_idx]["API Reference"][label_idx][
+                            label
+                        ].append(toc_path_name)
+
+                # maintain sorting per label
+                mkdocs["nav"][api_ref_idx]["API Reference"][label_idx][
+                    label
+                ] = sorted(
+                    mkdocs["nav"][api_ref_idx]["API Reference"][label_idx][
+                        label
+                    ],
+                    key=lambda x: next(iter(x.keys()))
+                    if isinstance(x, dict)
+                    else x,
+                )
+
+# add existing api reference pages to nav
+api_ref_idx = -1
+for idx, item in enumerate(mkdocs["nav"]):
+    if "API Reference" in item:
+        api_ref_idx = idx
+        break
+
+for root, dirs, files in os.walk("docs/docs/api_reference"):
+    for file in files:
+        if file.endswith(".md"):
+            toc_path_name = os.path.join(
+                root.replace("docs/docs/api_reference", "./api_reference"),
+                file,
+            )
+
+            if toc_path_name == "./api_reference/index.md":
+                continue
+
+            if "storage" in root:
+                label = "Storage"
+            else:
+                label = INTEGRATION_FOLDER_TO_LABEL[root.split("/")[-1]]
+
+            label_idx = -1
+            for idx, item in enumerate(
+                mkdocs["nav"][api_ref_idx]["API Reference"]
+            ):
+                if label in item:
+                    label_idx = idx
+                    break
+
+            if label_idx == -1:
+                mkdocs["nav"][api_ref_idx]["API Reference"].append({label: []})
+
+            if "storage" in root:
+                sub_path = root.split("/")[-1]
+                sub_label = sub_path.replace("_", " ").title()
+                sub_label_idx = -1
+                for (
+                    existing_sub_label_idx,
+                    existing_sub_label,
+                ) in enumerate(
+                    mkdocs["nav"][api_ref_idx]["API Reference"][label_idx][
+                        label
+                    ]
+                ):
+                    if sub_label in existing_sub_label:
+                        sub_label_idx = existing_sub_label_idx
+                        break
+
+                if sub_label_idx == -1:
+                    mkdocs["nav"][api_ref_idx]["API Reference"][label_idx][
+                        label
+                    ].append({sub_label: []})
+
+                if (
+                    toc_path_name
+                    not in mkdocs["nav"][api_ref_idx]["API Reference"][
+                        label_idx
+                    ][label][sub_label_idx][sub_label]
+                ):
+                    mkdocs["nav"][api_ref_idx]["API Reference"][label_idx][
+                        label
+                    ][sub_label_idx][sub_label].append(toc_path_name)
+
+                # sort per sub-label
+                mkdocs["nav"][api_ref_idx]["API Reference"][label_idx][label][
+                    sub_label_idx
+                ][sub_label] = sorted(
+                    mkdocs["nav"][api_ref_idx]["API Reference"][label_idx][
+                        label
+                    ][sub_label_idx][sub_label],
+                    key=lambda x: next(iter(x.keys()))
+                    if isinstance(x, dict)
+                    else x,
+                )
+            elif (
+                toc_path_name
+                not in mkdocs["nav"][api_ref_idx]["API Reference"][label_idx][
+                    label
+                ]
+            ):
+                mkdocs["nav"][api_ref_idx]["API Reference"][label_idx][
+                    label
+                ].append(toc_path_name)
+
+                # sort per label
+                mkdocs["nav"][api_ref_idx]["API Reference"][label_idx][
+                    label
+                ] = sorted(
+                    mkdocs["nav"][api_ref_idx]["API Reference"][label_idx][
+                        label
+                    ],
+                    key=lambda x: next(iter(x.keys()))
+                    if isinstance(x, dict)
+                    else x,
+                )
+
+# sort the API Reference nav section
+mkdocs["nav"][api_ref_idx]["API Reference"] = sorted(
+    mkdocs["nav"][api_ref_idx]["API Reference"],
+    key=lambda x: next(iter(x.keys())) if isinstance(x, dict) else x,
+)
+
+
+# update search paths
+for i, plugin in enumerate(mkdocs["plugins"]):
+    if "mkdocstrings" in plugin:
+        for search_path in search_paths:
+            if (
+                search_path
+                not in mkdocs["plugins"][i]["mkdocstrings"]["handlers"][
+                    "python"
+                ]["paths"]
+            ):
+                mkdocs["plugins"][i]["mkdocstrings"]["handlers"]["python"][
+                    "paths"
+                ].append(search_path)
+
+# write the updated mkdocs.yml
+with open(MKDOCS_YML, "w") as f:
+    yaml.dump(mkdocs, f)
+
+
+# copy over extra files
+os.system("cp CHANGELOG.md docs/docs/CHANGELOG.md")
+os.system("cp CONTRIBUTING.md docs/docs/CONTRIBUTING.md")
+os.system("cp docs/DOCS_README.md docs/docs/DOCS_README.md")
diff --git a/docs/pyproject.toml b/docs/pyproject.toml
new file mode 100644
index 0000000000000000000000000000000000000000..cc03bdac38be7b3f8c5969f221f2fb242ad458d0
--- /dev/null
+++ b/docs/pyproject.toml
@@ -0,0 +1,19 @@
+[build-system]
+build-backend = "poetry.core.masonry.api"
+requires = ["poetry-core"]
+
+[tool.poetry]
+authors = ["Laurie Voss <github@seldo.com>"]
+description = ""
+name = "new-docs"
+readme = "README.md"
+version = "0.1.0"
+
+[tool.poetry.dependencies]
+python = "^3.11"
+mkdocs = "^1.5.3"
+mkdocstrings = {extras = ["python"], version = "^0.24.1"}
+mkdocs-jupyter = "^0.24.6"
+mkdocs-include-dir-to-nav = "^1.2.0"
+mkdocs-material = "^9.5.13"
+mkdocs-redirects = "^1.2.1"
diff --git a/docs/requirements.txt b/docs/requirements.txt
index 667f86c455462e2de976a6a8223cc83b596c8fce..fe3c0867b66b46500daed5dfaa7b9178169a303d 100644
--- a/docs/requirements.txt
+++ b/docs/requirements.txt
@@ -1,14 +1,82 @@
-./llama-index-core/
-sphinx>=4.3.0
-furo>=2023.3.27
-docutils<0.17
-m2r2
-myst-parser
-myst-nb
-sphinx-autobuild
-sphinx_rtd_theme
-pydantic<2.0.0
-autodoc_pydantic
-sphinx-reredirects>=0.1.2
-sphinx-automodapi==0.16.0
-sphinxcontrib-gtagjs==0.2.1
+appnope==0.1.4
+asttokens==2.4.1
+attrs==23.2.0
+Babel==2.14.0
+beautifulsoup4==4.12.3
+bleach==6.1.0
+certifi==2024.2.2
+charset-normalizer==3.3.2
+click==8.1.7
+colorama==0.4.6
+comm==0.2.2
+debugpy==1.8.1
+decorator==5.1.1
+defusedxml==0.7.1
+executing==2.0.1
+fastjsonschema==2.19.1
+ghp-import==2.1.0
+griffe==0.42.0
+idna==3.6
+ipykernel==6.29.3
+ipython==8.22.2
+jedi==0.19.1
+Jinja2==3.1.3
+jsonschema==4.21.1
+jsonschema-specifications==2023.12.1
+jupyter_client==8.6.1
+jupyter_core==5.7.2
+jupyterlab_pygments==0.3.0
+jupytext==1.16.1
+Markdown==3.5.2
+markdown-it-py==3.0.0
+MarkupSafe==2.1.5
+matplotlib-inline==0.1.6
+mdit-py-plugins==0.4.0
+mdurl==0.1.2
+mergedeep==1.3.4
+mistune==3.0.2
+mkdocs==1.5.3
+mkdocs-autorefs==1.0.1
+mkdocs-include-dir-to-nav==1.2.0
+mkdocs-jupyter==0.24.6
+mkdocs-material==9.5.13
+mkdocs-material-extensions==1.3.1
+mkdocs-redirects==1.2.1
+mkdocstrings==0.24.1
+mkdocstrings-python==1.9.0
+nbclient==0.10.0
+nbconvert==7.16.2
+nbformat==5.10.2
+nest-asyncio==1.6.0
+packaging==24.0
+paginate==0.5.6
+pandocfilters==1.5.1
+parso==0.8.3
+pathspec==0.12.1
+pexpect==4.9.0
+platformdirs==4.2.0
+prompt-toolkit==3.0.43
+psutil==5.9.8
+ptyprocess==0.7.0
+pure-eval==0.2.2
+Pygments==2.17.2
+pymdown-extensions==10.7.1
+python-dateutil==2.9.0.post0
+PyYAML==6.0.1
+pyyaml_env_tag==0.1
+pyzmq==25.1.2
+referencing==0.33.0
+regex==2023.12.25
+requests==2.31.0
+rpds-py==0.18.0
+six==1.16.0
+soupsieve==2.5
+stack-data==0.6.3
+tinycss2==1.2.1
+toml==0.10.2
+tornado==6.4
+traitlets==5.14.2
+urllib3==2.2.1
+watchdog==4.0.0
+wcwidth==0.2.13
+webencodings==0.5.1
diff --git a/docs/understanding/putting_it_all_together/apps.md b/docs/understanding/putting_it_all_together/apps.md
deleted file mode 100644
index 60001c4915b7b96d4abf001e73fe210cc6338908..0000000000000000000000000000000000000000
--- a/docs/understanding/putting_it_all_together/apps.md
+++ /dev/null
@@ -1,18 +0,0 @@
-# Full-Stack Web Application
-
-LlamaIndex can be integrated into a downstream full-stack web application. It can be used in a backend server (such as Flask), packaged into a Docker container, and/or directly used in a framework such as Streamlit.
-
-We provide tutorials and resources to help you get started in this area:
-
-- [Fullstack Application Guide](/understanding/putting_it_all_together/apps/fullstack_app_guide.md) shows you how to build an app with LlamaIndex as an API and a TypeScript+React frontend
-- [Fullstack Application with Delphic](/understanding/putting_it_all_together/apps/fullstack_with_delphic.md) walks you through using LlamaIndex with a production-ready web app starter template called Delphic.
-- The [LlamaIndex Starter Pack](https://github.com/logan-markewich/llama_index_starter_pack) provides very basic flask, streamlit, and docker examples for LlamaIndex.
-
-```{toctree}
----
-maxdepth: 1
-hidden: true
----
-/understanding/putting_it_all_together/apps/fullstack_app_guide.md
-/understanding/putting_it_all_together/apps/fullstack_with_delphic.md
-```
diff --git a/docs/understanding/understanding.md b/docs/understanding/understanding.md
deleted file mode 100644
index 0f7126741fcf1e302097ef1caed3c19a5c539f0d..0000000000000000000000000000000000000000
--- a/docs/understanding/understanding.md
+++ /dev/null
@@ -1,31 +0,0 @@
-# Building an LLM application
-
-Welcome to the beginning of Understanding LlamaIndex. This is a series of short, bite-sized tutorials on every stage of building an LLM application to get you acquainted with how to use LlamaIndex before diving into more advanced and subtle strategies. If you're an experienced programmer new to LlamaIndex, this is the place to start.
-
-## Key steps in building an LLM application
-
-```{tip}
-If you've already read our [high-level concepts](/getting_started/concepts.md) page you'll recognize several of these steps.
-```
-
-There are a series of key steps involved in building any LLM-powered application, whether it's answering questions about your data, creating a chatbot, or an autonomous agent. Throughout our documentation, you'll notice sections are arranged roughly in the order you'll perform these steps while building your app. You'll learn about:
-
-- **[Using LLMs](/understanding/using_llms/using_llms.md)**: whether it's OpenAI or any number of hosted LLMs or a locally-run model of your own, LLMs are used at every step of the way, from indexing and storing to querying and parsing your data. LlamaIndex comes with a huge number of reliable, tested prompts and we'll also show you how to customize your own.
-
-- **[Loading](/understanding/loading/loading.md)**: getting your data from wherever it lives, whether that's unstructured text, PDFs, databases, or APIs to other applications. LlamaIndex has hundreds of connectors to every data source over at [LlamaHub](https://llamahub.ai/).
-
-- **[Indexing](/understanding/indexing/indexing.md)**: once you've got your data there are an infinite number of ways to structure access to that data to ensure your applications is always working with the most relevant data. LlamaIndex has a huge number of these strategies built-in and can help you select the best ones.
-
-- **[Storing](/understanding/storing/storing.md)**: you will probably find it more efficient to store your data in indexed form, or pre-processed summaries provided by an LLM, often in a specialized database known as a `Vector Store` (see below). You can also store your indexes, metadata and more.
-
-- **[Querying](/understanding/querying/querying.md)**: every indexing strategy has a corresponding querying strategy and there are lots of ways to improve the relevance, speed and accuracy of what you retrieve and what the LLM does with it before returning it to you, including turning it into structured responses such as an API.
-
-- **[Putting it all together](/understanding/putting_it_all_together/putting_it_all_together.md)**: whether you are building question & answering, chatbots, an API, or an autonomous agent, we show you how to get your application into production.
-
-- **[Tracing and debugging](/understanding/tracing_and_debugging/tracing_and_debugging.md)**: also called **observability**, it's especially important with LLM applications to be able to look into the inner workings of what's going on to help you debug problems and spot places to improve.
-
-- **[Evaluating](/understanding/evaluating/evaluating.md)**: every strategy has pros and cons and a key part of building, shipping and evolving your application is evaluating whether your change has improved your application in terms of accuracy, performance, clarity, cost and more. Reliably evaluating your changes is a crucial part of LLM application development.
-
-## Let's get started!
-
-Ready to dive in? Head to [using LLMs](/understanding/using_llms/using_llms.md).
diff --git a/llama-index-core/llama_index/core/base/llms/base.py b/llama-index-core/llama_index/core/base/llms/base.py
index 137ad16116b6886afbd78e4f8692cff8d30026f8..fa7c816980b21da10f146553ddfadbb9e1c2956d 100644
--- a/llama-index-core/llama_index/core/base/llms/base.py
+++ b/llama-index-core/llama_index/core/base/llms/base.py
@@ -23,7 +23,7 @@ from llama_index.core.schema import BaseComponent
 
 
 class BaseLLM(ChainableMixin, BaseComponent):
-    """LLM interface."""
+    """BaseLLM interface."""
 
     callback_manager: CallbackManager = Field(
         default_factory=CallbackManager, exclude=True
@@ -41,51 +41,215 @@ class BaseLLM(ChainableMixin, BaseComponent):
     @property
     @abstractmethod
     def metadata(self) -> LLMMetadata:
-        """LLM metadata."""
+        """LLM metadata.
+
+        Returns:
+            LLMMetadata: LLM metadata containing various information about the LLM.
+        """
 
     @abstractmethod
     def chat(self, messages: Sequence[ChatMessage], **kwargs: Any) -> ChatResponse:
-        """Chat endpoint for LLM."""
+        """Chat endpoint for LLM.
+
+        Args:
+            messages (Sequence[ChatMessage]):
+                Sequence of chat messages.
+            kwargs (Any):
+                Additional keyword arguments to pass to the LLM.
+
+        Returns:
+            ChatResponse: Chat response from the LLM.
+
+        Examples:
+            ```python
+            from llama_index.core.llms import ChatMessage
+
+            response = llm.chat([ChatMessage(role="user", content="Hello")])
+            print(response.content)
+            ```
+        """
 
     @abstractmethod
     def complete(
         self, prompt: str, formatted: bool = False, **kwargs: Any
     ) -> CompletionResponse:
-        """Completion endpoint for LLM."""
+        """Completion endpoint for LLM.
+
+        If the LLM is a chat model, the prompt is transformed into a single `user` message.
+
+        Args:
+            prompt (str):
+                Prompt to send to the LLM.
+            formatted (bool, optional):
+                Whether the prompt is already formatted for the LLM, by default False.
+            kwargs (Any):
+                Additional keyword arguments to pass to the LLM.
+
+        Returns:
+            CompletionResponse: Completion response from the LLM.
+
+        Examples:
+            ```python
+            response = llm.complete("your prompt")
+            print(response.text)
+            ```
+        """
 
     @abstractmethod
     def stream_chat(
         self, messages: Sequence[ChatMessage], **kwargs: Any
     ) -> ChatResponseGen:
-        """Streaming chat endpoint for LLM."""
+        """Streaming chat endpoint for LLM.
+
+        Args:
+            messages (Sequence[ChatMessage]):
+                Sequence of chat messages.
+            kwargs (Any):
+                Additional keyword arguments to pass to the LLM.
+
+        Yields:
+            ChatResponse:
+                A generator of ChatResponse objects, each containing a new token of the response.
+
+        Examples:
+            ```python
+            from llama_index.core.llms import ChatMessage
+
+            gen = llm.stream_chat([ChatMessage(role="user", content="Hello")])
+            for response in gen:
+                print(response.delta, end="", flush=True)
+            ```
+        """
 
     @abstractmethod
     def stream_complete(
         self, prompt: str, formatted: bool = False, **kwargs: Any
     ) -> CompletionResponseGen:
-        """Streaming completion endpoint for LLM."""
+        """Streaming completion endpoint for LLM.
+
+        If the LLM is a chat model, the prompt is transformed into a single `user` message.
+
+        Args:
+            prompt (str):
+                Prompt to send to the LLM.
+            formatted (bool, optional):
+                Whether the prompt is already formatted for the LLM, by default False.
+            kwargs (Any):
+                Additional keyword arguments to pass to the LLM.
+
+        Yields:
+            CompletionResponse:
+                A generator of CompletionResponse objects, each containing a new token of the response.
+
+        Examples:
+            ```python
+            gen = llm.stream_complete("your prompt")
+            for response in gen:
+                print(response.text, end="", flush=True)
+            ```
+        """
 
     # ===== Async Endpoints =====
     @abstractmethod
     async def achat(
         self, messages: Sequence[ChatMessage], **kwargs: Any
     ) -> ChatResponse:
-        """Async chat endpoint for LLM."""
+        """Async chat endpoint for LLM.
+
+        Args:
+            messages (Sequence[ChatMessage]):
+                Sequence of chat messages.
+            kwargs (Any):
+                Additional keyword arguments to pass to the LLM.
+
+        Returns:
+            ChatResponse: Chat response from the LLM.
+
+        Examples:
+            ```python
+            from llama_index.core.llms import ChatMessage
+
+            response = await llm.achat([ChatMessage(role="user", content="Hello")])
+            print(response.content)
+            ```
+        """
 
     @abstractmethod
     async def acomplete(
         self, prompt: str, formatted: bool = False, **kwargs: Any
     ) -> CompletionResponse:
-        """Async completion endpoint for LLM."""
+        """Async completion endpoint for LLM.
+
+        If the LLM is a chat model, the prompt is transformed into a single `user` message.
+
+        Args:
+            prompt (str):
+                Prompt to send to the LLM.
+            formatted (bool, optional):
+                Whether the prompt is already formatted for the LLM, by default False.
+            kwargs (Any):
+                Additional keyword arguments to pass to the LLM.
+
+        Returns:
+            CompletionResponse: Completion response from the LLM.
+
+        Examples:
+            ```python
+            response = await llm.acomplete("your prompt")
+            print(response.text)
+            ```
+        """
 
     @abstractmethod
     async def astream_chat(
         self, messages: Sequence[ChatMessage], **kwargs: Any
     ) -> ChatResponseAsyncGen:
-        """Async streaming chat endpoint for LLM."""
+        """Async streaming chat endpoint for LLM.
+
+        Args:
+            messages (Sequence[ChatMessage]):
+                Sequence of chat messages.
+            kwargs (Any):
+                Additional keyword arguments to pass to the LLM.
+
+        Yields:
+            ChatResponse:
+                An async generator of ChatResponse objects, each containing a new token of the response.
+
+        Examples:
+            ```python
+            from llama_index.core.llms import ChatMessage
+
+            gen = await llm.astream_chat([ChatMessage(role="user", content="Hello")])
+            async for response in gen:
+                print(response.delta, end="", flush=True)
+            ```
+        """
 
     @abstractmethod
     async def astream_complete(
         self, prompt: str, formatted: bool = False, **kwargs: Any
     ) -> CompletionResponseAsyncGen:
-        """Async streaming completion endpoint for LLM."""
+        """Async streaming completion endpoint for LLM.
+
+        If the LLM is a chat model, the prompt is transformed into a single `user` message.
+
+        Args:
+            prompt (str):
+                Prompt to send to the LLM.
+            formatted (bool, optional):
+                Whether the prompt is already formatted for the LLM, by default False.
+            kwargs (Any):
+                Additional keyword arguments to pass to the LLM.
+
+        Yields:
+            CompletionResponse:
+                An async generator of CompletionResponse objects, each containing a new token of the response.
+
+        Examples:
+            ```python
+            gen = await llm.astream_complete("your prompt")
+            async for response in gen:
+                print(response.text, end="", flush=True)
+            ```
+        """
diff --git a/llama-index-core/llama_index/core/ingestion/pipeline.py b/llama-index-core/llama_index/core/ingestion/pipeline.py
index b5848c66ff8698570ab0b85a80831d4a764ada48..874e1d4dd73f7ca0430ce5095e42747a32c1dd5a 100644
--- a/llama-index-core/llama_index/core/ingestion/pipeline.py
+++ b/llama-index-core/llama_index/core/ingestion/pipeline.py
@@ -192,7 +192,16 @@ def arun_transformations_wrapper(
 
 
 class DocstoreStrategy(str, Enum):
-    """Document de-duplication strategy."""
+    """Document de-duplication strategy.
+
+    Attributes:
+        UPSERTS:
+            ('upserts') Use upserts to handle duplicates.
+        DUPLICATES_ONLY:
+            ('duplicates_only') Only handle duplicates.
+        UPSERTS_AND_DELETE:
+            ('upserts_and_delete') Use upserts and delete to handle duplicates.
+    """
 
     UPSERTS = "upserts"
     DUPLICATES_ONLY = "duplicates_only"
@@ -200,7 +209,52 @@ class DocstoreStrategy(str, Enum):
 
 
 class IngestionPipeline(BaseModel):
-    """An ingestion pipeline that can be applied to data."""
+    """An ingestion pipeline that can be applied to data.
+
+    Args:
+        name (str, optional):
+            Unique name of the ingestion pipeline. Defaults to DEFAULT_PIPELINE_NAME.
+        project_name (str, optional):
+            Unique name of the project. Defaults to DEFAULT_PROJECT_NAME.
+        transformations (List[TransformComponent], optional):
+            Transformations to apply to the data. Defaults to None.
+        documents (Optional[Sequence[Document]], optional):
+            Documents to ingest. Defaults to None.
+        readers (Optional[List[ReaderConfig]], optional):
+            Reader to use to read the data. Defaults to None.
+        vector_store (Optional[BasePydanticVectorStore], optional):
+            Vector store to use to store the data. Defaults to None.
+        cache (Optional[IngestionCache], optional):
+            Cache to use to store the data. Defaults to None.
+        docstore (Optional[BaseDocumentStore], optional):
+            Document store to use for de-duping with a vector store. Defaults to None.
+        docstore_strategy (DocstoreStrategy, optional):
+            Document de-dup strategy. Defaults to DocstoreStrategy.UPSERTS.
+        disable_cache (bool, optional):
+            Disable the cache. Defaults to False.
+        base_url (str, optional):
+            Base URL for the LlamaCloud API. Defaults to DEFAULT_BASE_URL.
+        app_url (str, optional):
+            Base URL for the LlamaCloud app. Defaults to DEFAULT_APP_URL.
+        api_key (Optional[str], optional):
+            LlamaCloud API key. Defaults to None.
+
+    Examples:
+        ```python
+        from llama_index.core.ingestion import IngestionPipeline
+        from llama_index.core.node_parser import SentenceSplitter
+        from llama_index.embeddings.openai import OpenAIEmbedding
+
+        pipeline = IngestionPipeline(
+            transformations=[
+                SentenceSplitter(chunk_size=512, chunk_overlap=20),
+                OpenAIEmbedding(),
+            ],
+        )
+
+        nodes = pipeline.run(documents=documents)
+        ```
+    """
 
     name: str = Field(
         default=DEFAULT_PIPELINE_NAME,
@@ -296,89 +350,7 @@ class IngestionPipeline(BaseModel):
         vector_store: Optional[BasePydanticVectorStore] = None,
         disable_cache: bool = False,
     ) -> "IngestionPipeline":
-        base_url = base_url or os.environ.get("LLAMA_CLOUD_BASE_URL", DEFAULT_BASE_URL)
-        assert base_url is not None
-
-        api_key = api_key or os.environ.get("LLAMA_CLOUD_API_KEY", None)
-        app_url = app_url or os.environ.get("LLAMA_CLOUD_APP_URL", DEFAULT_APP_URL)
-
-        client = get_client(api_key=api_key, base_url=base_url)
-
-        projects: List[Project] = client.project.list_projects(
-            project_name=project_name
-        )
-        if len(projects) < 0:
-            raise ValueError(f"Project with name {project_name} not found")
-
-        project = projects[0]
-        assert project.id is not None, "Project ID should not be None"
-
-        pipelines: List[Pipeline] = client.pipeline.search_pipelines(
-            project_name=project_name, pipeline_name=name
-        )
-        if len(pipelines) < 0:
-            raise ValueError(f"Pipeline with name {name} not found")
-
-        pipeline = pipelines[0]
-
-        transformations: List[TransformComponent] = []
-        for configured_transformation in pipeline.configured_transformations:
-            component_dict = cast(dict, configured_transformation.component)
-            transformation_component_type = (
-                configured_transformation.configurable_transformation_type
-            )
-            transformation = deserialize_transformation_component(
-                component_dict, transformation_component_type
-            )
-            transformations.append(transformation)
-
-        documents = []
-        readers = []
-        for data_source in pipeline.data_sources:
-            component_dict = cast(dict, data_source.component)
-            source_component_type = data_source.source_type
-
-            if data_source.source_type == ConfigurableDataSourceNames.READER:
-                source_component = deserialize_source_component(
-                    component_dict, source_component_type
-                )
-                readers.append(source_component)
-            elif data_source.source_type == ConfigurableDataSourceNames.DOCUMENT:
-                source_component = deserialize_source_component(
-                    component_dict, source_component_type
-                )
-                if (
-                    isinstance(source_component, BaseNode)
-                    and source_component.get_content()
-                ):
-                    documents.append(source_component)
-
-        return cls(
-            name=name,
-            project_name=project_name,
-            transformations=transformations,
-            readers=readers,
-            documents=documents,
-            vector_store=vector_store,
-            base_url=base_url,
-            cache=cache,
-            disable_cache=disable_cache,
-            api_key=api_key,
-            app_url=app_url,
-        )
-
-    @classmethod
-    def from_pipeline_name(
-        cls,
-        name: str,
-        project_name: str = DEFAULT_PROJECT_NAME,
-        base_url: Optional[str] = None,
-        cache: Optional[IngestionCache] = None,
-        api_key: Optional[str] = None,
-        app_url: Optional[str] = None,
-        vector_store: Optional[BasePydanticVectorStore] = None,
-        disable_cache: bool = False,
-    ) -> "IngestionPipeline":
+        """Create an ingestion pipeline from a pipeline name."""
         base_url = base_url or os.environ.get("LLAMA_CLOUD_BASE_URL", DEFAULT_BASE_URL)
         assert base_url is not None
 
@@ -456,6 +428,7 @@ class IngestionPipeline(BaseModel):
         documents: Optional[List[Document]] = None,
         nodes: Optional[List[BaseNode]] = None,
     ) -> str:
+        """Register the pipeline with the LlamaCloud API."""
         client = get_client(api_key=self.api_key, base_url=self.base_url)
 
         input_nodes = self._prepare_inputs(documents, nodes)
@@ -674,6 +647,12 @@ class IngestionPipeline(BaseModel):
         **kwargs: Any,
     ) -> Sequence[BaseNode]:
         """
+        Run a series of transformations on a set of nodes.
+
+        If a vector store is provided, nodes with embeddings will be added to the vector store.
+
+        If a vector store + docstore are provided, the docstore will be used to de-duplicate documents.
+
         Args:
             show_progress (bool, optional): Shows execution progress bar(s). Defaults to False.
             documents (Optional[List[Document]], optional): Set of documents to be transformed. Defaults to None.
@@ -843,6 +822,26 @@ class IngestionPipeline(BaseModel):
         num_workers: Optional[int] = None,
         **kwargs: Any,
     ) -> Sequence[BaseNode]:
+        """
+        Run a series of transformations on a set of nodes.
+
+        If a vector store is provided, nodes with embeddings will be added to the vector store.
+
+        If a vector store + docstore are provided, the docstore will be used to de-duplicate documents.
+
+        Args:
+            show_progress (bool, optional): Shows execution progress bar(s). Defaults to False.
+            documents (Optional[List[Document]], optional): Set of documents to be transformed. Defaults to None.
+            nodes (Optional[List[BaseNode]], optional): Set of nodes to be transformed. Defaults to None.
+            cache_collection (Optional[str], optional): Cache for transformations. Defaults to None.
+            in_place (bool, optional): Whether transformations creates a new list for transformed nodes or modifies the
+                array passed to `run_transformations`. Defaults to True.
+            num_workers (Optional[int], optional): The number of parallel processes to use.
+                If set to None, then sequential compute is used. Defaults to None.
+
+        Returns:
+            Sequence[BaseNode]: The set of transformed Nodes/Documents
+        """
         input_nodes = self._prepare_inputs(documents, nodes)
 
         # check if we need to dedup
diff --git a/llama-index-core/llama_index/core/llms/llm.py b/llama-index-core/llama_index/core/llms/llm.py
index 134c7d28ad32b2a5b8c2ab100e3b054afd3396d5..e78f52b006ea9f5ab2c374924c34f72fa5f7304e 100644
--- a/llama-index-core/llama_index/core/llms/llm.py
+++ b/llama-index-core/llama_index/core/llms/llm.py
@@ -49,7 +49,6 @@ from llama_index.core.types import (
 )
 from llama_index.core.instrumentation.events.llm import (
     LLMPredictEndEvent,
-    LLMPredictStartEvent,
 )
 
 import llama_index.core.instrumentation as instrument
@@ -123,6 +122,22 @@ def default_completion_to_prompt(prompt: str) -> str:
 
 
 class LLM(BaseLLM):
+    """
+    The LLM class is the main class for interacting with language models.
+
+    Attributes:
+        system_prompt (Optional[str]):
+            System prompt for LLM calls.
+        messages_to_prompt (Callable):
+            Function to convert a list of messages to an LLM prompt.
+        completion_to_prompt (Callable):
+            Function to convert a completion to an LLM prompt.
+        output_parser (Optional[BaseOutputParser]):
+            Output parser to parse, validate, and correct errors programmatically.
+        pydantic_program_mode (PydanticProgramMode):
+            Pydantic program mode to use for structured prediction.
+    """
+
     system_prompt: Optional[str] = Field(
         default=None, description="System prompt for LLM calls."
     )
@@ -214,6 +229,34 @@ class LLM(BaseLLM):
         prompt: PromptTemplate,
         **prompt_args: Any,
     ) -> BaseModel:
+        r"""Structured predict.
+
+        Args:
+            output_cls (BaseModel):
+                Output class to use for structured prediction.
+            prompt (PromptTemplate):
+                Prompt template to use for structured prediction.
+            prompt_args (Any):
+                Additional arguments to format the prompt with.
+
+        Returns:
+            BaseModel: The structured prediction output.
+
+        Examples:
+            ```python
+            from pydantic.v1 import BaseModel
+
+            class Test(BaseModel):
+                \"\"\"My test class.\"\"\"
+                name: str
+
+            from llama_index.core.prompts import PromptTemplate
+
+            prompt = PromptTemplate("Please predict a Test with a random name related to {topic}.")
+            output = llm.structured_predict(Test, prompt, topic="cats")
+            print(output.name)
+            ```
+        """
         from llama_index.core.program.utils import get_program_for_llm
 
         program = get_program_for_llm(
@@ -231,6 +274,34 @@ class LLM(BaseLLM):
         prompt: PromptTemplate,
         **prompt_args: Any,
     ) -> BaseModel:
+        r"""Async Structured predict.
+
+        Args:
+            output_cls (BaseModel):
+                Output class to use for structured prediction.
+            prompt (PromptTemplate):
+                Prompt template to use for structured prediction.
+            prompt_args (Any):
+                Additional arguments to format the prompt with.
+
+        Returns:
+            BaseModel: The structured prediction output.
+
+        Examples:
+            ```python
+            from pydantic.v1 import BaseModel
+
+            class Test(BaseModel):
+                \"\"\"My test class.\"\"\"
+                name: str
+
+            from llama_index.core.prompts import PromptTemplate
+
+            prompt = PromptTemplate("Please predict a Test with a random name related to {topic}.")
+            output = await llm.astructured_predict(Test, prompt, topic="cats")
+            print(output.name)
+            ```
+        """
         from llama_index.core.program.utils import get_program_for_llm
 
         program = get_program_for_llm(
@@ -254,8 +325,26 @@ class LLM(BaseLLM):
         prompt: BasePromptTemplate,
         **prompt_args: Any,
     ) -> str:
-        """Predict."""
-        dispatcher.event(LLMPredictStartEvent())
+        """Predict for a given prompt.
+
+        Args:
+            prompt (BasePromptTemplate):
+                The prompt to use for prediction.
+            prompt_args (Any):
+                Additional arguments to format the prompt with.
+
+        Returns:
+            str: The prediction output.
+
+        Examples:
+            ```python
+            from llama_index.core.prompts import PromptTemplate
+
+            prompt = PromptTemplate("Please write a random name related to {topic}.")
+            output = llm.predict(prompt, topic="cats")
+            print(output)
+            ```
+        """
         self._log_template_data(prompt, **prompt_args)
 
         if self.metadata.is_chat_model:
@@ -275,7 +364,27 @@ class LLM(BaseLLM):
         prompt: BasePromptTemplate,
         **prompt_args: Any,
     ) -> TokenGen:
-        """Stream."""
+        """Stream predict for a given prompt.
+
+        Args:
+            prompt (BasePromptTemplate):
+                The prompt to use for prediction.
+            prompt_args (Any):
+                Additional arguments to format the prompt with.
+
+        Yields:
+            str: Each streamed token.
+
+        Examples:
+            ```python
+            from llama_index.core.prompts import PromptTemplate
+
+            prompt = PromptTemplate("Please write a random name related to {topic}.")
+            gen = llm.stream_predict(prompt, topic="cats")
+            for token in gen:
+                print(token, end="", flush=True)
+            ```
+        """
         self._log_template_data(prompt, **prompt_args)
 
         if self.metadata.is_chat_model:
@@ -298,8 +407,26 @@ class LLM(BaseLLM):
         prompt: BasePromptTemplate,
         **prompt_args: Any,
     ) -> str:
-        """Async predict."""
-        dispatcher.event(LLMPredictStartEvent())
+        """Async Predict for a given prompt.
+
+        Args:
+            prompt (BasePromptTemplate):
+                The prompt to use for prediction.
+            prompt_args (Any):
+                Additional arguments to format the prompt with.
+
+        Returns:
+            str: The prediction output.
+
+        Examples:
+            ```python
+            from llama_index.core.prompts import PromptTemplate
+
+            prompt = PromptTemplate("Please write a random name related to {topic}.")
+            output = await llm.apredict(prompt, topic="cats")
+            print(output)
+            ```
+        """
         self._log_template_data(prompt, **prompt_args)
 
         if self.metadata.is_chat_model:
@@ -319,7 +446,27 @@ class LLM(BaseLLM):
         prompt: BasePromptTemplate,
         **prompt_args: Any,
     ) -> TokenAsyncGen:
-        """Async stream."""
+        """Async stream predict for a given prompt.
+
+        Args:
+        prompt (BasePromptTemplate):
+            The prompt to use for prediction.
+        prompt_args (Any):
+            Additional arguments to format the prompt with.
+
+        Yields:
+            str: An async generator that yields strings of tokens.
+
+        Examples:
+            ```python
+            from llama_index.core.prompts import PromptTemplate
+
+            prompt = PromptTemplate("Please write a random name related to {topic}.")
+            gen = await llm.astream_predict(prompt, topic="cats")
+            async for token in gen:
+                print(token, end="", flush=True)
+            ```
+        """
         self._log_template_data(prompt, **prompt_args)
 
         if self.metadata.is_chat_model:
diff --git a/llama-index-integrations/llms/llama-index-llms-ai21/llama_index/llms/ai21/base.py b/llama-index-integrations/llms/llama-index-llms-ai21/llama_index/llms/ai21/base.py
index 4e290bb962870ddef7cbaa89cec23de1f89b6a30..9748497131f7b2d423cc18a6e0ff2893b9ee4459 100644
--- a/llama-index-integrations/llms/llama-index-llms-ai21/llama_index/llms/ai21/base.py
+++ b/llama-index-integrations/llms/llama-index-llms-ai21/llama_index/llms/ai21/base.py
@@ -23,7 +23,19 @@ import ai21
 
 
 class AI21(CustomLLM):
-    """AI21 Labs LLM."""
+    """AI21 Labs LLM.
+
+    Examples:
+        `pip install llama-index-llms-ai21`
+
+        ```python
+        from llama_index.llms.ai21 import AI21
+
+        llm = AI21(model="j2-mid", api_key=api_key)
+        resp = llm.complete("Paul Graham is ")
+        print(resp)
+        ```
+    """
 
     model: str = Field(description="The AI21 model to use.")
     maxTokens: int = Field(description="The maximum number of tokens to generate.")
diff --git a/llama-index-integrations/llms/llama-index-llms-anthropic/llama_index/llms/anthropic/base.py b/llama-index-integrations/llms/llama-index-llms-anthropic/llama_index/llms/anthropic/base.py
index 853ba3831faa2dc4c998d12b3ac16689e66401a0..4f0b7cc380884bd1786473e30b9e95d1c58e6bed 100644
--- a/llama-index-integrations/llms/llama-index-llms-anthropic/llama_index/llms/anthropic/base.py
+++ b/llama-index-integrations/llms/llama-index-llms-anthropic/llama_index/llms/anthropic/base.py
@@ -39,6 +39,21 @@ DEFAULT_ANTHROPIC_MAX_TOKENS = 512
 
 
 class Anthropic(LLM):
+    """Anthropic LLM.
+
+    Examples:
+        `pip install llama-index-llms-anthropic`
+
+        ```python
+        from llama_index.llms.anthropic import Anthropic
+
+        llm = Anthropic(model="claude-instant-1")
+        resp = llm.stream_complete("Paul Graham is ")
+        for r in resp:
+            print(r.delta, end="")
+        ```
+    """
+
     model: str = Field(
         default=DEFAULT_ANTHROPIC_MODEL, description="The anthropic model to use."
     )
diff --git a/llama-index-integrations/llms/llama-index-llms-anyscale/llama_index/llms/anyscale/base.py b/llama-index-integrations/llms/llama-index-llms-anyscale/llama_index/llms/anyscale/base.py
index d7f9849495e460509820dd64cc8b6a4d1c590633..7a2b9cf317850035b73afb39803b220b3553110a 100644
--- a/llama-index-integrations/llms/llama-index-llms-anyscale/llama_index/llms/anyscale/base.py
+++ b/llama-index-integrations/llms/llama-index-llms-anyscale/llama_index/llms/anyscale/base.py
@@ -15,6 +15,20 @@ DEFAULT_MODEL = "meta-llama/Llama-2-70b-chat-hf"
 
 
 class Anyscale(OpenAI):
+    """Anyscale LLM.
+
+    Examples:
+        `pip install llama-index-llms-anyscale`
+
+        ```python
+        from llama_index.embeddings.anyscale import Anyscale
+
+        llm = Anyscale(model="codellama/CodeLlama-34b-Instruct-hf")
+        resp = llm.complete("Show me the c++ code to send requests to HTTP Server")
+        print(resp)
+        ```
+    """
+
     def __init__(
         self,
         model: str = DEFAULT_MODEL,
diff --git a/llama-index-integrations/llms/llama-index-llms-azure-openai/llama_index/llms/azure_openai/base.py b/llama-index-integrations/llms/llama-index-llms-azure-openai/llama_index/llms/azure_openai/base.py
index 236c7af700ff75ab81e6fe3d1e224ff60c58af6d..e388c606bd70a11b14000859fbd83e0b6dcbc259 100644
--- a/llama-index-integrations/llms/llama-index-llms-azure-openai/llama_index/llms/azure_openai/base.py
+++ b/llama-index-integrations/llms/llama-index-llms-azure-openai/llama_index/llms/azure_openai/base.py
@@ -29,7 +29,7 @@ class AzureOpenAI(OpenAI):
         for your deployment when you deployed a model.
 
     You must have the following environment variables set:
-    - `OPENAI_API_VERSION`: set this to `2023-05-15`
+    - `OPENAI_API_VERSION`: set this to `2023-07-01-preview` or newer.
         This may change in the future.
     - `AZURE_OPENAI_ENDPOINT`: your endpoint should look like the following
         https://YOUR_RESOURCE_NAME.openai.azure.com/
@@ -37,6 +37,25 @@ class AzureOpenAI(OpenAI):
 
     More information can be found here:
         https://learn.microsoft.com/en-us/azure/cognitive-services/openai/quickstart?tabs=command-line&pivots=programming-language-python
+
+    Examples:
+        `pip install llama-index-llms-azure-openai`
+
+        ```python
+        from llama_index.llms.azure_openai import AzureOpenAI
+
+        aoai_api_key = "YOUR_AZURE_OPENAI_API_KEY"
+        aoai_endpoint = "YOUR_AZURE_OPENAI_ENDPOINT"
+        aoai_api_version = "2023-07-01-preview"
+
+        llm = AzureOpenAI(
+            model="YOUR_AZURE_OPENAI_COMPLETION_MODEL_NAME",
+            deployment_name="YOUR_AZURE_OPENAI_COMPLETION_DEPLOYMENT_NAME",
+            api_key=aoai_api_key,
+            azure_endpoint=aoai_endpoint,
+            api_version=aoai_api_version,
+        )
+        ```
     """
 
     engine: str = Field(description="The name of the deployed azure engine.")
diff --git a/llama-index-integrations/llms/llama-index-llms-bedrock/llama_index/llms/bedrock/base.py b/llama-index-integrations/llms/llama-index-llms-bedrock/llama_index/llms/bedrock/base.py
index e102cc69849023af1e4bc5795a7038f723747ac9..870fad45f37ffc16abdac12c88af4f5136284a6e 100644
--- a/llama-index-integrations/llms/llama-index-llms-bedrock/llama_index/llms/bedrock/base.py
+++ b/llama-index-integrations/llms/llama-index-llms-bedrock/llama_index/llms/bedrock/base.py
@@ -38,6 +38,27 @@ from llama_index.llms.bedrock.utils import (
 
 
 class Bedrock(LLM):
+    """Bedrock LLM.
+
+    Examples:
+        `pip install llama-index-llms-bedrock`
+
+        ```python
+        from llama_index.llms.bedrock import Bedrock
+
+        llm = Bedrock(
+            model="amazon.titan-text-express-v1",
+            aws_access_key_id="AWS Access Key ID to use",
+            aws_secret_access_key="AWS Secret Access Key to use",
+            aws_session_token="AWS Session Token to use",
+            aws_region_name="AWS Region to use, eg. us-east-1",
+        )
+
+        resp = llm.complete("Paul Graham is ")
+        print(resp)
+        ```
+    """
+
     model: str = Field(description="The modelId of the Bedrock model to use.")
     temperature: float = Field(description="The temperature to use for sampling.")
     max_tokens: int = Field(description="The maximum number of tokens to generate.")
diff --git a/llama-index-integrations/llms/llama-index-llms-clarifai/llama_index/llms/clarifai/base.py b/llama-index-integrations/llms/llama-index-llms-clarifai/llama_index/llms/clarifai/base.py
index 237bd1586e183991ea123fdd487719e50b71d8d6..003e40be8c74ec069692bed0ad9f6258d61e01bb 100644
--- a/llama-index-integrations/llms/llama-index-llms-clarifai/llama_index/llms/clarifai/base.py
+++ b/llama-index-integrations/llms/llama-index-llms-clarifai/llama_index/llms/clarifai/base.py
@@ -26,6 +26,27 @@ EXAMPLE_URL = "https://clarifai.com/anthropic/completion/models/claude-v2"
 
 
 class Clarifai(LLM):
+    """Clarifai LLM.
+
+    Examples:
+        `pip install llama-index-llms-clarifai`
+
+        ```python
+        from llama_index.llms.clarifai import Clarifai
+
+        llm = Clarifai(
+            user_id="clarifai",
+            app_id="ml",
+            model_name="llama2-7b-alternative-4k",
+            model_url=(
+                "https://clarifai.com/clarifai/ml/models/llama2-7b-alternative-4k"
+        )
+
+        response = llm.complete("Hello World!")
+        print(response)
+        ```
+    """
+
     model_url: Optional[str] = Field(
         description=f"Full URL of the model. e.g. `{EXAMPLE_URL}`"
     )
diff --git a/llama-index-integrations/llms/llama-index-llms-cohere/llama_index/llms/cohere/base.py b/llama-index-integrations/llms/llama-index-llms-cohere/llama_index/llms/cohere/base.py
index 5a087b4fecbbc384239d8434f3907a8a44e45661..84e4e11598b7283a3c003b843b279efc88770454 100644
--- a/llama-index-integrations/llms/llama-index-llms-cohere/llama_index/llms/cohere/base.py
+++ b/llama-index-integrations/llms/llama-index-llms-cohere/llama_index/llms/cohere/base.py
@@ -32,6 +32,20 @@ import cohere
 
 
 class Cohere(LLM):
+    """Cohere LLM.
+
+    Examples:
+        `pip install llama-index-llms-cohere`
+
+        ```python
+        from llama_index.llms.cohere import Cohere
+
+        llm = Cohere(model="command", api_key=api_key)
+        resp = llm.complete("Paul Graham is ")
+        print(resp)
+        ```
+    """
+
     model: str = Field(description="The cohere model to use.")
     temperature: float = Field(description="The temperature to use for sampling.")
     max_retries: int = Field(
diff --git a/llama-index-integrations/llms/llama-index-llms-dashscope/llama_index/llms/dashscope/base.py b/llama-index-integrations/llms/llama-index-llms-dashscope/llama_index/llms/dashscope/base.py
index 5a2b3c63af675efbcb8832dda6bb27cabf637d3f..137f702a46c575239f7f8ce250c01c868d6b04dd 100644
--- a/llama-index-integrations/llms/llama-index-llms-dashscope/llama_index/llms/dashscope/base.py
+++ b/llama-index-integrations/llms/llama-index-llms-dashscope/llama_index/llms/dashscope/base.py
@@ -86,7 +86,19 @@ def call_with_messages(
 
 
 class DashScope(CustomLLM):
-    """DashScope LLM."""
+    """DashScope LLM.
+
+    Examples:
+        `pip install llama-index-llms-dashscope`
+
+        ```python
+        from llama_index.llms.dashscope import DashScope, DashScopeGenerationModels
+
+        dashscope_llm = DashScope(model_name=DashScopeGenerationModels.QWEN_MAX)
+        response = llm.complete("What is the meaning of life?")
+        print(response.text)
+        ```
+    """
 
     model_name: str = Field(
         default=DashScopeGenerationModels.QWEN_MAX,
diff --git a/llama-index-integrations/llms/llama-index-llms-everlyai/llama_index/llms/everlyai/base.py b/llama-index-integrations/llms/llama-index-llms-everlyai/llama_index/llms/everlyai/base.py
index fb0d81bdb13d9d67d87c6fb00f7eb51065e8c877..4eb5638cbbb1f9c9fab0fab2750f6c2ef43094df 100644
--- a/llama-index-integrations/llms/llama-index-llms-everlyai/llama_index/llms/everlyai/base.py
+++ b/llama-index-integrations/llms/llama-index-llms-everlyai/llama_index/llms/everlyai/base.py
@@ -13,6 +13,20 @@ DEFAULT_MODEL = "meta-llama/Llama-2-7b-chat-hf"
 
 
 class EverlyAI(OpenAI):
+    """EverlyAI LLM.
+
+    Examples:
+        `pip install llama-index-llms-everlyai`
+
+        ```python
+        from llama_index.llms.everlyai import EverlyAI
+
+        llm = EverlyAI(api_key="your-api-key")
+        response = llm.complete("Hello World!")
+        print(response)
+        ```
+    """
+
     def __init__(
         self,
         model: str = DEFAULT_MODEL,
diff --git a/llama-index-integrations/llms/llama-index-llms-fireworks/llama_index/llms/fireworks/base.py b/llama-index-integrations/llms/llama-index-llms-fireworks/llama_index/llms/fireworks/base.py
index 210da103a3b4f845fdf9dbaa3f4aaf7729e88306..0dd8945e1977da5022c2ae37ef5d68cf156e9c3b 100644
--- a/llama-index-integrations/llms/llama-index-llms-fireworks/llama_index/llms/fireworks/base.py
+++ b/llama-index-integrations/llms/llama-index-llms-fireworks/llama_index/llms/fireworks/base.py
@@ -16,6 +16,26 @@ DEFAULT_MODEL = "accounts/fireworks/models/mixtral-8x7b-instruct"
 
 
 class Fireworks(OpenAI):
+    """Fireworks LLM.
+
+    Examples:
+        `pip install llama-index-llms-fireworks`
+
+        ```python
+        from llama_index.llms.fireworks import Fireworks
+
+        # Create an instance of the Fireworks class
+        llm = Fireworks(
+            model="accounts/fireworks/models/mixtral-8x7b-instruct",
+            api_key="YOUR_API_KEY"
+        )
+
+        # Call the complete method with a prompt
+        resp = llm.complete("Hello world!")
+        print(resp)
+        ```
+    """
+
     def __init__(
         self,
         model: str = DEFAULT_MODEL,
diff --git a/llama-index-integrations/llms/llama-index-llms-gemini/llama_index/llms/gemini/base.py b/llama-index-integrations/llms/llama-index-llms-gemini/llama_index/llms/gemini/base.py
index 5bfaa888fa215d796424060c3d256574dbfe103a..a10eb42493458b2cd1fadd0ad68f5fd996020154 100644
--- a/llama-index-integrations/llms/llama-index-llms-gemini/llama_index/llms/gemini/base.py
+++ b/llama-index-integrations/llms/llama-index-llms-gemini/llama_index/llms/gemini/base.py
@@ -38,7 +38,19 @@ GEMINI_MODELS = (
 
 
 class Gemini(CustomLLM):
-    """Gemini."""
+    """Gemini LLM.
+
+    Examples:
+        `pip install llama-index-llms-gemini`
+
+        ```python
+        from llama_index.llms.gemini import Gemini
+
+        llm = Gemini(model_name="models/gemini-ultra", api_key="YOUR_API_KEY")
+        resp = llm.complete("Write a poem about a magic backpack")
+        print(resp)
+        ```
+    """
 
     model_name: str = Field(
         default=GEMINI_MODELS[0], description="The Gemini model to use."
diff --git a/llama-index-integrations/llms/llama-index-llms-gradient/llama_index/llms/gradient/base.py b/llama-index-integrations/llms/llama-index-llms-gradient/llama_index/llms/gradient/base.py
index 3735547d00c40f0b9e5bbc04ef30e8c547a46567..3a3761b059a18aab63017e3437f5600bc80bb076 100644
--- a/llama-index-integrations/llms/llama-index-llms-gradient/llama_index/llms/gradient/base.py
+++ b/llama-index-integrations/llms/llama-index-llms-gradient/llama_index/llms/gradient/base.py
@@ -127,6 +127,27 @@ class _BaseGradientLLM(CustomLLM):
 
 
 class GradientBaseModelLLM(_BaseGradientLLM):
+    """Gradient Base Model LLM.
+
+    Examples:
+        `pip install llama-index-llms-gradient`
+
+        ```python
+        import os
+        from llama_index.llms.gradient import GradientBaseModelLLM
+
+        # Set up Gradient access token and workspace ID
+        os.environ["GRADIENT_ACCESS_TOKEN"] = "{GRADIENT_ACCESS_TOKEN}"
+        os.environ["GRADIENT_WORKSPACE_ID"] = "{GRADIENT_WORKSPACE_ID}"
+
+        # Create an instance of GradientBaseModelLLM
+        llm = GradientBaseModelLLM(
+            base_model_slug="llama2-7b-chat",
+            max_tokens=400,
+        )
+        ```
+    """
+
     base_model_slug: str = Field(
         description="The slug of the base model to use.",
     )
@@ -158,6 +179,29 @@ class GradientBaseModelLLM(_BaseGradientLLM):
 
 
 class GradientModelAdapterLLM(_BaseGradientLLM):
+    """Gradient Model Adapter LLM.
+
+    Examples:
+        `pip install llama-index-llms-gradient`
+
+        ```python
+        import os
+
+        os.environ["GRADIENT_ACCESS_TOKEN"] = "{GRADIENT_ACCESS_TOKEN}"
+        os.environ["GRADIENT_WORKSPACE_ID"] = "{GRADIENT_WORKSPACE_ID}"
+
+        from llama_index.llms.gradient import GradientModelAdapterLLM
+
+        llm = GradientModelAdapterLLM(
+            model_adapter_id="{YOUR_MODEL_ADAPTER_ID}",
+            max_tokens=400,
+        )
+
+        result = llm.complete("Can you tell me about large language models?")
+        print(result)
+        ```
+    """
+
     model_adapter_id: str = Field(
         description="The id of the model adapter to use.",
     )
diff --git a/llama-index-integrations/llms/llama-index-llms-groq/llama_index/llms/groq/base.py b/llama-index-integrations/llms/llama-index-llms-groq/llama_index/llms/groq/base.py
index fed294f6c8b529af8af811958d10f059984a41de..98155671e5fe3299cff0272138c0e7fef4b1c48d 100644
--- a/llama-index-integrations/llms/llama-index-llms-groq/llama_index/llms/groq/base.py
+++ b/llama-index-integrations/llms/llama-index-llms-groq/llama_index/llms/groq/base.py
@@ -5,6 +5,24 @@ from llama_index.llms.openai_like import OpenAILike
 
 
 class Groq(OpenAILike):
+    """Groq LLM.
+
+    Examples:
+        `pip install llama-index-llms-groq`
+
+        ```python
+        from llama_index.llms.groq import Groq
+
+        # Set up the Groq class with the required model and API key
+        llm = Groq(model="mixtral-8x7b-32768", api_key="your_api_key")
+
+        # Call the complete method with a query
+        response = llm.complete("Explain the importance of low latency LLMs")
+
+        print(response)
+        ```
+    """
+
     def __init__(
         self,
         model: str,
diff --git a/llama-index-integrations/llms/llama-index-llms-huggingface/llama_index/llms/huggingface/base.py b/llama-index-integrations/llms/llama-index-llms-huggingface/llama_index/llms/huggingface/base.py
index e8724c6f13c4b84f87d9970a0da0b731ea3af3ff..11646b9205d3d81365c62be6ae099ec0d75fdee0 100644
--- a/llama-index-integrations/llms/llama-index-llms-huggingface/llama_index/llms/huggingface/base.py
+++ b/llama-index-integrations/llms/llama-index-llms-huggingface/llama_index/llms/huggingface/base.py
@@ -50,7 +50,65 @@ logger = logging.getLogger(__name__)
 
 
 class HuggingFaceLLM(CustomLLM):
-    """HuggingFace LLM."""
+    r"""HuggingFace LLM.
+
+    Examples:
+        `pip install llama-index-llms-huggingface`
+
+        ```python
+        from llama_index.llms.huggingface import HuggingFaceLLM
+
+        def messages_to_prompt(messages):
+            prompt = ""
+            for message in messages:
+                if message.role == 'system':
+                prompt += f"<|system|>\n{message.content}</s>\n"
+                elif message.role == 'user':
+                prompt += f"<|user|>\n{message.content}</s>\n"
+                elif message.role == 'assistant':
+                prompt += f"<|assistant|>\n{message.content}</s>\n"
+
+            # ensure we start with a system prompt, insert blank if needed
+            if not prompt.startswith("<|system|>\n"):
+                prompt = "<|system|>\n</s>\n" + prompt
+
+            # add final assistant prompt
+            prompt = prompt + "<|assistant|>\n"
+
+            return prompt
+
+        def completion_to_prompt(completion):
+            return f"<|system|>\n</s>\n<|user|>\n{completion}</s>\n<|assistant|>\n"
+
+        import torch
+        from transformers import BitsAndBytesConfig
+        from llama_index.core.prompts import PromptTemplate
+        from llama_index.llms.huggingface import HuggingFaceLLM
+
+        # quantize to save memory
+        quantization_config = BitsAndBytesConfig(
+            load_in_4bit=True,
+            bnb_4bit_compute_dtype=torch.float16,
+            bnb_4bit_quant_type="nf4",
+            bnb_4bit_use_double_quant=True,
+        )
+
+        llm = HuggingFaceLLM(
+            model_name="HuggingFaceH4/zephyr-7b-beta",
+            tokenizer_name="HuggingFaceH4/zephyr-7b-beta",
+            context_window=3900,
+            max_new_tokens=256,
+            model_kwargs={"quantization_config": quantization_config},
+            generate_kwargs={"temperature": 0.7, "top_k": 50, "top_p": 0.95},
+            messages_to_prompt=messages_to_prompt,
+            completion_to_prompt=completion_to_prompt,
+            device_map="auto",
+        )
+
+        response = llm.complete("What is the meaning of life?")
+        print(str(response))
+        ```
+    """
 
     model_name: str = Field(
         default=DEFAULT_HUGGINGFACE_MODEL,
diff --git a/llama-index-integrations/llms/llama-index-llms-konko/llama_index/llms/konko/base.py b/llama-index-integrations/llms/llama-index-llms-konko/llama_index/llms/konko/base.py
index 49fdd7f0fcac160a09a56b536bfb960429ee0008..bfd5d1525cc1677ea004cd9ad81d96bb890c7ca2 100644
--- a/llama-index-integrations/llms/llama-index-llms-konko/llama_index/llms/konko/base.py
+++ b/llama-index-integrations/llms/llama-index-llms-konko/llama_index/llms/konko/base.py
@@ -49,6 +49,33 @@ class ModelInfo:
 
 
 class Konko(LLM):
+    """Konko LLM.
+
+    Examples:
+        `pip install llama-index-llms-konko`
+
+        ```python
+        import os
+        from llama_index.llms.konko import Konko
+        from llama_index.core.llms import ChatMessage
+
+        # Set up the Konko LLM with the desired model
+        llm = Konko(model="meta-llama/llama-2-13b-chat")
+
+        # Set the Konko API key
+        os.environ["KONKO_API_KEY"] = "<your-api-key>"
+
+        # Create a ChatMessage object
+        message = ChatMessage(role="user", content="Explain Big Bang Theory briefly")
+
+        # Call the chat method with the ChatMessage object
+        response = llm.chat([message])
+
+        # Print the response
+        print(response)
+        ```
+    """
+
     model: str = Field(
         default=DEFAULT_KONKO_MODEL, description="The konko model to use."
     )
diff --git a/llama-index-integrations/llms/llama-index-llms-langchain/llama_index/llms/langchain/base.py b/llama-index-integrations/llms/llama-index-llms-langchain/llama_index/llms/langchain/base.py
index 4e463cf7f525b63f1650aecc873a103b90ab4f81..22e2a241ea14ff92cb472ab027cd91e54ecfdc34 100644
--- a/llama-index-integrations/llms/llama-index-llms-langchain/llama_index/llms/langchain/base.py
+++ b/llama-index-integrations/llms/llama-index-llms-langchain/llama_index/llms/langchain/base.py
@@ -25,7 +25,24 @@ from langchain.base_language import BaseLanguageModel
 
 
 class LangChainLLM(LLM):
-    """Adapter for a LangChain LLM."""
+    """Adapter for a LangChain LLM.
+
+    Examples:
+        `pip install llama-index-llms-langchain`
+
+        ```python
+        from langchain_openai import ChatOpenAI
+
+        from llama_index.llms.langchain import LangChainLLM
+
+        llm = LangChainLLM(llm=ChatOpenAI(...))
+
+        response_gen = llm.stream_complete("What is the meaning of life?")
+
+        for r in response_gen:
+            print(r.delta, end="")
+        ```
+    """
 
     _llm: Any = PrivateAttr()
 
diff --git a/llama-index-integrations/llms/llama-index-llms-litellm/llama_index/llms/litellm/base.py b/llama-index-integrations/llms/llama-index-llms-litellm/llama_index/llms/litellm/base.py
index 52e6fe74a4fc72fe660fb7a8a2599ead2d0a5c6f..bafab098cffe907988d66d0cabcdc77ab014c2bb 100644
--- a/llama-index-integrations/llms/llama-index-llms-litellm/llama_index/llms/litellm/base.py
+++ b/llama-index-integrations/llms/llama-index-llms-litellm/llama_index/llms/litellm/base.py
@@ -40,6 +40,34 @@ DEFAULT_LITELLM_MODEL = "gpt-3.5-turbo"
 
 
 class LiteLLM(LLM):
+    """LiteLLM.
+
+    Examples:
+        `pip install llama-index-llms-litellm`
+
+        ```python
+        import os
+        from llama_index.core.llms import ChatMessage
+        from llama_index.llms.litellm import LiteLLM
+
+        # Set environment variables
+        os.environ["OPENAI_API_KEY"] = "your-openai-api-key"
+        os.environ["COHERE_API_KEY"] = "your-cohere-api-key"
+
+        # Define a chat message
+        message = ChatMessage(role="user", content="Hey! how's it going?")
+
+        # Initialize LiteLLM with the desired model
+        llm = LiteLLM(model="gpt-3.5-turbo")
+
+        # Call the chat method with the message
+        chat_response = llm.chat([message])
+
+        # Print the response
+        print(chat_response)
+        ```
+    """
+
     model: str = Field(
         default=DEFAULT_LITELLM_MODEL,
         description=(
diff --git a/llama-index-integrations/llms/llama-index-llms-llama-api/llama_index/llms/llama_api/base.py b/llama-index-integrations/llms/llama-index-llms-llama-api/llama_index/llms/llama_api/base.py
index 84f6f79f405fcb85ecead2ecbb6261bb2b541629..0293ba7b5e2c38ee0f89f71a3f10ffc71661d3bc 100644
--- a/llama-index-integrations/llms/llama-index-llms-llama-api/llama_index/llms/llama_api/base.py
+++ b/llama-index-integrations/llms/llama-index-llms-llama-api/llama_index/llms/llama_api/base.py
@@ -23,6 +23,26 @@ from llamaapi import LlamaAPI as Client
 
 
 class LlamaAPI(CustomLLM):
+    """LlamaAPI LLM.
+
+    Examples:
+        `pip install llama-index-llms-llama-api`
+
+        ```python
+        from llama_index.llms.llama_api import LlamaAPI
+
+        # Obtain an API key from https://www.llama-api.com/
+        api_key = "your-api-key"
+
+        llm = LlamaAPI(api_key=api_key)
+
+        # Call the complete method with a prompt
+        resp = llm.complete("Paul Graham is ")
+
+        print(resp)
+        ```
+    """
+
     model: str = Field(description="The llama-api model to use.")
     temperature: float = Field(description="The temperature to use for sampling.")
     max_tokens: int = Field(description="The maximum number of tokens to generate.")
diff --git a/llama-index-integrations/llms/llama-index-llms-llama-cpp/llama_index/llms/llama_cpp/base.py b/llama-index-integrations/llms/llama-index-llms-llama-cpp/llama_index/llms/llama_cpp/base.py
index 809b19276d940a4ac1aac739013dc80d3d785389..f8322dbe5db932518b3e95032a40c63b05f22040 100644
--- a/llama-index-integrations/llms/llama-index-llms-llama-cpp/llama_index/llms/llama_cpp/base.py
+++ b/llama-index-integrations/llms/llama-index-llms-llama-cpp/llama_index/llms/llama_cpp/base.py
@@ -41,6 +41,59 @@ DEFAULT_LLAMA_CPP_MODEL_VERBOSITY = True
 
 
 class LlamaCPP(CustomLLM):
+    r"""LlamaCPP LLM.
+
+    Examples:
+        Install llama-cpp-python following instructions:
+        https://github.com/abetlen/llama-cpp-python
+
+        Then `pip install llama-index-llms-llama-cpp`
+
+        ```python
+        from llama_index.llms.llama_cpp import LlamaCPP
+
+        def messages_to_prompt(messages):
+            prompt = ""
+            for message in messages:
+                if message.role == 'system':
+                prompt += f"<|system|>\n{message.content}</s>\n"
+                elif message.role == 'user':
+                prompt += f"<|user|>\n{message.content}</s>\n"
+                elif message.role == 'assistant':
+                prompt += f"<|assistant|>\n{message.content}</s>\n"
+
+            # ensure we start with a system prompt, insert blank if needed
+            if not prompt.startswith("<|system|>\n"):
+                prompt = "<|system|>\n</s>\n" + prompt
+
+            # add final assistant prompt
+            prompt = prompt + "<|assistant|>\n"
+
+            return prompt
+
+        def completion_to_prompt(completion):
+            return f"<|system|>\n</s>\n<|user|>\n{completion}</s>\n<|assistant|>\n"
+
+        model_url = "https://huggingface.co/TheBloke/zephyr-7B-beta-GGUF/resolve/main/zephyr-7b-beta.Q4_0.gguf"
+
+        llm = LlamaCPP(
+            model_url=model_url,
+            model_path=None,
+            temperature=0.1,
+            max_new_tokens=256,
+            context_window=3900,
+            generate_kwargs={},
+            model_kwargs={"n_gpu_layers": -1},  # if compiled to use GPU
+            messages_to_prompt=messages_to_prompt,
+            completion_to_prompt=completion_to_prompt,
+            verbose=True,
+        )
+
+        response = llm.complete("Hello, how are you?")
+        print(str(response))
+        ```
+    """
+
     model_url: Optional[str] = Field(
         description="The URL llama-cpp model to download and use."
     )
diff --git a/llama-index-integrations/llms/llama-index-llms-localai/llama_index/llms/localai/base.py b/llama-index-integrations/llms/llama-index-llms-localai/llama_index/llms/localai/base.py
index ed2ed617b7c631ea004515a45cc258f4bfa60115..3db75877df3566d1a4a1e9af8f2e77168402822d 100644
--- a/llama-index-integrations/llms/llama-index-llms-localai/llama_index/llms/localai/base.py
+++ b/llama-index-integrations/llms/llama-index-llms-localai/llama_index/llms/localai/base.py
@@ -30,6 +30,21 @@ LOCALAI_DEFAULTS: Dict[str, Any] = MappingProxyType(  # type: ignore[assignment]
 
 
 class LocalAI(OpenAI):
+    """LocalAI LLM class.
+
+    Examples:
+        `pip install llama-index-llms-localai`
+
+        ```python
+        from llama_index.llms.localai import LocalAI
+
+        llm = LocalAI(api_base="http://localhost:8080/v1")
+
+        response = llm.complete("Hello!")
+        print(str(response))
+        ```
+    """
+
     context_window: int = Field(
         default=DEFAULT_CONTEXT_WINDOW,
         description="The maximum number of context tokens for the model.",
diff --git a/llama-index-integrations/llms/llama-index-llms-maritalk/llama_index/llms/maritalk/base.py b/llama-index-integrations/llms/llama-index-llms-maritalk/llama_index/llms/maritalk/base.py
index b544d9f5d267e1cee2e91855c82d54f16b0eaff2..b9be1d2fb4dc5378ad9ae0f210fb92973f70d018 100644
--- a/llama-index-integrations/llms/llama-index-llms-maritalk/llama_index/llms/maritalk/base.py
+++ b/llama-index-integrations/llms/llama-index-llms-maritalk/llama_index/llms/maritalk/base.py
@@ -21,6 +21,35 @@ import os
 
 
 class Maritalk(LLM):
+    """Maritalk LLM.
+
+    Examples:
+        `pip install llama-index-llms-maritalk`
+
+        ```python
+        from llama_index.core.llms import ChatMessage
+        from llama_index.llms.maritalk import Maritalk
+
+        # To customize your API key, do this
+        # otherwise it will lookup MARITALK_API_KEY from your env variable
+        # llm = Maritalk(api_key="<your_maritalk_api_key>")
+
+        llm = Maritalk()
+
+        # Call chat with a list of messages
+        messages = [
+            ChatMessage(
+                role="system",
+                content="You are an assistant specialized in suggesting pet names. Given the animal, you must suggest 4 names.",
+            ),
+            ChatMessage(role="user", content="I have a dog."),
+        ]
+
+        response = llm.chat(messages)
+        print(response)
+        ```
+    """
+
     api_key: Optional[str] = Field(default=None, description="Your MariTalk API key.")
     temperature: float = Field(
         default=0.7,
diff --git a/llama-index-integrations/llms/llama-index-llms-mistralai/llama_index/llms/mistralai/base.py b/llama-index-integrations/llms/llama-index-llms-mistralai/llama_index/llms/mistralai/base.py
index 78f9f58bc042d25d131762bc4493f8f92eff4f0c..784f574d73f4e491bdf6f6e4b39d43ec69be469b 100644
--- a/llama-index-integrations/llms/llama-index-llms-mistralai/llama_index/llms/mistralai/base.py
+++ b/llama-index-integrations/llms/llama-index-llms-mistralai/llama_index/llms/mistralai/base.py
@@ -41,6 +41,26 @@ DEFAULT_MISTRALAI_MAX_TOKENS = 512
 
 
 class MistralAI(LLM):
+    """MistralAI LLM.
+
+    Examples:
+        `pip install llama-index-llms-mistralai`
+
+        ```python
+        from llama_index.llms.mistralai import MistralAI
+
+        # To customize your API key, do this
+        # otherwise it will lookup MISTRAL_API_KEY from your env variable
+        # llm = MistralAI(api_key="<api_key>")
+
+        llm = MistralAI()
+
+        resp = llm.complete("Paul Graham is ")
+
+        print(resp)
+        ```
+    """
+
     model: str = Field(
         default=DEFAULT_MISTRALAI_MODEL, description="The mistralai model to use."
     )
diff --git a/llama-index-integrations/llms/llama-index-llms-monsterapi/llama_index/llms/monsterapi/base.py b/llama-index-integrations/llms/llama-index-llms-monsterapi/llama_index/llms/monsterapi/base.py
index 5a3324b228ecfd9ed7ff29f482c62abb2e270c56..bf6aabe192546e36cf55b278db0c7425714e583d 100644
--- a/llama-index-integrations/llms/llama-index-llms-monsterapi/llama_index/llms/monsterapi/base.py
+++ b/llama-index-integrations/llms/llama-index-llms-monsterapi/llama_index/llms/monsterapi/base.py
@@ -18,6 +18,44 @@ DEFAULT_MONSTER_TEMP = 0.75
 
 
 class MonsterLLM(CustomLLM):
+    """MonsterAPI LLM.
+
+    Monster Deploy enables you to host any vLLM supported large language model (LLM) like Tinyllama, Mixtral, Phi-2 etc as a rest API endpoint on MonsterAPI's cost optimised GPU cloud.
+
+    With MonsterAPI's integration in Llama index, you can use your deployed LLM API endpoints to create RAG system or RAG bot for use cases such as:
+    - Answering questions on your documents
+    - Improving the content of your documents
+    - Finding context of importance in your documents
+
+
+    Once deployment is launched use the base_url and api_auth_token once deployment is live and use them below.
+
+    Note: When using LLama index to access Monster Deploy LLMs, you need to create a prompt with required template and send compiled prompt as input.
+    See `LLama Index Prompt Template Usage example` section for more details.
+
+    see (https://developer.monsterapi.ai/docs/monster-deploy-beta) for more details
+
+    Once deployment is launched use the base_url and api_auth_token once deployment is live and use them below.
+
+    Note: When using LLama index to access Monster Deploy LLMs, you need to create a prompt with reqhired template and send compiled prompt as input. see section `LLama Index Prompt Template
+    Usage example` for more details.
+
+    Examples:
+        `pip install llama-index-llms-monsterapi`
+
+        ```python
+        llm = MonsterLLM(
+            model="deploy-llm",
+            base_url="https://ecc7deb6-26e0-419b-a7f2-0deb934af29a.monsterapi.ai",
+            monster_api_key="a0f8a6ba-c32f-4407-af0c-169f1915490c",
+            temperature=0.75,
+        )
+
+        response = llm.complete("What is the capital of France?")
+        print(str(response))
+        ```
+    """
+
     model: str = Field(description="The MonsterAPI model to use.")
     monster_api_key: Optional[str] = Field(description="The MonsterAPI key to use.")
     max_new_tokens: int = Field(
diff --git a/llama-index-integrations/llms/llama-index-llms-mymagic/llama_index/llms/mymagic/base.py b/llama-index-integrations/llms/llama-index-llms-mymagic/llama_index/llms/mymagic/base.py
index f1851c3f6cb9ae6253e715fbe83d1eb2aa52e309..8099b2f48cdee6f64bb71b292a63a1f6d522b5c7 100644
--- a/llama-index-integrations/llms/llama-index-llms-mymagic/llama_index/llms/mymagic/base.py
+++ b/llama-index-integrations/llms/llama-index-llms-mymagic/llama_index/llms/mymagic/base.py
@@ -17,6 +17,22 @@ from llama_index.core.bridge.pydantic import Field
 
 
 class MyMagicAI(LLM):
+    """MyMagicAI LLM.
+
+    Examples:
+        `pip install llama-index-llms-mymagic`
+
+        ```python
+        from llama_index.llms.mistralai import MistralAI
+
+        llm = MistralAI(model="mistral7b", api_key="<api_key>")
+
+        resp = llm.complete("Paul Graham is ")
+
+        print(resp)
+        ```
+    """
+
     base_url_template: str = "https://{model}.mymagic.ai"
     api_key: str = None
     model: str = Field(default="mistral7b", description="The MyMagicAI model to use.")
diff --git a/llama-index-integrations/llms/llama-index-llms-neutrino/llama_index/llms/neutrino/base.py b/llama-index-integrations/llms/llama-index-llms-neutrino/llama_index/llms/neutrino/base.py
index b1470353b648fc2f7bc92ada30a59b069574bc86..8ac0af9ae2c7e491433fbf4a3ea6d6274c57b469 100644
--- a/llama-index-integrations/llms/llama-index-llms-neutrino/llama_index/llms/neutrino/base.py
+++ b/llama-index-integrations/llms/llama-index-llms-neutrino/llama_index/llms/neutrino/base.py
@@ -15,6 +15,38 @@ MAX_CONTEXT_WINDOW = 200000
 
 
 class Neutrino(OpenAILike):
+    """Neutrino LLM.
+
+    Examples:
+        `pip install llama-index-llms-neutrino`
+
+        You can create an API key at: <a href="https://platform.neutrinoapp.com/">platform.neutrinoapp.com</a>
+
+        ```python
+        import os
+
+        os.environ["NEUTRINO_API_KEY"] = "<your-neutrino-api-key>"
+        ```
+
+        A router is a collection of LLMs that you can route queries to. You can create a router in the Neutrino <a href="https://platform.neutrinoapp.com/">dashboard</a> or use the default router,
+        which includes all supported models.
+
+        You can treat a router as a LLM.
+
+        ```python
+        from llama_index.llms.neutrino import Neutrino
+
+        llm = Neutrino(
+            # api_key="<your-neutrino-api-key>",
+            # router="<your-router-id>"  # (or 'default')
+        )
+
+        response = llm.complete("In short, a Neutrino is")
+        print(f"Optimal model: {response.raw['model']}")
+        print(response)
+        ```
+    """
+
     model: str = Field(
         description="The Neutrino router to use. See https://docs.neutrinoapp.com/router for details."
     )
diff --git a/llama-index-integrations/llms/llama-index-llms-nvidia-tensorrt/llama_index/llms/nvidia_tensorrt/base.py b/llama-index-integrations/llms/llama-index-llms-nvidia-tensorrt/llama_index/llms/nvidia_tensorrt/base.py
index 7114c4c04e229ac996620071feff5f53ccd320a8..5261a470d7537edf19594625e2cceff03d7c2671 100644
--- a/llama-index-integrations/llms/llama-index-llms-nvidia-tensorrt/llama_index/llms/nvidia_tensorrt/base.py
+++ b/llama-index-integrations/llms/llama-index-llms-nvidia-tensorrt/llama_index/llms/nvidia_tensorrt/base.py
@@ -35,6 +35,53 @@ PAD_TOKEN = 2
 
 
 class LocalTensorRTLLM(CustomLLM):
+    r"""Local TensorRT LLM.
+
+    [TensorRT-LLM](https://github.com/NVIDIA/TensorRT-LLM) provides users with an easy-to-use Python API to define Large Language Models (LLMs) and build TensorRT engines that contain state-of-the-art optimizations to perform inference
+    efficiently on NVIDIA GPUs.
+
+    Since TensorRT-LLM is a SDK for interacting with local models in process there are a few environment steps that must be followed to ensure that the TensorRT-LLM setup can be used.
+
+    1. Nvidia Cuda 12.2 or higher is currently required to run TensorRT-LLM
+    2. Install `tensorrt_llm` via pip with `pip3 install tensorrt_llm -U --extra-index-url https://pypi.nvidia.com`
+    3. For this example we will use Llama2. The Llama2 model files need to be created via scripts following the instructions
+    (https://github.com/NVIDIA/trt-llm-rag-windows/blob/release/1.0/README.md#building-trt-engine)
+        * The following files will be created from following the stop above
+        * `Llama_float16_tp1_rank0.engine`: The main output of the build script, containing the executable graph of operations with the model weights embedded.
+        * `config.json`: Includes detailed information about the model, like its general structure and precision, as well as information about which plug-ins were incorporated into the engine.
+        * `model.cache`: Caches some of the timing and optimization information from model compilation, making successive builds quicker.
+    4. `mkdir model`
+    5. Move all of the files mentioned above to the model directory.
+
+    Examples:
+        `pip install llama-index-llms-nvidia-tensorrt`
+
+        ```python
+        from llama_index.llms.nvidia_tensorrt import LocalTensorRTLLM
+
+
+        def completion_to_prompt(completion):
+            return f"<s> [INST] {completion} [/INST] "
+
+        def messages_to_prompt(messages):
+            content = ""
+            for message in messages:
+                content += str(message) + "\n"
+            return f"<s> [INST] {content} [/INST] "
+
+        llm = LocalTensorRTLLM(
+            model_path="./model",
+            engine_name="llama_float16_tp1_rank0.engine",
+            tokenizer_dir="meta-llama/Llama-2-13b-chat",
+            completion_to_prompt=completion_to_prompt,
+            messages_to_prompt=messages_to_prompt,
+        )
+
+        resp = llm.complete("Who is Paul Graham?")
+        print(str(resp))
+        ```
+    """
+
     model_path: Optional[str] = Field(description="The path to the trt engine.")
     temperature: float = Field(description="The temperature to use for sampling.")
     max_new_tokens: int = Field(description="The maximum number of tokens to generate.")
diff --git a/llama-index-integrations/llms/llama-index-llms-nvidia-triton/llama_index/llms/nvidia_triton/base.py b/llama-index-integrations/llms/llama-index-llms-nvidia-triton/llama_index/llms/nvidia_triton/base.py
index 430a4eab21dae346e49ad523a7e39635e3f0c4d6..c273d0bb9bad798ac24ae4b823458f34d578de96 100644
--- a/llama-index-integrations/llms/llama-index-llms-nvidia-triton/llama_index/llms/nvidia_triton/base.py
+++ b/llama-index-integrations/llms/llama-index-llms-nvidia-triton/llama_index/llms/nvidia_triton/base.py
@@ -41,6 +41,31 @@ DEFAULT_TRITON_LOAD_MODEL = True
 
 
 class NvidiaTriton(LLM):
+    """Nvidia Triton LLM.
+
+    Nvidia's Triton is an inference server that provides API access to hosted LLM models. This connector allows for llama_index to remotely interact with a Triton inference server over GRPC to
+    accelerate inference operations.
+
+    [Triton Inference Server Github](https://github.com/triton-inference-server/server)
+
+    Examples:
+        `pip install llama-index-llms-nvidia-triton`
+
+        ```python
+        from llama_index.llms.nvidia_triton import NvidiaTriton
+
+        # Ensure a Triton server instance is running and provide the correct URL for your Triton server instance
+        triton_url = "localhost:8001"
+
+        # Instantiate the NvidiaTriton class
+        triton_client = NvidiaTriton()
+
+        # Call the complete method with a prompt
+        resp = triton_client.complete("The tallest mountain in North America is ")
+        print(resp)
+        ```
+    """
+
     server_url: str = Field(
         default=DEFAULT_SERVER_URL,
         description="The URL of the Triton inference server to use.",
diff --git a/llama-index-integrations/llms/llama-index-llms-ollama/llama_index/llms/ollama/base.py b/llama-index-integrations/llms/llama-index-llms-ollama/llama_index/llms/ollama/base.py
index 78281eb5918fd8abdf9b9021efcdd4a11a48b026..60475c73a1dd9ce5da7ec174509ede9db2f8255d 100644
--- a/llama-index-integrations/llms/llama-index-llms-ollama/llama_index/llms/ollama/base.py
+++ b/llama-index-integrations/llms/llama-index-llms-ollama/llama_index/llms/ollama/base.py
@@ -27,6 +27,27 @@ def get_additional_kwargs(
 
 
 class Ollama(CustomLLM):
+    """Ollama LLM.
+
+    Visit https://ollama.com/ to download and install Ollama.
+
+    Run `ollama serve` to start a server.
+
+    Run `ollama pull <name>` to download a model to run.
+
+    Examples:
+        `pip install llama-index-llms-ollama`
+
+        ```python
+        from llama_index.llms.ollama import Ollama
+
+        llm = Ollama(model="llama2", request_timeout=60.0)
+
+        response = llm.complete("What is the capital of France?")
+        print(response)
+        ```
+    """
+
     base_url: str = Field(
         default="http://localhost:11434",
         description="Base url the model is hosted under.",
diff --git a/llama-index-integrations/llms/llama-index-llms-openai-like/llama_index/llms/openai_like/base.py b/llama-index-integrations/llms/llama-index-llms-openai-like/llama_index/llms/openai_like/base.py
index f5184a8753e01781634a8e042758ff82086181b8..6ac9cea165b8e8b4db07db6aeda9e76a5270c6b6 100644
--- a/llama-index-integrations/llms/llama-index-llms-openai-like/llama_index/llms/openai_like/base.py
+++ b/llama-index-integrations/llms/llama-index-llms-openai-like/llama_index/llms/openai_like/base.py
@@ -22,7 +22,8 @@ from transformers import AutoTokenizer
 
 
 class OpenAILike(OpenAI):
-    """
+    """OpenaAILike LLM.
+
     OpenAILike is a thin wrapper around the OpenAI model that makes it compatible with
     3rd party tools that provide an openai-compatible api.
 
@@ -33,6 +34,18 @@ class OpenAILike(OpenAI):
     variables or the api_key and api_base constructor arguments.
     OPENAI_API_KEY/api_key can normally be set to anything in this case,
     but will depend on the tool you're using.
+
+    Examples:
+        `pip install llama-index-llms-openai-like`
+
+        ```python
+        from llama_index.llms.openai_like import OpenAILike
+
+        llm = OpenAILike(model="my model" api_base="https://hostname.com/v1", api_key="fake")
+
+        response = llm.complete("Hello World!")
+        print(str(response))
+        ```
     """
 
     context_window: int = Field(
diff --git a/llama-index-integrations/llms/llama-index-llms-openai/llama_index/llms/openai/base.py b/llama-index-integrations/llms/llama-index-llms-openai/llama_index/llms/openai/base.py
index b62747c0f1070500042839b94350b2c816e36074..58bb23f1a6f2cc7bdca0331cda87732a26527388 100644
--- a/llama-index-integrations/llms/llama-index-llms-openai/llama_index/llms/openai/base.py
+++ b/llama-index-integrations/llms/llama-index-llms-openai/llama_index/llms/openai/base.py
@@ -85,6 +85,29 @@ class Tokenizer(Protocol):
 
 
 class OpenAI(LLM):
+    """OpenAI LLM.
+
+    Examples:
+        `pip install llama-index-llms-openai`
+
+        ```python
+        import os
+        import openai
+
+        os.environ["OPENAI_API_KEY"] = "sk-..."
+        openai.api_key = os.environ["OPENAI_API_KEY"]
+
+        from llama_index.llms.openai import OpenAI
+
+        llm = OpenAI(model="gpt-3.5-turbo")
+
+        stream = llm.stream("Hi, write a short story")
+
+        for r in stream:
+            print(r.delta, end="")
+        ```
+    """
+
     model: str = Field(
         default=DEFAULT_OPENAI_MODEL, description="The OpenAI model to use."
     )
diff --git a/llama-index-integrations/llms/llama-index-llms-openllm/llama_index/llms/openllm/base.py b/llama-index-integrations/llms/llama-index-llms-openllm/llama_index/llms/openllm/base.py
index b0e50390372bd5baf1fb1a23d780069e66bf76b8..1781326a676d0bc4012809d19d488b8348ecb40d 100644
--- a/llama-index-integrations/llms/llama-index-llms-openllm/llama_index/llms/openllm/base.py
+++ b/llama-index-integrations/llms/llama-index-llms-openllm/llama_index/llms/openllm/base.py
@@ -50,7 +50,25 @@ if TYPE_CHECKING:
 
 
 class OpenLLM(LLM):
-    """OpenLLM LLM."""
+    """OpenLLM LLM.
+
+    Examples:
+        `pip install llama-index-llms-openllm`
+
+        ```python
+        # If needed, set the OPENLLM_ENDPOINT environment variable to a remote server address
+        # os.environ["OPENLLM_ENDPOINT"] = "remote_server_address"
+
+        from llama_index.llms.openllm import OpenLLM
+
+        # Set up the OpenLLM instance
+        llm = OpenLLM("HuggingFaceH4/zephyr-7b-alpha")
+
+        # Example completion using OpenLLM
+        response = llm.complete("To infinity, and beyond")
+        print(str(response))
+        ```
+    """
 
     model_id: str = Field(
         description="Given Model ID from HuggingFace Hub. This can be either a pretrained ID or local path. This is synonymous to HuggingFace's '.from_pretrained' first argument"
diff --git a/llama-index-integrations/llms/llama-index-llms-openrouter/llama_index/llms/openrouter/base.py b/llama-index-integrations/llms/llama-index-llms-openrouter/llama_index/llms/openrouter/base.py
index 0b1e92829477780060c261a03e6510fa7892778f..8a369029eea3ffca6b8d528f633f66a9e7cda1c9 100644
--- a/llama-index-integrations/llms/llama-index-llms-openrouter/llama_index/llms/openrouter/base.py
+++ b/llama-index-integrations/llms/llama-index-llms-openrouter/llama_index/llms/openrouter/base.py
@@ -15,6 +15,32 @@ DEFAULT_MODEL = "gryphe/mythomax-l2-13b"
 
 
 class OpenRouter(OpenAILike):
+    """OpenRouter LLM.
+
+    To instantiate the `OpenRouter` class, you will need to provide an API key. You can set the API key either as an environment variable `OPENROUTER_API_KEY` or directly in the class
+    constructor. If setting it in the class constructor, it would look like this:
+
+    If you haven't signed up for an API key yet, you can do so on the OpenRouter website at (https://openrouter.ai). Once you have your API key, you can use the `OpenRouter` class to interact
+    with the LLM for tasks like chatting, streaming, and completing prompts.
+
+    Examples:
+        `pip install llama-index-llms-openrouter`
+
+        ```python
+        from llama_index.llms.openrouter import OpenRouter
+
+        llm = OpenRouter(
+            api_key="<your-api-key>",
+            max_tokens=256,
+            context_window=4096,
+            model="gryphe/mythomax-l2-13b",
+        )
+
+        response = llm.complete("Hello World!")
+        print(str(response))
+        ```
+    """
+
     model: str = Field(
         description="The OpenRouter model to use. See https://openrouter.ai/models for options."
     )
diff --git a/llama-index-integrations/llms/llama-index-llms-palm/llama_index/llms/palm/base.py b/llama-index-integrations/llms/llama-index-llms-palm/llama_index/llms/palm/base.py
index 3ecf44b6acd897f0b19e169124a3d3e8d25c7a16..4c9eafd81ce583358adfc333b179605716205930 100644
--- a/llama-index-integrations/llms/llama-index-llms-palm/llama_index/llms/palm/base.py
+++ b/llama-index-integrations/llms/llama-index-llms-palm/llama_index/llms/palm/base.py
@@ -1,4 +1,5 @@
 """Palm API."""
+
 import os
 from typing import Any, Callable, Optional, Sequence
 
@@ -20,7 +21,37 @@ DEFAULT_PALM_MODEL = "models/text-bison-001"
 
 
 class PaLM(CustomLLM):
-    """PaLM LLM."""
+    """PaLM LLM.
+
+    Examples:
+        `pip install llama-index-llms-palm`
+
+        ```python
+        import google.generativeai as palm
+
+        # API key for PaLM
+        palm_api_key = "YOUR_API_KEY_HERE"
+
+        # List all models that support text generation
+        models = [
+            m
+            for m in palm.list_models()
+            if "generateText" in m.supported_generation_methods
+        ]
+        model = models[0].name
+        print(model)
+
+        # Start using our PaLM LLM abstraction
+        from llama_index.llms.palm import PaLM
+
+        # Create an instance of the PaLM class with the API key
+        llm = PaLM(model_name=model, api_key=palm_api_key)
+
+        # Use the complete method to generate text based on a prompt
+        response = llm.complete("Your prompt text here.")
+        print(str(response))
+        ```
+    """
 
     model_name: str = Field(
         default=DEFAULT_PALM_MODEL, description="The PaLM model to use."
diff --git a/llama-index-integrations/llms/llama-index-llms-perplexity/llama_index/llms/perplexity/base.py b/llama-index-integrations/llms/llama-index-llms-perplexity/llama_index/llms/perplexity/base.py
index 5bab5031a782f7bb85c619879f4996174ca188d7..31d79209cb311fd2198d64417d7f4283fe5f1a57 100644
--- a/llama-index-integrations/llms/llama-index-llms-perplexity/llama_index/llms/perplexity/base.py
+++ b/llama-index-integrations/llms/llama-index-llms-perplexity/llama_index/llms/perplexity/base.py
@@ -21,6 +21,32 @@ from llama_index.core.types import BaseOutputParser, PydanticProgramMode
 
 
 class Perplexity(LLM):
+    """Perplexity LLM.
+
+    Examples:
+        `pip install llama-index-llms-perplexity`
+
+        ```python
+        from llama_index.llms.perplexity import Perplexity
+        from llama_index.core.llms import ChatMessage
+
+        pplx_api_key = "your-perplexity-api-key"
+
+        llm = Perplexity(
+            api_key=pplx_api_key, model="mistral-7b-instruct", temperature=0.5
+        )
+
+        messages_dict = [
+            {"role": "system", "content": "Be precise and concise."},
+            {"role": "user", "content": "Tell me 5 sentences about Perplexity."},
+        ]
+        messages = [ChatMessage(**msg) for msg in messages_dict]
+
+        response = llm.chat(messages)
+        print(str(response))
+        ```
+    """
+
     model: str = Field(description="The Perplexity model to use.")
     temperature: float = Field(description="The temperature to use during generation.")
     max_tokens: Optional[int] = Field(
@@ -98,9 +124,11 @@ class Perplexity(LLM):
     @property
     def metadata(self) -> LLMMetadata:
         return LLMMetadata(
-            context_window=self.context_window
-            if self.context_window is not None
-            else self._get_context_window(),
+            context_window=(
+                self.context_window
+                if self.context_window is not None
+                else self._get_context_window()
+            ),
             num_output=self.max_tokens
             or -1,  # You can replace this with the appropriate value
             is_chat_model=self._is_chat_model(),
diff --git a/llama-index-integrations/llms/llama-index-llms-portkey/llama_index/llms/portkey/base.py b/llama-index-integrations/llms/llama-index-llms-portkey/llama_index/llms/portkey/base.py
index 30cb1e744c33a955cdd7182a1b481218b4c58333..8160720bd70b26266560eab7743415fa78d15a68 100644
--- a/llama-index-integrations/llms/llama-index-llms-portkey/llama_index/llms/portkey/base.py
+++ b/llama-index-integrations/llms/llama-index-llms-portkey/llama_index/llms/portkey/base.py
@@ -41,10 +41,49 @@ DEFAULT_PORTKEY_MODEL = "gpt-3.5-turbo"
 
 
 class Portkey(CustomLLM):
-    """_summary_.
+    """Portkey LLM.
+
+    Examples:
+        `pip install llama-index-llms-portkey`
+
+        ```python
+        # Importing necessary libraries and modules
+        from llama_index.llms.portkey import Portkey
+        from llama_index.core.llms import ChatMessage
+        import portkey as pk
+
+        # Setting up Portkey API Key
+        import os
+        os.environ["PORTKEY_API_KEY"] = "YOUR_PORTKEY_API_KEY"
+
+        # Setting up Virtual Keys for OpenAI
+        openai_virtual_key_a = "YOUR_OPENAI_VIRTUAL_KEY_A"
+        openai_virtual_key_b = "YOUR_OPENAI_VIRTUAL_KEY_B"
+
+        # Creating an instance of Portkey with required configurations
+        portkey_client = Portkey(api_key=os.environ.get("PORTKEY_API_KEY"), mode="single")
+
+        # Configuring an LLM option for OpenAI with semantic caching
+        openai_llm = pk.LLMOptions(
+            provider="openai",
+            model="gpt-3.5-turbo",
+            virtual_key=openai_virtual_key_a,
+            cache_status="semantic",
+        )
+
+        # Adding the LLM option to the Portkey client
+        portkey_client.add_llms(openai_llm)
+
+        # Defining chat messages for testing
+        current_messages = [
+            ChatMessage(role="system", content="You are a helpful assistant"),
+            ChatMessage(role="user", content="What are the ingredients of a pizza?"),
+        ]
 
-    Args:
-        LLM (_type_): _description_
+        # Testing Portkey Semantic Cache
+        response = portkey_client.chat(current_messages)
+        print(str(response))
+        ```
     """
 
     mode: Optional[Union["Modes", "ModesLiteral"]] = Field(
diff --git a/llama-index-integrations/llms/llama-index-llms-predibase/llama_index/llms/predibase/base.py b/llama-index-integrations/llms/llama-index-llms-predibase/llama_index/llms/predibase/base.py
index 67c6d7402b38c3d367ce105b1887e8b5034533b0..d16576dbc5bfdb14b6dc7997e74ed524cde20403 100644
--- a/llama-index-integrations/llms/llama-index-llms-predibase/llama_index/llms/predibase/base.py
+++ b/llama-index-integrations/llms/llama-index-llms-predibase/llama_index/llms/predibase/base.py
@@ -20,7 +20,25 @@ from llama_index.core.types import BaseOutputParser, PydanticProgramMode
 
 
 class PredibaseLLM(CustomLLM):
-    """Predibase LLM."""
+    """Predibase LLM.
+
+    Examples:
+        `pip install llama-index-llms-predibase`
+
+        ```python
+        import os
+
+        os.environ["PREDIBASE_API_TOKEN"] = "{PREDIBASE_API_TOKEN}"
+
+        from llama_index.llms.predibase import PredibaseLLM
+
+        llm = PredibaseLLM(
+            model_name="llama-2-13b", temperature=0.3, max_new_tokens=512
+        )
+        response = llm.complete("Hello World!")
+        print(str(response))
+        ```
+    """
 
     model_name: str = Field(description="The Predibase model to use.")
     predibase_api_key: str = Field(description="The Predibase API key to use.")
diff --git a/llama-index-integrations/llms/llama-index-llms-replicate/llama_index/llms/replicate/base.py b/llama-index-integrations/llms/llama-index-llms-replicate/llama_index/llms/replicate/base.py
index 297715ba5681396ffdf053b2a100d00f0b097f99..3ecc49ed0693b14248e21f8c513bf3e8a3bfc270 100644
--- a/llama-index-integrations/llms/llama-index-llms-replicate/llama_index/llms/replicate/base.py
+++ b/llama-index-integrations/llms/llama-index-llms-replicate/llama_index/llms/replicate/base.py
@@ -21,6 +21,30 @@ DEFAULT_REPLICATE_TEMP = 0.75
 
 
 class Replicate(CustomLLM):
+    """Replicate LLM.
+
+    Examples:
+        `pip install llama-index-llms-replicate`
+
+        ```python
+        from llama_index.llms.replicate import Replicate
+
+        # Set up the Replicate API token
+        import os
+        os.environ["REPLICATE_API_TOKEN"] = "<your API key>"
+
+        # Initialize the Replicate class
+        llm = Replicate(
+            model="replicate/vicuna-13b:6282abe6a492de4145d7bb601023762212f9ddbbe78278bd6771c8b3b2f2a13b"
+        )
+
+        # Example of calling the 'complete' method with a prompt
+        resp = llm.complete("Who is Paul Graham?")
+
+        print(resp)
+        ```
+    """
+
     model: str = Field(description="The Replicate model to use.")
     temperature: float = Field(
         default=DEFAULT_REPLICATE_TEMP,
diff --git a/llama-index-integrations/llms/llama-index-llms-rungpt/llama_index/llms/rungpt/base.py b/llama-index-integrations/llms/llama-index-llms-rungpt/llama_index/llms/rungpt/base.py
index 773098d66b5c098b7c4bccd649265b54301f8d89..592038ac911f6a3c6f87a883cb7cbe05f6de265d 100644
--- a/llama-index-integrations/llms/llama-index-llms-rungpt/llama_index/llms/rungpt/base.py
+++ b/llama-index-integrations/llms/llama-index-llms-rungpt/llama_index/llms/rungpt/base.py
@@ -23,7 +23,22 @@ DEFAULT_RUNGPT_TEMP = 0.75
 
 
 class RunGptLLM(LLM):
-    """The opengpt of Jina AI models."""
+    """RunGPT LLM.
+
+    The opengpt of Jina AI models.
+
+    Examples:
+        `pip install llama-index-llms-rungpt`
+
+        ```python
+        from llama_index.llms.rungpt import RunGptLLM
+
+        llm = RunGptLLM(model="rungpt", endpoint="0.0.0.0:51002")
+
+        response = llm.complete("What public transportation might be available in a city?")
+        print(str(response))
+        ```
+    """
 
     model: Optional[str] = Field(
         default=DEFAULT_RUNGPT_MODEL, description="The rungpt model to use."
diff --git a/llama-index-integrations/llms/llama-index-llms-sagemaker-endpoint/llama_index/llms/sagemaker_endpoint/base.py b/llama-index-integrations/llms/llama-index-llms-sagemaker-endpoint/llama_index/llms/sagemaker_endpoint/base.py
index e4234175067d8aec0dd785dd8c791c2dbff9be06..2223b03190205a0b5bbc7214411dbc73c9fc591b 100644
--- a/llama-index-integrations/llms/llama-index-llms-sagemaker-endpoint/llama_index/llms/sagemaker_endpoint/base.py
+++ b/llama-index-integrations/llms/llama-index-llms-sagemaker-endpoint/llama_index/llms/sagemaker_endpoint/base.py
@@ -35,6 +35,53 @@ LLAMA_COMPLETION_TO_PROMPT = completion_to_prompt
 
 
 class SageMakerLLM(LLM):
+    r"""SageMaker LLM.
+
+    Examples:
+        `pip install llama-index-llms-sagemaker-endpoint`
+
+        ```python
+        from llama_index.llms.sagemaker import SageMakerLLM
+
+        # hooks for HuggingFaceH4/zephyr-7b-beta
+        # different models may require different formatting
+        def messages_to_prompt(messages):
+            prompt = ""
+            for message in messages:
+                if message.role == 'system':
+                prompt += f"<|system|>\n{message.content}</s>\n"
+                elif message.role == 'user':
+                prompt += f"<|user|>\n{message.content}</s>\n"
+                elif message.role == 'assistant':
+                prompt += f"<|assistant|>\n{message.content}</s>\n"
+
+            # ensure we start with a system prompt, insert blank if needed
+            if not prompt.startswith("<|system|>\n"):
+                prompt = "<|system|>\n</s>\n" + prompt
+
+            # add final assistant prompt
+            prompt = prompt + "<|assistant|>\n"
+
+            return prompt
+
+        def completion_to_prompt(completion):
+            return f"<|system|>\n</s>\n<|user|>\n{completion}</s>\n<|assistant|>\n"
+
+        # Additional setup for SageMakerLLM class
+        model_name = "HuggingFaceH4/zephyr-7b-beta"
+        api_key = "your_api_key"
+        region = "your_region"
+
+        llm = SageMakerLLM(
+            model_name=model_name,
+            api_key=api_key,
+            region=region,
+            messages_to_prompt=messages_to_prompt,
+            completion_to_prompt=completion_to_prompt,
+        )
+        ```
+    """
+
     endpoint_name: str = Field(description="SageMaker LLM endpoint name")
     endpoint_kwargs: Dict[str, Any] = Field(
         default={},
diff --git a/llama-index-integrations/llms/llama-index-llms-together/llama_index/llms/together/base.py b/llama-index-integrations/llms/llama-index-llms-together/llama_index/llms/together/base.py
index b4e2d9e1b07d54618b1176a5576e9b65a05f374d..ab8b62a662f977c6750b8cb30e6aa62f75baea3d 100644
--- a/llama-index-integrations/llms/llama-index-llms-together/llama_index/llms/together/base.py
+++ b/llama-index-integrations/llms/llama-index-llms-together/llama_index/llms/together/base.py
@@ -5,6 +5,27 @@ from llama_index.llms.openai_like import OpenAILike
 
 
 class TogetherLLM(OpenAILike):
+    """Together LLM.
+
+    Examples:
+        `pip install llama-index-llms-together`
+
+        ```python
+        from llama_index.llms.together import TogetherLLM
+
+        # set api key in env or in llm
+        # import os
+        # os.environ["TOGETHER_API_KEY"] = "your api key"
+
+        llm = TogetherLLM(
+            model="mistralai/Mixtral-8x7B-Instruct-v0.1", api_key="your_api_key"
+        )
+
+        resp = llm.complete("Who is Paul Graham?")
+        print(resp)
+        ```
+    """
+
     def __init__(
         self,
         model: str,
diff --git a/llama-index-integrations/llms/llama-index-llms-vertex/llama_index/llms/vertex/base.py b/llama-index-integrations/llms/llama-index-llms-vertex/llama_index/llms/vertex/base.py
index 0b21e82975e30014aa05c50c4d49e48fed5c4459..2fe78e89e67c18e68b36af2101caab29e07f1478 100644
--- a/llama-index-integrations/llms/llama-index-llms-vertex/llama_index/llms/vertex/base.py
+++ b/llama-index-integrations/llms/llama-index-llms-vertex/llama_index/llms/vertex/base.py
@@ -33,6 +33,33 @@ from llama_index.llms.vertex.utils import (
 
 
 class Vertex(LLM):
+    """Vertext LLM.
+
+    Examples:
+        `pip install llama-index-llms-vertex`
+
+        ```python
+        from llama_index.llms.openai import Vertex
+
+        # Set up necessary variables
+        credentials = {
+            "project_id": "INSERT_PROJECT_ID",
+            "api_key": "INSERT_API_KEY",
+        }
+
+        # Create an instance of the Vertex class
+        llm = Vertex(
+            model="text-bison",
+            project=credentials["project_id"],
+            credentials=credentials,
+        )
+
+        # Access the complete method from the instance
+        response = llm.complete("Hello world!")
+        print(str(response))
+        ```
+    """
+
     model: str = Field(description="The vertex model to use.")
     temperature: float = Field(description="The temperature to use for sampling.")
     max_tokens: int = Field(description="The maximum number of tokens to generate.")
diff --git a/llama-index-integrations/llms/llama-index-llms-vllm/llama_index/llms/vllm/base.py b/llama-index-integrations/llms/llama-index-llms-vllm/llama_index/llms/vllm/base.py
index aefe1b79aefbf7d19add77cd4fb248288d112060..a5c6c047ef96cb993d0411b58f0452067d95a175 100644
--- a/llama-index-integrations/llms/llama-index-llms-vllm/llama_index/llms/vllm/base.py
+++ b/llama-index-integrations/llms/llama-index-llms-vllm/llama_index/llms/vllm/base.py
@@ -27,6 +27,40 @@ from llama_index.llms.vllm.utils import get_response, post_http_request
 
 
 class Vllm(LLM):
+    r"""Vllm LLM.
+
+    This class runs a vLLM model locally.
+
+    Examples:
+        `pip install llama-index-llms-vllm`
+
+
+        ```python
+        from llama_index.llms.vllm import Vllm
+
+        # specific functions to format for mistral instruct
+        def messages_to_prompt(messages):
+            prompt = "\n".join([str(x) for x in messages])
+            return f"<s>[INST] {prompt} [/INST] </s>\n"
+
+        def completion_to_prompt(completion):
+            return f"<s>[INST] {completion} [/INST] </s>\n"
+
+        llm = Vllm(
+            model="mistralai/Mistral-7B-Instruct-v0.1",
+            tensor_parallel_size=4,
+            max_new_tokens=256,
+            vllm_kwargs={"swap_space": 1, "gpu_memory_utilization": 0.5},
+            messages_to_prompt=messages_to_prompt,
+            completion_to_prompt=completion_to_prompt,
+        )
+
+        llm.complete(
+            "What is a black hole?"
+        )
+        ```
+    """
+
     model: Optional[str] = Field(description="The HuggingFace Model to use.")
 
     temperature: float = Field(description="The temperature to use for sampling.")
@@ -292,6 +326,41 @@ class Vllm(LLM):
 
 
 class VllmServer(Vllm):
+    r"""Vllm LLM.
+
+    This class connects to a vLLM server (non-openai versions).
+
+    If using the OpenAI-API vLLM server, please see the `OpenAILike` LLM class.
+
+    Examples:
+        `pip install llama-index-llms-vllm`
+
+
+        ```python
+        from llama_index.llms.vllm import VllmServer
+
+        # specific functions to format for mistral instruct
+        def messages_to_prompt(messages):
+            prompt = "\n".join([str(x) for x in messages])
+            return f"<s>[INST] {prompt} [/INST] </s>\n"
+
+        def completion_to_prompt(completion):
+            return f"<s>[INST] {completion} [/INST] </s>\n"
+
+        llm = VllmServer(
+            api_url=api_url,
+            max_new_tokens=256,
+            temperature=0.1,
+            messages_to_prompt=messages_to_prompt,
+            completion_to_prompt=completion_to_prompt,
+        )
+
+        llm.complete(
+            "What is a black hole?"
+        )
+        ```
+    """
+
     def __init__(
         self,
         model: str = "facebook/opt-125m",
diff --git a/llama-index-integrations/llms/llama-index-llms-watsonx/llama_index/llms/watsonx/base.py b/llama-index-integrations/llms/llama-index-llms-watsonx/llama_index/llms/watsonx/base.py
index 3573b59cd52abfdc3d1d62e3dc25def05452557e..1f5b498bc4787d28f2d14c43a7946af7820273c1 100644
--- a/llama-index-integrations/llms/llama-index-llms-watsonx/llama_index/llms/watsonx/base.py
+++ b/llama-index-integrations/llms/llama-index-llms-watsonx/llama_index/llms/watsonx/base.py
@@ -28,7 +28,27 @@ from llama_index.llms.watsonx.utils import (
 
 
 class WatsonX(LLM):
-    """IBM WatsonX LLM."""
+    """IBM WatsonX LLM.
+
+    Examples:
+        `pip install llama-index-llms-watsonx`
+
+        ```python
+        from llama_index.llms.watsonx import WatsonX
+
+        credentials = {
+            "url": "https://enter.your-ibm.url",
+            "apikey": "insert_your_api_key",
+        }
+
+        project_id = "insert_your_project_id"
+
+        llm = WatsonX(credentials=credentials, project_id=project_id)
+
+        resp = llm.complete("Paul Graham is")
+        print(resp)
+        ```
+    """
 
     model_id: str = Field(description="The Model to use.")
     max_new_tokens: int = Field(description="The maximum number of tokens to generate.")
diff --git a/llama-index-integrations/llms/llama-index-llms-xinference/llama_index/llms/xinference/base.py b/llama-index-integrations/llms/llama-index-llms-xinference/llama_index/llms/xinference/base.py
index 4889d56a29237e2c316dc1a5ad44e4a65546eee1..0d2d4f9712848450cec5425d8e709c00c42f6b99 100644
--- a/llama-index-integrations/llms/llama-index-llms-xinference/llama_index/llms/xinference/base.py
+++ b/llama-index-integrations/llms/llama-index-llms-xinference/llama_index/llms/xinference/base.py
@@ -29,6 +29,30 @@ DEFAULT_XINFERENCE_TEMP = 1.0
 
 
 class Xinference(CustomLLM):
+    """Xinference LLM.
+
+    Examples:
+        `pip install llama-index-llms-xinference`
+
+        ```python
+        from llama_index.llms.xinference import Xinference
+
+        # Set up Xinference with required parameters
+        llm = Xinference(
+            model_name="xinference-1.0",
+            app_id="ml",
+            user_id="xinference",
+            api_key="<YOUR XINFERENCE API KEY>"
+            temperature=0.5,
+            max_tokens=256,
+        )
+
+        # Call the complete function
+        response = llm.complete("Hello World!")
+        print(response)
+        ```
+    """
+
     model_uid: str = Field(description="The Xinference model to use.")
     endpoint: str = Field(description="The Xinference endpoint URL to use.")
     temperature: float = Field(
diff --git a/llama-index-integrations/readers/llama-index-readers-github/llama_index/readers/github/repository/github_client.py b/llama-index-integrations/readers/llama-index-readers-github/llama_index/readers/github/repository/github_client.py
index 5e804bc0b781c10ce9db6b302a5b74d2613c8006..86cb7f61ddb4adff67eac049f7a2ee39474bd26b 100644
--- a/llama-index-integrations/readers/llama-index-readers-github/llama_index/readers/github/repository/github_client.py
+++ b/llama-index-integrations/readers/llama-index-readers-github/llama_index/readers/github/repository/github_client.py
@@ -7,10 +7,10 @@ It is used by the Github readers to retrieve the data from Github.
 
 import os
 
-from dataclasses import dataclass
+from dataclasses import dataclass, field
 from typing import Any, Dict, List, Optional, Protocol
 
-from dataclasses_json import DataClassJsonMixin
+from dataclasses_json import DataClassJsonMixin, config
 
 
 @dataclass
@@ -142,7 +142,7 @@ class GitBranchResponseModel(DataClassJsonMixin):
 
     @dataclass
     class Links(DataClassJsonMixin):
-        self: str
+        _self: str = field(metadata=config(field_name="self"))
         html: str
 
     commit: Commit
diff --git a/llama-index-integrations/vector_stores/llama-index-vector-stores-astra-db/llama_index/vector_stores/astra_db/base.py b/llama-index-integrations/vector_stores/llama-index-vector-stores-astra-db/llama_index/vector_stores/astra_db/base.py
index d2cafbb6a2f8d9dd79ef8f416b4e1ad41859f86e..2131f42ed23c7c2cfb21b7baa1fe1e88c40797a5 100644
--- a/llama-index-integrations/vector_stores/llama-index-vector-stores-astra-db/llama_index/vector_stores/astra_db/base.py
+++ b/llama-index-integrations/vector_stores/llama-index-vector-stores-astra-db/llama_index/vector_stores/astra_db/base.py
@@ -51,6 +51,8 @@ class AstraDBVectorStore(BasePydanticVectorStore):
 
     All Astra operations are done through the astrapy library.
 
+    Visit https://astra.datastax.com/signup to create an account and get an API key.
+
     Args:
         collection_name (str): collection name to use. If not existing, it will be created.
         token (str): The Astra DB Application Token to use.
@@ -60,6 +62,21 @@ class AstraDBVectorStore(BasePydanticVectorStore):
         ttl_seconds (Optional[int]): expiration time for inserted entries.
             Default is no expiration.
 
+    Examples:
+        `pip install llama-index-vector-stores-astra`
+
+        ```python
+        from llama_index.vector_stores.astra import AstraDBVectorStore
+
+        # Create the Astra DB Vector Store object
+        astra_db_store = AstraDBVectorStore(
+            collection_name="astra_v_table",
+            token=token,
+            api_endpoint=api_endpoint,
+            embedding_dimension=1536,
+        )
+        ```
+
     """
 
     stores_text: bool = True
diff --git a/llama-index-integrations/vector_stores/llama-index-vector-stores-awadb/llama_index/vector_stores/awadb/base.py b/llama-index-integrations/vector_stores/llama-index-vector-stores-awadb/llama_index/vector_stores/awadb/base.py
index 758d2f0454e0759a629bae754a6e7ee76dfdc4f9..45ad491b4c891375e07209d792572d777355b159 100644
--- a/llama-index-integrations/vector_stores/llama-index-vector-stores-awadb/llama_index/vector_stores/awadb/base.py
+++ b/llama-index-integrations/vector_stores/llama-index-vector-stores-awadb/llama_index/vector_stores/awadb/base.py
@@ -3,6 +3,7 @@
 An index that is built on top of an existing vector store.
 
 """
+
 import logging
 import uuid
 from typing import Any, List, Optional, Set
@@ -30,9 +31,14 @@ class AwaDBVectorStore(VectorStore):
     During query time, the index uses AwaDB to query for the top
     k most similar nodes.
 
-    Args:
-        chroma_collection (chromadb.api.models.Collection.Collection):
-            ChromaDB collection instance
+    Examples:
+        `pip install llama-index-vector-stores-awadb`
+
+        ```python
+        from llama_index.vector_stores.awadb import AwaDBVectorStore
+
+        vector_store = AwaDBVectorStore(table_name="llamaindex")
+        ```
 
     """
 
diff --git a/llama-index-integrations/vector_stores/llama-index-vector-stores-azureaisearch/llama_index/vector_stores/azureaisearch/base.py b/llama-index-integrations/vector_stores/llama-index-vector-stores-azureaisearch/llama_index/vector_stores/azureaisearch/base.py
index 18a82a0f485d2e5a4fac0aa659e14ff666c78dbb..a67cc0b4676c5d855777e268a42016c6cdf662bd 100644
--- a/llama-index-integrations/vector_stores/llama-index-vector-stores-azureaisearch/llama_index/vector_stores/azureaisearch/base.py
+++ b/llama-index-integrations/vector_stores/llama-index-vector-stores-azureaisearch/llama_index/vector_stores/azureaisearch/base.py
@@ -1,4 +1,5 @@
 """Azure AI Search vector store."""
+
 import enum
 import json
 import logging
@@ -50,6 +51,57 @@ class IndexManagement(int, enum.Enum):
 
 
 class AzureAISearchVectorStore(BasePydanticVectorStore):
+    """Azure AI Search vector store.
+
+    Examples:
+        `pip install llama-index-vector-stores-azureaisearch`
+
+        ```python
+        from azure.core.credentials import AzureKeyCredential
+        from azure.search.documents import SearchClient
+        from azure.search.documents.indexes import SearchIndexClient
+        from llama_index.vector_stores.azureaisearch import AzureAISearchVectorStore
+        from llama_index.vector_stores.azureaisearch import IndexManagement, MetadataIndexFieldType
+
+        # Azure AI Search setup
+        search_service_api_key = "YOUR-AZURE-SEARCH-SERVICE-ADMIN-KEY"
+        search_service_endpoint = "YOUR-AZURE-SEARCH-SERVICE-ENDPOINT"
+        search_service_api_version = "2023-11-01"
+        credential = AzureKeyCredential(search_service_api_key)
+
+        # Index name to use
+        index_name = "llamaindex-vector-demo"
+
+        # Use index client to demonstrate creating an index
+        index_client = SearchIndexClient(
+            endpoint=search_service_endpoint,
+            credential=credential,
+        )
+
+        metadata_fields = {
+            "author": "author",
+            "theme": ("topic", MetadataIndexFieldType.STRING),
+            "director": "director",
+        }
+
+        # Creating an Azure AI Search Vector Store
+        vector_store = AzureAISearchVectorStore(
+            search_or_index_client=index_client,
+            filterable_metadata_field_keys=metadata_fields,
+            index_name=index_name,
+            index_management=IndexManagement.CREATE_IF_NOT_EXISTS,
+            id_field_key="id",
+            chunk_field_key="chunk",
+            embedding_field_key="embedding",
+            embedding_dimensionality=1536,
+            metadata_string_field_key="metadata",
+            doc_id_field_key="doc_id",
+            language_analyzer="en.lucene",
+            vector_algorithm_type="exhaustiveKnn",
+        )
+        ```
+    """
+
     stores_text: bool = True
     flat_metadata: bool = True
 
diff --git a/llama-index-integrations/vector_stores/llama-index-vector-stores-azurecosmosmongo/llama_index/vector_stores/azurecosmosmongo/base.py b/llama-index-integrations/vector_stores/llama-index-vector-stores-azurecosmosmongo/llama_index/vector_stores/azurecosmosmongo/base.py
index 9eb6dd10c166efabf02839a363427e8154d10572..668111ad31b854a0c3c3d76fe5ddd2d9d6abc0b3 100644
--- a/llama-index-integrations/vector_stores/llama-index-vector-stores-azurecosmosmongo/llama_index/vector_stores/azurecosmosmongo/base.py
+++ b/llama-index-integrations/vector_stores/llama-index-vector-stores-azurecosmosmongo/llama_index/vector_stores/azurecosmosmongo/base.py
@@ -31,6 +31,25 @@ class AzureCosmosDBMongoDBVectorSearch(BasePydanticVectorStore):
     To use, you should have both:
     - the ``pymongo`` python package installed
     - a connection string associated with an Azure Cosmodb MongoDB vCore Cluster
+
+    Examples:
+        `pip install llama-index-vector-stores-azurecosmosmongo`
+
+        ```python
+        import pymongo
+        from llama_index.vector_stores.azurecosmosmongo import AzureCosmosDBMongoDBVectorSearch
+
+        # Set up the connection string with your Azure CosmosDB MongoDB URI
+        connection_string = "YOUR_AZURE_COSMOSDB_MONGODB_URI"
+        mongodb_client = pymongo.MongoClient(connection_string)
+
+        # Create an instance of AzureCosmosDBMongoDBVectorSearch
+        vector_store = AzureCosmosDBMongoDBVectorSearch(
+            mongodb_client=mongodb_client,
+            db_name="demo_vectordb",
+            collection_name="paul_graham_essay",
+        )
+        ```
     """
 
     stores_text: bool = True
diff --git a/llama-index-integrations/vector_stores/llama-index-vector-stores-bagel/llama_index/vector_stores/bagel/base.py b/llama-index-integrations/vector_stores/llama-index-vector-stores-bagel/llama_index/vector_stores/bagel/base.py
index 8a40f0c16285d1cb404859b5b1ddea4d126052b7..7390bec6595964b4fe846d4d3c262b0f8e499368 100644
--- a/llama-index-integrations/vector_stores/llama-index-vector-stores-bagel/llama_index/vector_stores/bagel/base.py
+++ b/llama-index-integrations/vector_stores/llama-index-vector-stores-bagel/llama_index/vector_stores/bagel/base.py
@@ -29,8 +29,27 @@ def _to_bagel_filter(standard_filters: MetadataFilters) -> dict:
 
 
 class BagelVectorStore(VectorStore):
-    """
-    Vector store for Bagel.
+    """Vector store for Bagel.
+
+    Examples:
+        `pip install llama-index-vector-stores-bagel`
+
+        ```python
+        from llama_index.core import VectorStoreIndex, StorageContext
+        from llama_index.vector_stores.bagel import BagelVectorStore
+
+        import bagel
+        from bagel import Settings
+
+        server_settings = Settings(
+            bagel_api_impl="rest", bagel_server_host="api.bageldb.ai"
+        )
+
+        client = bagel.Client(server_settings)
+
+        collection = client.get_or_create_cluster("testing_embeddings")
+        vector_store = BagelVectorStore(collection=collection)
+        ```
     """
 
     # support for Bagel specific parameters
diff --git a/llama-index-integrations/vector_stores/llama-index-vector-stores-cassandra/llama_index/vector_stores/cassandra/base.py b/llama-index-integrations/vector_stores/llama-index-vector-stores-cassandra/llama_index/vector_stores/cassandra/base.py
index 6208579baa9a18c285f40faddd20d07b163ee286..5b3926c5eee187a7367a43555bddc7873bdc9a7f 100644
--- a/llama-index-integrations/vector_stores/llama-index-vector-stores-cassandra/llama_index/vector_stores/cassandra/base.py
+++ b/llama-index-integrations/vector_stores/llama-index-vector-stores-cassandra/llama_index/vector_stores/cassandra/base.py
@@ -79,6 +79,17 @@ class CassandraVectorStore(BasePydanticVectorStore):
             Default is no expiration (None).
         insertion_batch_size (optional, int): how many vectors are inserted
             concurrently, for use by bulk inserts. Defaults to 20.
+
+    Examples:
+        `pip install llama-index-vector-stores-cassandra`
+
+        ```python
+        from llama_index.vector_stores.cassandra import CassandraVectorStore
+
+        vector_store = CassandraVectorStore(
+            table="cass_v_table", embedding_dimension=1536
+        )
+        ```
     """
 
     stores_text: bool = True
diff --git a/llama-index-integrations/vector_stores/llama-index-vector-stores-chroma/llama_index/vector_stores/chroma/base.py b/llama-index-integrations/vector_stores/llama-index-vector-stores-chroma/llama_index/vector_stores/chroma/base.py
index 409e5294147a245aa1552cd902a4e76734f93bf0..444707afd666b690ebf8083b3754649581a458ed 100644
--- a/llama-index-integrations/vector_stores/llama-index-vector-stores-chroma/llama_index/vector_stores/chroma/base.py
+++ b/llama-index-integrations/vector_stores/llama-index-vector-stores-chroma/llama_index/vector_stores/chroma/base.py
@@ -116,6 +116,21 @@ class ChromaVectorStore(BasePydanticVectorStore):
         chroma_collection (chromadb.api.models.Collection.Collection):
             ChromaDB collection instance
 
+    Examples:
+        `pip install llama-index-vector-stores-chroma`
+
+        ```python
+        import chromadb
+        from llama_index.vector_stores.chroma import ChromaVectorStore
+
+        # Create a Chroma client and collection
+        chroma_client = chromadb.EphemeralClient()
+        chroma_collection = chroma_client.create_collection("example_collection")
+
+        # Set up the ChromaVectorStore and StorageContext
+        vector_store = ChromaVectorStore(chroma_collection=chroma_collection)
+        ```
+
     """
 
     stores_text: bool = True
diff --git a/llama-index-integrations/vector_stores/llama-index-vector-stores-clickhouse/llama_index/vector_stores/clickhouse/base.py b/llama-index-integrations/vector_stores/llama-index-vector-stores-clickhouse/llama_index/vector_stores/clickhouse/base.py
index c10f2b206153fc7bcc09f49814ab5cb650978510..bbd31593577b18bf27965a2944dc875621b5a242 100644
--- a/llama-index-integrations/vector_stores/llama-index-vector-stores-clickhouse/llama_index/vector_stores/clickhouse/base.py
+++ b/llama-index-integrations/vector_stores/llama-index-vector-stores-clickhouse/llama_index/vector_stores/clickhouse/base.py
@@ -63,7 +63,7 @@ DISTANCE_MAPPING = {
 class ClickHouseSettings:
     """ClickHouse Client Configuration.
 
-    Attributes:
+    Args:
         table (str): Table name to operate on.
         database (str): Database name to find the table.
         engine (str): Engine. Options are "MergeTree" and "Memory". Default is "MergeTree".
@@ -138,6 +138,24 @@ class ClickHouseVectorStore(BasePydanticVectorStore):
             Defaults to None.
         service_context (ServiceContext, optional): Vector store service context.
             Defaults to None
+
+    Examples:
+        `pip install llama-index-vector-stores-clickhouse`
+
+        ```python
+        from llama_index.vector_stores.clickhouse import ClickHouseVectorStore
+        import clickhouse_connect
+
+        # initialize client
+        client = clickhouse_connect.get_client(
+            host="localhost",
+            port=8123,
+            username="default",
+            password="",
+        )
+
+        vector_store = ClickHouseVectorStore(clickhouse_client=client)
+        ```
     """
 
     stores_text = True
diff --git a/llama-index-integrations/vector_stores/llama-index-vector-stores-dashvector/llama_index/vector_stores/dashvector/base.py b/llama-index-integrations/vector_stores/llama-index-vector-stores-dashvector/llama_index/vector_stores/dashvector/base.py
index 97717f9072faf72e084d4e21b7351a125e66f542..b91ea867c670f465fb87f8360f1f687595eddd7b 100644
--- a/llama-index-integrations/vector_stores/llama-index-vector-stores-dashvector/llama_index/vector_stores/dashvector/base.py
+++ b/llama-index-integrations/vector_stores/llama-index-vector-stores-dashvector/llama_index/vector_stores/dashvector/base.py
@@ -55,6 +55,23 @@ class DashVectorStore(VectorStore):
         collection (Optional[dashvector.Collection]): DashVector collection instance
         support_sparse_vector (bool): whether support sparse vector for collection.
         encoder (Optional[dashtext.SparseVectorEncoder]): encoder for generating sparse vector from document
+
+    Examples:
+        `pip install llama-index-vector-stores-dashvector`
+
+        ```python
+        import dashvector
+
+        api_key = os.environ["DASHVECTOR_API_KEY"]
+        client = dashvector.Client(api_key=api_key)
+
+        # dimensions are for text-embedding-ada-002
+        client.create("llama-demo", dimension=1536)
+
+        dashvector_collection = client.get("quickstart")
+
+        vector_store = DashVectorStore(dashvector_collection)
+        ```
     """
 
     stores_text: bool = True
diff --git a/llama-index-integrations/vector_stores/llama-index-vector-stores-deeplake/llama_index/vector_stores/deeplake/base.py b/llama-index-integrations/vector_stores/llama-index-vector-stores-deeplake/llama_index/vector_stores/deeplake/base.py
index 734da12f31b612b1229df4a697f69d044ed6dc9e..408a8ba4b327173bab5b993fc4802d0d4aa30d2c 100644
--- a/llama-index-integrations/vector_stores/llama-index-vector-stores-deeplake/llama_index/vector_stores/deeplake/base.py
+++ b/llama-index-integrations/vector_stores/llama-index-vector-stores-deeplake/llama_index/vector_stores/deeplake/base.py
@@ -37,6 +37,16 @@ class DeepLakeVectorStore(BasePydanticVectorStore):
     allows the use of an already existing deeplake dataset if it is one that was created
     this vector store. It also supports creating a new one if the dataset doesn't
     exist or if `overwrite` is set to True.
+
+    Examples:
+        `pip install llama-index-vector-stores-deeplake`
+
+        ```python
+        from llama_index.vector_stores.deeplake import DeepLakeVectorStore
+
+        # Create an instance of DeepLakeVectorStore
+        vector_store = DeepLakeVectorStore(dataset_path=dataset_path, overwrite=True)
+        ```
     """
 
     stores_text: bool = True
diff --git a/llama-index-integrations/vector_stores/llama-index-vector-stores-docarray/llama_index/vector_stores/docarray/hnsw.py b/llama-index-integrations/vector_stores/llama-index-vector-stores-docarray/llama_index/vector_stores/docarray/hnsw.py
index d8d8712f8bd3b2da8e870b21c9f9528a6491c53c..a48c70d8ce163aa651ccea704de244634543ffde 100644
--- a/llama-index-integrations/vector_stores/llama-index-vector-stores-docarray/llama_index/vector_stores/docarray/hnsw.py
+++ b/llama-index-integrations/vector_stores/llama-index-vector-stores-docarray/llama_index/vector_stores/docarray/hnsw.py
@@ -10,6 +10,16 @@ class DocArrayHnswVectorStore(DocArrayVectorStore):
 
     This class is a lightweight Document Index implementation provided by Docarray.
     It stores vectors on disk in hnswlib, and stores all other data in SQLite.
+
+    Examples:
+        `pip install llama-index-vector-stores-docarray`
+
+        ```python
+        from llama_index.vector_stores.docarray import DocArrayHnswVectorStore
+
+        # Initialize the DocArrayHnswVectorStore
+        vector_store = DocArrayHnswVectorStore(work_dir="hnsw_index", dim=1536)
+        ```
     """
 
     def __init__(
diff --git a/llama-index-integrations/vector_stores/llama-index-vector-stores-docarray/llama_index/vector_stores/docarray/in_memory.py b/llama-index-integrations/vector_stores/llama-index-vector-stores-docarray/llama_index/vector_stores/docarray/in_memory.py
index 75ca75166ceea3ec6cd92745047259ad3337b415..1c7aa24466cd1aec17453e7b7e67c0fabc8edde0 100644
--- a/llama-index-integrations/vector_stores/llama-index-vector-stores-docarray/llama_index/vector_stores/docarray/in_memory.py
+++ b/llama-index-integrations/vector_stores/llama-index-vector-stores-docarray/llama_index/vector_stores/docarray/in_memory.py
@@ -8,6 +8,16 @@ class DocArrayInMemoryVectorStore(DocArrayVectorStore):
     """Class representing a DocArray In-Memory vector store.
 
     This class is a document index provided by Docarray that stores documents in memory.
+
+    Examples:
+        `pip install llama-index-vector-stores-docarray`
+
+        ```python
+        from llama_index.vector_stores.docarray import DocArrayInMemoryVectorStore
+
+        # Create an instance of DocArrayInMemoryVectorStore
+        vector_store = DocArrayInMemoryVectorStore()
+        ```
     """
 
     def __init__(
diff --git a/llama-index-integrations/vector_stores/llama-index-vector-stores-duckdb/llama_index/vector_stores/duckdb/base.py b/llama-index-integrations/vector_stores/llama-index-vector-stores-duckdb/llama_index/vector_stores/duckdb/base.py
index df98b134d639951efa89f1c007d750da4fd8e070..75822b27634468557b7c2ac8140c6cda8f6c4736 100644
--- a/llama-index-integrations/vector_stores/llama-index-vector-stores-duckdb/llama_index/vector_stores/duckdb/base.py
+++ b/llama-index-integrations/vector_stores/llama-index-vector-stores-duckdb/llama_index/vector_stores/duckdb/base.py
@@ -64,6 +64,18 @@ class DuckDBVectorStore(BasePydanticVectorStore):
     During query time, the index uses DuckDB to query for the top
     k most similar nodes.
 
+    Examples:
+        `pip install llama-index-vector-stores-duckdb`
+
+        ```python
+        from llama_index.vector_stores.duckdb import DuckDBVectorStore
+
+        # in-memory
+        vector_store = DuckDBVectorStore()
+
+        # persist to disk
+        vector_store = DuckDBVectorStore("pg.duckdb", persist_dir="./persist/")
+        ```
     """
 
     stores_text: bool = True
diff --git a/llama-index-integrations/vector_stores/llama-index-vector-stores-dynamodb/llama_index/vector_stores/dynamodb/base.py b/llama-index-integrations/vector_stores/llama-index-vector-stores-dynamodb/llama_index/vector_stores/dynamodb/base.py
index ab8a6323934081538fc0aa0ad811b84c47e5a2f0..1421df1555a9693bdca9c5b660b0c438b8346571 100644
--- a/llama-index-integrations/vector_stores/llama-index-vector-stores-dynamodb/llama_index/vector_stores/dynamodb/base.py
+++ b/llama-index-integrations/vector_stores/llama-index-vector-stores-dynamodb/llama_index/vector_stores/dynamodb/base.py
@@ -1,4 +1,5 @@
 """DynamoDB vector store index."""
+
 from __future__ import annotations
 
 from logging import getLogger
@@ -37,6 +38,15 @@ class DynamoDBVectorStore(VectorStore):
     Args:
         dynamodb_kvstore (DynamoDBKVStore): data store
         namespace (Optional[str]): namespace
+
+    Examples:
+        `pip install llama-index-vector-stores-dynamodb`
+
+        ```python
+        from llama_index.vector_stores.dynamodb import DynamoDBVectorStore
+
+        vector_store = DynamoDBVectorStore.from_table_name(table_name="my_table")
+        ```
     """
 
     stores_text: bool = False
diff --git a/llama-index-integrations/vector_stores/llama-index-vector-stores-elasticsearch/llama_index/vector_stores/elasticsearch/base.py b/llama-index-integrations/vector_stores/llama-index-vector-stores-elasticsearch/llama_index/vector_stores/elasticsearch/base.py
index 08d0d7e0c09c430d1c6450ac12771138b5fb6f18..64e53c00a7db4c66983af4f8df2f5f827fad6fbd 100644
--- a/llama-index-integrations/vector_stores/llama-index-vector-stores-elasticsearch/llama_index/vector_stores/elasticsearch/base.py
+++ b/llama-index-integrations/vector_stores/llama-index-vector-stores-elasticsearch/llama_index/vector_stores/elasticsearch/base.py
@@ -156,6 +156,42 @@ class ElasticsearchStore(BasePydanticVectorStore):
         ConnectionError: If AsyncElasticsearch client cannot connect to Elasticsearch.
         ValueError: If neither es_client nor es_url nor es_cloud_id is provided.
 
+    Examples:
+        `pip install llama-index-vector-stores-elasticsearch`
+
+        ```python
+        from llama_index.vector_stores import ElasticsearchStore
+
+        # Additional setup for ElasticsearchStore class
+        index_name = "my_index"
+        es_url = "http://localhost:9200"
+        es_cloud_id = "<cloud-id>"  # Found within the deployment page
+        es_user = "elastic"
+        es_password = "<password>"  # Provided when creating deployment or can be reset
+        es_api_key = "<api-key>"  # Create an API key within Kibana (Security -> API Keys)
+
+        # Connecting to ElasticsearchStore locally
+        es_local = ElasticsearchStore(
+            index_name=index_name,
+            es_url=es_url,
+        )
+
+        # Connecting to Elastic Cloud with username and password
+        es_cloud_user_pass = ElasticsearchStore(
+            index_name=index_name,
+            es_cloud_id=es_cloud_id,
+            es_user=es_user,
+            es_password=es_password,
+        )
+
+        # Connecting to Elastic Cloud with API Key
+        es_cloud_api_key = ElasticsearchStore(
+            index_name=index_name,
+            es_cloud_id=es_cloud_id,
+            es_api_key=es_api_key,
+        )
+        ```
+
     """
 
     stores_text: bool = True
diff --git a/llama-index-integrations/vector_stores/llama-index-vector-stores-epsilla/llama_index/vector_stores/epsilla/base.py b/llama-index-integrations/vector_stores/llama-index-vector-stores-epsilla/llama_index/vector_stores/epsilla/base.py
index f6a2db3a3097f3be2afdb2c2f9e194bf699c55f8..49b9e8e16691e7fcdf9cb8c9cfdb1e7c1f7c1b73 100644
--- a/llama-index-integrations/vector_stores/llama-index-vector-stores-epsilla/llama_index/vector_stores/epsilla/base.py
+++ b/llama-index-integrations/vector_stores/llama-index-vector-stores-epsilla/llama_index/vector_stores/epsilla/base.py
@@ -1,4 +1,5 @@
 """Epsilla vector store."""
+
 import logging
 from typing import Any, List, Optional
 
@@ -52,6 +53,17 @@ class EpsillaVectorStore(VectorStore):
 
     Returns:
         EpsillaVectorStore: Vectorstore that supports add, delete, and query.
+
+    Examples:
+        `pip install llama-index-vector-stores-epsilla`
+
+        ```python
+        from llama_index.vector_stores.epsilla import EpsillaVectorStore
+        from pyepsilla import vectordb
+
+        client = vectordb.Client()
+        vector_store = EpsillaVectorStore(client=client, db_path="/tmp/llamastore")
+        ```
     """
 
     stores_text = True
diff --git a/llama-index-integrations/vector_stores/llama-index-vector-stores-faiss/llama_index/vector_stores/faiss/base.py b/llama-index-integrations/vector_stores/llama-index-vector-stores-faiss/llama_index/vector_stores/faiss/base.py
index 4616e2463366cd386dcfb7ba11cc616d5a69f890..b43f53cdad9d29cf97cb6a2b4e59e0626b04a0bf 100644
--- a/llama-index-integrations/vector_stores/llama-index-vector-stores-faiss/llama_index/vector_stores/faiss/base.py
+++ b/llama-index-integrations/vector_stores/llama-index-vector-stores-faiss/llama_index/vector_stores/faiss/base.py
@@ -40,6 +40,19 @@ class FaissVectorStore(BasePydanticVectorStore):
     Args:
         faiss_index (faiss.Index): Faiss index instance
 
+    Examples:
+        `pip install llama-index-vector-stores-faiss faiss-cpu`
+
+        ```python
+        from llama_index.vector_stores.faiss import FaissVectorStore
+        import faiss
+
+        # create a faiss index
+        d = 1536  # dimension
+        faiss_index = faiss.IndexFlatL2(d)
+
+        vector_store = FaissVectorStore(faiss_index=faiss_index)
+        ```
     """
 
     stores_text: bool = False
diff --git a/llama-index-integrations/vector_stores/llama-index-vector-stores-google/llama_index/vector_stores/google/base.py b/llama-index-integrations/vector_stores/llama-index-vector-stores-google/llama_index/vector_stores/google/base.py
index d0fba71f20868b3d93853745831d99c533cf3a1a..ad0d7ab35526af4dd03827b5c16a2f6acabd9606 100644
--- a/llama-index-integrations/vector_stores/llama-index-vector-stores-google/llama_index/vector_stores/google/base.py
+++ b/llama-index-integrations/vector_stores/llama-index-vector-stores-google/llama_index/vector_stores/google/base.py
@@ -97,7 +97,7 @@ class GoogleVectorStore(BasePydanticVectorStore):
 
     Currently, it computes the embedding vectors on the server side.
 
-    Example:
+    Examples:
         google_vector_store = GoogleVectorStore.from_corpus(
             corpus_id="my-corpus-id",
             include_metadata=True,
diff --git a/llama-index-integrations/vector_stores/llama-index-vector-stores-jaguar/llama_index/vector_stores/jaguar/base.py b/llama-index-integrations/vector_stores/llama-index-vector-stores-jaguar/llama_index/vector_stores/jaguar/base.py
index e3addc9664aede0ea20500423ac04ccc4068fc90..d3541bb15ffa16d0d6e34175e9cae2e3728bb148 100644
--- a/llama-index-integrations/vector_stores/llama-index-vector-stores-jaguar/llama_index/vector_stores/jaguar/base.py
+++ b/llama-index-integrations/vector_stores/llama-index-vector-stores-jaguar/llama_index/vector_stores/jaguar/base.py
@@ -33,17 +33,20 @@ class JaguarVectorStore(VectorStore):
     See http://www.jaguardb.com
     See http://github.com/fserv/jaguar-sdk
 
-    Example:
-       .. code-block:: python
-
-           vectorstore = JaguarVectorStore(
-               pod = 'vdb',
-               store = 'mystore',
-               vector_index = 'v',
-               vector_type = 'cosine_fraction_float',
-               vector_dimension = 1536,
-               url='http://192.168.8.88:8080/fwww/',
-           )
+    Examples:
+        `pip install llama-index-vector-stores-jaguar`
+
+        ```python
+        from llama_index.vector_stores.jaguar import JaguarVectorStore
+        vectorstore = JaguarVectorStore(
+            pod = 'vdb',
+            store = 'mystore',
+            vector_index = 'v',
+            vector_type = 'cosine_fraction_float',
+            vector_dimension = 1536,
+            url='http://192.168.8.88:8080/fwww/',
+        )
+        ```
     """
 
     stores_text: bool = True
diff --git a/llama-index-integrations/vector_stores/llama-index-vector-stores-lancedb/llama_index/vector_stores/lancedb/base.py b/llama-index-integrations/vector_stores/llama-index-vector-stores-lancedb/llama_index/vector_stores/lancedb/base.py
index 9da3db75ac52fbb3ee486d4f004b3fa1ee29a616..c96fa9e6230256baf558c829311053fdb1f53395 100644
--- a/llama-index-integrations/vector_stores/llama-index-vector-stores-lancedb/llama_index/vector_stores/lancedb/base.py
+++ b/llama-index-integrations/vector_stores/llama-index-vector-stores-lancedb/llama_index/vector_stores/lancedb/base.py
@@ -81,6 +81,15 @@ class LanceDBVectorStore(BasePydanticVectorStore):
     Returns:
         LanceDBVectorStore: VectorStore that supports creating LanceDB datasets and
             querying it.
+
+    Examples:
+        `pip install llama-index-vector-stores-lancedb`
+
+        ```python
+        from llama_index.vector_stores.lancedb import LanceDBVectorStore
+
+        vector_store = LanceDBVectorStore(uri="/tmp/lancedb")
+        ```
     """
 
     stores_text = True
diff --git a/llama-index-integrations/vector_stores/llama-index-vector-stores-lantern/llama_index/vector_stores/lantern/base.py b/llama-index-integrations/vector_stores/llama-index-vector-stores-lantern/llama_index/vector_stores/lantern/base.py
index 02bdda9846d60e7ee4df1ae33477b829854383ef..a6e06a97f1c47ab5c03c87b926cda6fc35fda8cc 100644
--- a/llama-index-integrations/vector_stores/llama-index-vector-stores-lantern/llama_index/vector_stores/lantern/base.py
+++ b/llama-index-integrations/vector_stores/llama-index-vector-stores-lantern/llama_index/vector_stores/lantern/base.py
@@ -125,6 +125,36 @@ def get_data_model(
 
 
 class LanternVectorStore(BasePydanticVectorStore):
+    """Latern vector store.
+
+    Examples:
+        `pip install llama-index-vector-stores-lantern`
+
+        ```python
+        from llama_index.vector_stores.lantern import LanternVectorStore
+
+        # Set up connection details
+        connection_string = "postgresql://postgres:postgres@localhost:5432"
+        db_name = "postgres"
+        url = make_url(connection_string)
+
+        # Create an instance of LanternVectorStore
+        vector_store = LanternVectorStore.from_params(
+            database=db_name,
+            host=url.host,
+            password=url.password,
+            port=url.port,
+            user=url.username,
+            table_name="your_table_name",
+            embed_dim=1536,  # openai embedding dimension
+            m=16,  # HNSW M parameter
+            ef_construction=128,  # HNSW ef construction parameter
+            ef=64,  # HNSW ef search parameter
+        )
+        ```
+
+    """
+
     from sqlalchemy.sql.selectable import Select
 
     stores_text = True
diff --git a/llama-index-integrations/vector_stores/llama-index-vector-stores-metal/llama_index/vector_stores/metal/base.py b/llama-index-integrations/vector_stores/llama-index-vector-stores-metal/llama_index/vector_stores/metal/base.py
index 33aaf7ad00a20b41b9bde51a4a577a658e7b9f44..e0e5710c354b0c132a5e6488d4aba4e5e78afc38 100644
--- a/llama-index-integrations/vector_stores/llama-index-vector-stores-metal/llama_index/vector_stores/metal/base.py
+++ b/llama-index-integrations/vector_stores/llama-index-vector-stores-metal/llama_index/vector_stores/metal/base.py
@@ -30,6 +30,28 @@ def _to_metal_filters(standard_filters: MetadataFilters) -> list:
 
 
 class MetalVectorStore(VectorStore):
+    """Metal Vector Store.
+
+    Examples:
+        `pip install llama-index-vector-stores-metal`
+
+        ```python
+        from llama_index.vector_stores.metal import MetalVectorStore
+
+        # Sign up for Metal and generate API key and client ID
+        api_key = "your_api_key_here"
+        client_id = "your_client_id_here"
+        index_id = "your_index_id_here"
+
+        # Initialize Metal Vector Store
+        vector_store = MetalVectorStore(
+            api_key=api_key,
+            client_id=client_id,
+            index_id=index_id,
+        )
+        ```
+    """
+
     def __init__(
         self,
         api_key: str,
diff --git a/llama-index-integrations/vector_stores/llama-index-vector-stores-milvus/llama_index/vector_stores/milvus/base.py b/llama-index-integrations/vector_stores/llama-index-vector-stores-milvus/llama_index/vector_stores/milvus/base.py
index 1dad8078ab442e90cad7bd84766ef28b14458278..0c3cb197aaaa747d5ab9fbafb77ff725bcda7692 100644
--- a/llama-index-integrations/vector_stores/llama-index-vector-stores-milvus/llama_index/vector_stores/milvus/base.py
+++ b/llama-index-integrations/vector_stores/llama-index-vector-stores-milvus/llama_index/vector_stores/milvus/base.py
@@ -3,6 +3,7 @@
 An index that is built within Milvus.
 
 """
+
 import logging
 from typing import Any, Dict, List, Optional, Union
 
@@ -83,6 +84,22 @@ class MilvusVectorStore(BasePydanticVectorStore):
 
     Returns:
         MilvusVectorstore: Vectorstore that supports add, delete, and query.
+
+    Examples:
+        `pip install llama-index-vector-stores-milvus`
+
+        ```python
+        from llama_index.vector_stores.milvus import MilvusVectorStore
+
+        # Setup MilvusVectorStore
+        vector_store = MilvusVectorStore(
+            dim=1536,
+            collection_name="your_collection_name",
+            uri="http://milvus_address:port",
+            token="your_milvus_token_here",
+            overwrite=True
+        )
+        ```
     """
 
     stores_text: bool = True
diff --git a/llama-index-integrations/vector_stores/llama-index-vector-stores-mongodb/llama_index/vector_stores/mongodb/base.py b/llama-index-integrations/vector_stores/llama-index-vector-stores-mongodb/llama_index/vector_stores/mongodb/base.py
index c883a3e39ae68f5cef9e45f5a89964907340f2fb..f4fb685b08536bf4fe3bbf312d9f4c8f48f4dae2 100644
--- a/llama-index-integrations/vector_stores/llama-index-vector-stores-mongodb/llama_index/vector_stores/mongodb/base.py
+++ b/llama-index-integrations/vector_stores/llama-index-vector-stores-mongodb/llama_index/vector_stores/mongodb/base.py
@@ -44,6 +44,45 @@ class MongoDBAtlasVectorSearch(BasePydanticVectorStore):
     - a connection string associated with a MongoDB Atlas Cluster
     that has an Atlas Vector Search index
 
+    To get started head over to the [Atlas quick start](https://www.mongodb.com/docs/atlas/getting-started/).
+
+    Once your store is created, be sure to enable indexing in the Atlas GUI.
+
+    Please refer to the [documentation](https://www.mongodb.com/docs/atlas/atlas-vector-search/create-index/)
+    to get more details on how to define an Atlas Vector Search index. You can name the index {ATLAS_VECTOR_SEARCH_INDEX_NAME}
+    and create the index on the namespace {DB_NAME}.{COLLECTION_NAME}.
+    Finally, write the following definition in the JSON editor on MongoDB Atlas:
+
+    ```
+    {
+        "name": "index_name",
+        "type": "vectorSearch",
+        "fields":[
+            {
+            "type": "vector",
+            "path": "embedding",
+            "numDimensions": 1536,
+            "similarity": "cosine"
+            }
+        ]
+    }
+    ```
+
+
+    Examples:
+        `pip install llama-index-vector-stores-mongodb`
+
+        ```python
+        import pymongo
+        from llama_index.vector_stores.mongodb import MongoDBAtlasVectorSearch
+
+        # Ensure you have the MongoDB URI with appropriate credentials
+        mongo_uri = "mongodb+srv://<username>:<password>@<host>?retryWrites=true&w=majority"
+        mongodb_client = pymongo.MongoClient(mongo_uri)
+
+        # Create an instance of MongoDBAtlasVectorSearch
+        vector_store = MongoDBAtlasVectorSearch(mongodb_client)
+        ```
     """
 
     stores_text: bool = True
diff --git a/llama-index-integrations/vector_stores/llama-index-vector-stores-myscale/llama_index/vector_stores/myscale/base.py b/llama-index-integrations/vector_stores/llama-index-vector-stores-myscale/llama_index/vector_stores/myscale/base.py
index c4b126eb9dd5c9632a9fa3328d0eeae519fc3b05..e31d30bb42838845cf4f00db6a21c42d7b414d50 100644
--- a/llama-index-integrations/vector_stores/llama-index-vector-stores-myscale/llama_index/vector_stores/myscale/base.py
+++ b/llama-index-integrations/vector_stores/llama-index-vector-stores-myscale/llama_index/vector_stores/myscale/base.py
@@ -3,6 +3,7 @@
 An index that is built on top of an existing MyScale cluster.
 
 """
+
 import json
 import logging
 from typing import Any, Dict, List, Optional, cast
@@ -57,6 +58,24 @@ class MyScaleVectorStore(VectorStore):
             Defaults to None.
         embed_dims (embed_dims, optional): Embedding dimensions. Defaults to None.
 
+    Examples:
+        `pip install llama-index-vector-stores-myscale`
+
+        ```python
+        from llama_index.vector_stores.myscale import MyScaleVectorStore
+        import clickhouse_connect
+
+        # initialize client
+        client = clickhouse_connect.get_client(
+            host="YOUR_CLUSTER_HOST",
+            port=8443,
+            username="YOUR_USERNAME",
+            password="YOUR_CLUSTER_PASSWORD",
+        )
+
+        vector_store = MyScaleVectorStore(myscale_client=client)
+        ```
+
     """
 
     stores_text: bool = True
diff --git a/llama-index-integrations/vector_stores/llama-index-vector-stores-neo4jvector/llama_index/vector_stores/neo4jvector/base.py b/llama-index-integrations/vector_stores/llama-index-vector-stores-neo4jvector/llama_index/vector_stores/neo4jvector/base.py
index 9154902b2dd71878abc82d0c6735efe6d453f741..d022e47451e33e5ba2fb653ded4aeb5f75c0cc62 100644
--- a/llama-index-integrations/vector_stores/llama-index-vector-stores-neo4jvector/llama_index/vector_stores/neo4jvector/base.py
+++ b/llama-index-integrations/vector_stores/llama-index-vector-stores-neo4jvector/llama_index/vector_stores/neo4jvector/base.py
@@ -101,6 +101,24 @@ def remove_lucene_chars(text: Optional[str]) -> Optional[str]:
 
 
 class Neo4jVectorStore(VectorStore):
+    """Neo4j Vector Store.
+
+    Examples:
+        `pip install llama-index-vector-stores-neo4jvector`
+
+
+        ```python
+        from llama_index.vector_stores.neo4jvector import Neo4jVectorStore
+
+        username = "neo4j"
+        password = "pleaseletmein"
+        url = "bolt://localhost:7687"
+        embed_dim = 1536
+
+        neo4j_vector = Neo4jVectorStore(username, password, url, embed_dim)
+        ```
+    """
+
     stores_text: bool = True
     flat_metadata = True
 
diff --git a/llama-index-integrations/vector_stores/llama-index-vector-stores-opensearch/llama_index/vector_stores/opensearch/base.py b/llama-index-integrations/vector_stores/llama-index-vector-stores-opensearch/llama_index/vector_stores/opensearch/base.py
index 3350d29054943be01980a88cc17633aaee4e8331..6ef745d06a62017e8b2a04d619d5f374b8abfc94 100644
--- a/llama-index-integrations/vector_stores/llama-index-vector-stores-opensearch/llama_index/vector_stores/opensearch/base.py
+++ b/llama-index-integrations/vector_stores/llama-index-vector-stores-opensearch/llama_index/vector_stores/opensearch/base.py
@@ -443,6 +443,35 @@ class OpensearchVectorStore(BasePydanticVectorStore):
     Args:
         client (OpensearchVectorClient): Vector index client to use
             for data insertion/querying.
+
+    Examples:
+        `pip install llama-index-vector-stores-opensearch`
+
+        ```python
+        from llama_index.vector_stores.opensearch import (
+            OpensearchVectorStore,
+            OpensearchVectorClient,
+        )
+
+        # http endpoint for your cluster (opensearch required for vector index usage)
+        endpoint = "http://localhost:9200"
+        # index to demonstrate the VectorStore impl
+        idx = "gpt-index-demo"
+
+        # OpensearchVectorClient stores text in this field by default
+        text_field = "content"
+        # OpensearchVectorClient stores embeddings in this field by default
+        embedding_field = "embedding"
+
+        # OpensearchVectorClient encapsulates logic for a
+        # single opensearch index with vector search enabled
+        client = OpensearchVectorClient(
+            endpoint, idx, 1536, embedding_field=embedding_field, text_field=text_field
+        )
+
+        # initialize vector store
+        vector_store = OpensearchVectorStore(client)
+        ```
     """
 
     stores_text: bool = True
diff --git a/llama-index-integrations/vector_stores/llama-index-vector-stores-pgvecto-rs/llama_index/vector_stores/pgvecto_rs/base.py b/llama-index-integrations/vector_stores/llama-index-vector-stores-pgvecto-rs/llama_index/vector_stores/pgvecto_rs/base.py
index 5c1993462619bd3dc2615d593eb8338ef100179d..8add8ecf2787c6f3133db0d1f66d2be32c944e6a 100644
--- a/llama-index-integrations/vector_stores/llama-index-vector-stores-pgvecto-rs/llama_index/vector_stores/pgvecto_rs/base.py
+++ b/llama-index-integrations/vector_stores/llama-index-vector-stores-pgvecto-rs/llama_index/vector_stores/pgvecto_rs/base.py
@@ -23,6 +23,37 @@ import_err_msg = (
 
 
 class PGVectoRsStore(BasePydanticVectorStore):
+    """PGVectoRs Vector Store.
+
+    Examples:
+        `pip install llama-index-vector-stores-pgvecto-rs`
+
+        ```python
+        from llama_index.vector_stores.pgvecto_rs import PGVectoRsStore
+
+        # Setup PGVectoRs client
+        from pgvecto_rs.sdk import PGVectoRs
+        import os
+
+        URL = "postgresql+psycopg://{username}:{password}@{host}:{port}/{db_name}".format(
+            port=os.getenv("DB_PORT", "5432"),
+            host=os.getenv("DB_HOST", "localhost"),
+            username=os.getenv("DB_USER", "postgres"),
+            password=os.getenv("DB_PASS", "mysecretpassword"),
+            db_name=os.getenv("DB_NAME", "postgres"),
+        )
+
+        client = PGVectoRs(
+            db_url=URL,
+            collection_name="example",
+            dimension=1536,  # Using OpenAI’s text-embedding-ada-002
+        )
+
+        # Initialize PGVectoRsStore
+        vector_store = PGVectoRsStore(client=client)
+        ```
+    """
+
     stores_text = True
 
     _client: "PGVectoRs" = PrivateAttr()
@@ -63,11 +94,13 @@ class PGVectoRsStore(BasePydanticVectorStore):
         results = self._client.search(
             embedding=query.query_embedding,
             top_k=query.similarity_top_k,
-            filter=meta_contains(
-                {pair.key: pair.value for pair in query.filters.legacy_filters()}
-            )
-            if query.filters is not None
-            else None,
+            filter=(
+                meta_contains(
+                    {pair.key: pair.value for pair in query.filters.legacy_filters()}
+                )
+                if query.filters is not None
+                else None
+            ),
         )
 
         nodes = [
diff --git a/llama-index-integrations/vector_stores/llama-index-vector-stores-pinecone/llama_index/vector_stores/pinecone/base.py b/llama-index-integrations/vector_stores/llama-index-vector-stores-pinecone/llama_index/vector_stores/pinecone/base.py
index 85f6808d0b7e1325be6cf1e26db43c6cedcc738c..3e91218f4e978062407c58f9f14d1b6ec76599e5 100644
--- a/llama-index-integrations/vector_stores/llama-index-vector-stores-pinecone/llama_index/vector_stores/pinecone/base.py
+++ b/llama-index-integrations/vector_stores/llama-index-vector-stores-pinecone/llama_index/vector_stores/pinecone/base.py
@@ -4,6 +4,7 @@ Pinecone Vector store index.
 An index that is built on top of an existing vector store.
 
 """
+
 import logging
 from collections import Counter
 from functools import partial
@@ -178,6 +179,34 @@ class PineconeVectorStore(BasePydanticVectorStore):
             Defaults to None. If not None, then this vector will be used as the query
             vector if the query is empty.
 
+    Examples:
+        `pip install llama-index-vector-stores-pinecone`
+
+        ```python
+        import os
+        from llama_index.vector_stores.pinecone import PineconeVectorStore
+        from pinecone import Pinecone, ServerlessSpec
+
+        # Set up Pinecone API key
+        os.environ["PINECONE_API_KEY"] = "<Your Pinecone API key, from app.pinecone.io>"
+        api_key = os.environ["PINECONE_API_KEY"]
+
+        # Create Pinecone Vector Store
+        pc = Pinecone(api_key=api_key)
+
+        pc.create_index(
+            name="quickstart",
+            dimension=1536,
+            metric="dotproduct",
+            spec=ServerlessSpec(cloud="aws", region="us-west-2"),
+        )
+
+        pinecone_index = pc.Index("quickstart")
+
+        vector_store = PineconeVectorStore(
+            pinecone_index=pinecone_index,
+        )
+        ```
     """
 
     stores_text: bool = True
diff --git a/llama-index-integrations/vector_stores/llama-index-vector-stores-postgres/llama_index/vector_stores/postgres/base.py b/llama-index-integrations/vector_stores/llama-index-vector-stores-postgres/llama_index/vector_stores/postgres/base.py
index 3408ed9234a4d5b0f932d01064e83d948d0bb44d..faa474aad5c914370c00bf2e1ae8fa39dc3e719c 100644
--- a/llama-index-integrations/vector_stores/llama-index-vector-stores-postgres/llama_index/vector_stores/postgres/base.py
+++ b/llama-index-integrations/vector_stores/llama-index-vector-stores-postgres/llama_index/vector_stores/postgres/base.py
@@ -109,6 +109,27 @@ def get_data_model(
 
 
 class PGVectorStore(BasePydanticVectorStore):
+    """Postgres Vector Store.
+
+    Examples:
+        `pip install llama-index-vector-stores-postgres`
+
+        ```python
+        from llama_index.vector_stores.postgres import PGVectorStore
+
+        # Create PGVectorStore instance
+        vector_store = PGVectorStore.from_params(
+            database="vector_db",
+            host="localhost",
+            password="password",
+            port=5432,
+            user="postgres",
+            table_name="paul_graham_essay",
+            embed_dim=1536  # openai embedding dimension
+        )
+        ```
+    """
+
     from sqlalchemy.sql.selectable import Select
 
     stores_text = True
diff --git a/llama-index-integrations/vector_stores/llama-index-vector-stores-qdrant/llama_index/vector_stores/qdrant/base.py b/llama-index-integrations/vector_stores/llama-index-vector-stores-qdrant/llama_index/vector_stores/qdrant/base.py
index 1ef137ae3b874e3286d06edacf15ecf07c0a44a4..57409c513b9e52e7986c99035d54cde9666dc404 100644
--- a/llama-index-integrations/vector_stores/llama-index-vector-stores-qdrant/llama_index/vector_stores/qdrant/base.py
+++ b/llama-index-integrations/vector_stores/llama-index-vector-stores-qdrant/llama_index/vector_stores/qdrant/base.py
@@ -74,6 +74,20 @@ class QdrantVectorStore(BasePydanticVectorStore):
         sparse_doc_fn (Optional[SparseEncoderCallable]): function to encode sparse vectors
         sparse_query_fn (Optional[SparseEncoderCallable]): function to encode sparse queries
         hybrid_fusion_fn (Optional[HybridFusionCallable]): function to fuse hybrid search results
+
+    Examples:
+        `pip install llama-index-vector-stores-qdrant`
+
+        ```python
+        import qdrant_client
+        from llama_index.vector_stores.qdrant import QdrantVectorStore
+
+        client = qdrant_client.QdrantClient()
+
+        vector_store = QdrantVectorStore(
+            collection_name="example_collection", client=client
+        )
+        ```
     """
 
     stores_text: bool = True
diff --git a/llama-index-integrations/vector_stores/llama-index-vector-stores-redis/llama_index/vector_stores/redis/base.py b/llama-index-integrations/vector_stores/llama-index-vector-stores-redis/llama_index/vector_stores/redis/base.py
index 63c06a7e4f15a29b0625dec9f511eacb53f1f934..373cdee19248ed85feef86d9d89eeb7b59316c0d 100644
--- a/llama-index-integrations/vector_stores/llama-index-vector-stores-redis/llama_index/vector_stores/redis/base.py
+++ b/llama-index-integrations/vector_stores/llama-index-vector-stores-redis/llama_index/vector_stores/redis/base.py
@@ -101,15 +101,25 @@ class RedisVectorStore(BasePydanticVectorStore):
             ValueError: If RediSearch is not installed
 
         Examples:
-            >>> from llama_index.core.vector_stores.redis import RedisVectorStore
-            >>> # Create a RedisVectorStore
-            >>> vector_store = RedisVectorStore(
-            >>>     index_name="my_index",
-            >>>     index_prefix="llama_index",
-            >>>     index_args={"algorithm": "HNSW", "m": 16, "ef_construction": 200,
-                "distance_metric": "cosine"},
-            >>>     redis_url="redis://localhost:6379/",
-            >>>     overwrite=True)
+            `pip install llama-index-vector-stores-redis`
+
+            ```python
+            from llama_index.core.vector_stores.redis import RedisVectorStore
+
+            # Create a RedisVectorStore
+            vector_store = RedisVectorStore(
+                index_name="my_index",
+                index_prefix="llama_index",
+                index_args={
+                    "algorithm": "HNSW",
+                    "m": 16,
+                    "ef_construction": 200,
+                    "distance_metric": "cosine"
+                },
+                redis_url="redis://localhost:6379/",
+                overwrite=True
+            )
+            ```
         """
         try:
             # connect to redis from url
diff --git a/llama-index-integrations/vector_stores/llama-index-vector-stores-rocksetdb/llama_index/vector_stores/rocksetdb/base.py b/llama-index-integrations/vector_stores/llama-index-vector-stores-rocksetdb/llama_index/vector_stores/rocksetdb/base.py
index d30ee57c9f350fc63125b1286d9b55f4c29052a8..e976061c61ccb12b465f1c5b94229801d9bb0a54 100644
--- a/llama-index-integrations/vector_stores/llama-index-vector-stores-rocksetdb/llama_index/vector_stores/rocksetdb/base.py
+++ b/llama-index-integrations/vector_stores/llama-index-vector-stores-rocksetdb/llama_index/vector_stores/rocksetdb/base.py
@@ -57,6 +57,26 @@ def _get_client(api_key: str | None, api_server: str | None, client: Any | None)
 
 
 class RocksetVectorStore(VectorStore):
+    """Rockset Vector Store.
+
+    Examples:
+        `pip install llama-index-vector-stores-rocksetdb`
+
+        ```python
+        from llama_index.vector_stores.rocksetdb import RocksetVectorStore
+
+        # Set up RocksetVectorStore with necessary configurations
+        vector_store = RocksetVectorStore(
+            collection="my_collection",
+            api_key="your_rockset_api_key",
+            api_server="https://api.use1a1.rockset.com",
+            embedding_col="my_embedding",
+            metadata_col="node",
+            distance_func=RocksetVectorStore.DistanceFunc.DOT_PRODUCT
+        )
+        ```
+    """
+
     stores_text: bool = True
     is_embedding_query: bool = True
     flat_metadata: bool = False
@@ -221,11 +241,11 @@ class RocksetVectorStore(VectorStore):
                 LIMIT
                     {query.similarity_top_k}
             """,
-            params={
-                filter.key: filter.value for filter in query.filters.legacy_filters()
-            }
-            if query.filters
-            else {},
+            params=(
+                {filter.key: filter.value for filter in query.filters.legacy_filters()}
+                if query.filters
+                else {}
+            ),
         )
 
         similarities: List[float] | None = [] if query.query_embedding else None
diff --git a/llama-index-integrations/vector_stores/llama-index-vector-stores-singlestoredb/llama_index/vector_stores/singlestoredb/base.py b/llama-index-integrations/vector_stores/llama-index-vector-stores-singlestoredb/llama_index/vector_stores/singlestoredb/base.py
index 3f21348295376f91008d5151f5eb81955e1e1501..ca3de111115d17d30453265d6d384da1e64eec85 100644
--- a/llama-index-integrations/vector_stores/llama-index-vector-stores-singlestoredb/llama_index/vector_stores/singlestoredb/base.py
+++ b/llama-index-integrations/vector_stores/llama-index-vector-stores-singlestoredb/llama_index/vector_stores/singlestoredb/base.py
@@ -56,6 +56,25 @@ class SingleStoreVectorStore(VectorStore):
             connections, 80 for HTTP connections, and 443 for HTTPS connections.
         database (str, optional): Database name.
 
+    Examples:
+        `pip install llama-index-vector-stores-singlestoredb`
+
+        ```python
+        from llama_index.vector_stores.singlestoredb import SingleStoreVectorStore
+        import os
+
+        # can set the singlestore db url in env
+        # or pass it in as an argument to the SingleStoreVectorStore constructor
+        os.environ["SINGLESTOREDB_URL"] = "PLACEHOLDER URL"
+        vector_store = SingleStoreVectorStore(
+            table_name="embeddings",
+            content_field="content",
+            metadata_field="metadata",
+            vector_field="vector",
+            timeout=30,
+        )
+        ```
+
     """
 
     stores_text: bool = True
diff --git a/llama-index-integrations/vector_stores/llama-index-vector-stores-supabase/llama_index/vector_stores/supabase/base.py b/llama-index-integrations/vector_stores/llama-index-vector-stores-supabase/llama_index/vector_stores/supabase/base.py
index c4e657850274d01807a070887a9137271248f51c..d3607e5fc14060d4e4c8efefeb1874931791c02c 100644
--- a/llama-index-integrations/vector_stores/llama-index-vector-stores-supabase/llama_index/vector_stores/supabase/base.py
+++ b/llama-index-integrations/vector_stores/llama-index-vector-stores-supabase/llama_index/vector_stores/supabase/base.py
@@ -35,9 +35,23 @@ class SupabaseVectorStore(BasePydanticVectorStore):
     Args:
         postgres_connection_string (str):
             postgres connection string
-
         collection_name (str):
             name of the collection to store the embeddings in
+        dimension (int, optional):
+            dimension of the embeddings. Defaults to 1536.
+
+    Examples:
+        `pip install llama-index-vector-stores-supabase`
+
+        ```python
+        from llama_index.vector_stores.supabase import SupabaseVectorStore
+
+        # Set up SupabaseVectorStore
+        vector_store = SupabaseVectorStore(
+            postgres_connection_string="postgresql://<user>:<password>@<host>:<port>/<db_name>",
+            collection_name="base_demo",
+        )
+        ```
 
     """
 
diff --git a/llama-index-integrations/vector_stores/llama-index-vector-stores-tair/llama_index/vector_stores/tair/base.py b/llama-index-integrations/vector_stores/llama-index-vector-stores-tair/llama_index/vector_stores/tair/base.py
index 97c498578b7a78fbdc595188de4139ce61bec81a..44179506405a235ef986d60d125d46e8c9c8a9c9 100644
--- a/llama-index-integrations/vector_stores/llama-index-vector-stores-tair/llama_index/vector_stores/tair/base.py
+++ b/llama-index-integrations/vector_stores/llama-index-vector-stores-tair/llama_index/vector_stores/tair/base.py
@@ -2,6 +2,7 @@
 
 An index that is built on top of Alibaba Cloud's Tair database.
 """
+
 import logging
 from typing import Any, Dict, List, Optional
 
@@ -36,6 +37,48 @@ def _to_filter_expr(filters: MetadataFilters) -> str:
 
 
 class TairVectorStore(VectorStore):
+    """Initialize TairVectorStore.
+
+    Two index types are available: FLAT & HNSW.
+
+    index args for HNSW:
+        - ef_construct
+        - M
+        - ef_search
+
+    Detailed info for these arguments can be found here:
+    https://www.alibabacloud.com/help/en/tair/latest/tairvector#section-c76-ull-5mk
+
+    Args:
+        index_name (str): Name of the index.
+        index_type (str): Type of the index. Defaults to 'HNSW'.
+        index_args (Dict[str, Any]): Arguments for the index. Defaults to None.
+        tair_url (str): URL for the Tair instance.
+        overwrite (bool): Whether to overwrite the index if it already exists.
+            Defaults to False.
+        kwargs (Any): Additional arguments to pass to the Tair client.
+
+    Raises:
+        ValueError: If tair-py is not installed
+        ValueError: If failed to connect to Tair instance
+
+    Examples:
+        `pip install llama-index-vector-stores-tair`
+
+        ```python
+        from llama_index.core.vector_stores.tair import TairVectorStore
+
+        # Create a TairVectorStore
+        vector_store = TairVectorStore(
+            tair_url="redis://{username}:{password}@r-bp****************.redis.rds.aliyuncs.com:{port}",
+            index_name="my_index",
+            index_type="HNSW",
+            index_args={"M": 16, "ef_construct": 200},
+            overwrite=True
+        )
+        ```
+    """
+
     stores_text = True
     stores_node = True
     flat_metadata = False
@@ -49,43 +92,6 @@ class TairVectorStore(VectorStore):
         overwrite: bool = False,
         **kwargs: Any,
     ) -> None:
-        """Initialize TairVectorStore.
-
-        Two index types are available: FLAT & HNSW.
-
-        index args for HNSW:
-            - ef_construct
-            - M
-            - ef_search
-
-        Detailed info for these arguments can be found here:
-        https://www.alibabacloud.com/help/en/tair/latest/tairvector#section-c76-ull-5mk
-
-        Args:
-            index_name (str): Name of the index.
-            index_type (str): Type of the index. Defaults to 'HNSW'.
-            index_args (Dict[str, Any]): Arguments for the index. Defaults to None.
-            tair_url (str): URL for the Tair instance.
-            overwrite (bool): Whether to overwrite the index if it already exists.
-                Defaults to False.
-            kwargs (Any): Additional arguments to pass to the Tair client.
-
-        Raises:
-            ValueError: If tair-py is not installed
-            ValueError: If failed to connect to Tair instance
-
-        Examples:
-            >>> from llama_index.core.vector_stores.tair import TairVectorStore
-            >>> # Create a TairVectorStore
-            >>> vector_store = TairVectorStore(
-            >>>     tair_url="redis://{username}:{password}@r-bp****************.\
-                redis.rds.aliyuncs.com:{port}",
-            >>>     index_name="my_index",
-            >>>     index_type="HNSW",
-            >>>     index_args={"M": 16, "ef_construct": 200},
-            >>>     overwrite=True)
-
-        """
         try:
             self._tair_client = Tair.from_url(tair_url, **kwargs)
         except ValueError as e:
diff --git a/llama-index-integrations/vector_stores/llama-index-vector-stores-tencentvectordb/llama_index/vector_stores/tencentvectordb/__init__.py b/llama-index-integrations/vector_stores/llama-index-vector-stores-tencentvectordb/llama_index/vector_stores/tencentvectordb/__init__.py
index 441d9d7c4941c4276c74d246d9c448d201927e75..42d16095a8e081472b49f5686df44a6816732a4b 100644
--- a/llama-index-integrations/vector_stores/llama-index-vector-stores-tencentvectordb/llama_index/vector_stores/tencentvectordb/__init__.py
+++ b/llama-index-integrations/vector_stores/llama-index-vector-stores-tencentvectordb/llama_index/vector_stores/tencentvectordb/__init__.py
@@ -1,3 +1,6 @@
-from llama_index.vector_stores.tencentvectordb.base import TencentVectorDB
+from llama_index.vector_stores.tencentvectordb.base import (
+    TencentVectorDB,
+    CollectionParams,
+)
 
-__all__ = ["TencentVectorDB"]
+__all__ = ["TencentVectorDB", "CollectionParams"]
diff --git a/llama-index-integrations/vector_stores/llama-index-vector-stores-tencentvectordb/llama_index/vector_stores/tencentvectordb/base.py b/llama-index-integrations/vector_stores/llama-index-vector-stores-tencentvectordb/llama_index/vector_stores/tencentvectordb/base.py
index b17376cf17485163e6488b1a2429a481c888e786..f593d96f13812f9a3602c1c0e31164563dfa2b7b 100644
--- a/llama-index-integrations/vector_stores/llama-index-vector-stores-tencentvectordb/llama_index/vector_stores/tencentvectordb/base.py
+++ b/llama-index-integrations/vector_stores/llama-index-vector-stores-tencentvectordb/llama_index/vector_stores/tencentvectordb/base.py
@@ -3,6 +3,7 @@
 An index that is built with Tencent Vector Database.
 
 """
+
 import json
 from typing import Any, Dict, List, Optional
 
@@ -157,6 +158,20 @@ class TencentVectorDB(VectorStore):
         key (Optional[str]): The Api-Key for Tencent vector database
         collection_params (Optional[CollectionParams]): The collection parameters for vector database
 
+    Examples:
+        `pip install llama-index-vector-stores-tencentvectordb`
+
+        ```python
+        from llama_index.vector_stores.tencentvectordb import TencentVectorDB, CollectionParams
+
+        # Setup
+        url = "http://10.0.X.X"
+        key = "eC4bLRy2va******************************"
+        collection_params = CollectionParams(dimension=1536, drop_exists=True)
+
+        # Create an instance of TencentVectorDB
+        vector_store = TencentVectorDB(url=url, key=key, collection_params=collection_params)
+        ```
     """
 
     stores_text: bool = True
diff --git a/llama-index-integrations/vector_stores/llama-index-vector-stores-tencentvectordb/pyproject.toml b/llama-index-integrations/vector_stores/llama-index-vector-stores-tencentvectordb/pyproject.toml
index 15ffd05e8e21e94bd4a9a42684838c6472d78475..e6ecaf34567ecd64a65c86a1f8497606f6d7f4a5 100644
--- a/llama-index-integrations/vector_stores/llama-index-vector-stores-tencentvectordb/pyproject.toml
+++ b/llama-index-integrations/vector_stores/llama-index-vector-stores-tencentvectordb/pyproject.toml
@@ -27,7 +27,7 @@ exclude = ["**/BUILD"]
 license = "MIT"
 name = "llama-index-vector-stores-tencentvectordb"
 readme = "README.md"
-version = "0.1.2"
+version = "0.1.3"
 
 [tool.poetry.dependencies]
 python = ">=3.8.1,<4.0"
diff --git a/llama-index-integrations/vector_stores/llama-index-vector-stores-timescalevector/llama_index/vector_stores/timescalevector/base.py b/llama-index-integrations/vector_stores/llama-index-vector-stores-timescalevector/llama_index/vector_stores/timescalevector/base.py
index 3b9c46472644c464991bfa1ae4273ab45ad9e820..24d410b34153f9d7f6411b0195b85a3555e10a04 100644
--- a/llama-index-integrations/vector_stores/llama-index-vector-stores-timescalevector/llama_index/vector_stores/timescalevector/base.py
+++ b/llama-index-integrations/vector_stores/llama-index-vector-stores-timescalevector/llama_index/vector_stores/timescalevector/base.py
@@ -27,6 +27,26 @@ class IndexType(enum.Enum):
 
 
 class TimescaleVectorStore(VectorStore):
+    """Timescale vector store.
+
+    Examples:
+        `pip install llama-index-vector-stores-timescalevector`
+
+        ```python
+        from llama_index.vector_stores.timescalevector import TimescaleVectorStore
+
+        # Set up the Timescale service URL
+        TIMESCALE_SERVICE_URL = "postgres://tsdbadmin:<password>@<id>.tsdb.cloud.timescale.com:<port>/tsdb?sslmode=require"
+
+        # Create a TimescaleVectorStore instance
+        vector_store = TimescaleVectorStore.from_params(
+            service_url=TIMESCALE_SERVICE_URL,
+            table_name="your_table_name_here",
+            num_dimensions=1536,
+        )
+        ```
+    """
+
     stores_text = True
     flat_metadata = False
 
diff --git a/llama-index-integrations/vector_stores/llama-index-vector-stores-txtai/llama_index/vector_stores/txtai/base.py b/llama-index-integrations/vector_stores/llama-index-vector-stores-txtai/llama_index/vector_stores/txtai/base.py
index 221ca6716e3a85d416ca574d5e658011540c371d..3efa40699bc5a4533e262c44024fa82a92e21fef 100644
--- a/llama-index-integrations/vector_stores/llama-index-vector-stores-txtai/llama_index/vector_stores/txtai/base.py
+++ b/llama-index-integrations/vector_stores/llama-index-vector-stores-txtai/llama_index/vector_stores/txtai/base.py
@@ -40,14 +40,26 @@ IMPORT_ERROR_MSG = """
 class TxtaiVectorStore(BasePydanticVectorStore):
     """txtai Vector Store.
 
-    Embeddings are stored within a txtai index.
+        Embeddings are stored within a txtai index.
 
-    During query time, the index uses txtai to query for the top
-    k embeddings, and returns the corresponding indices.
+        During query time, the index uses txtai to query for the top
+        k embeddings, and returns the corresponding indices.
 
     Args:
-        txtai_index (txtai.ann.ANN): txtai index instance
+            txtai_index (txtai.ann.ANN): txtai index instance
 
+    Examples:
+            `pip install llama-index-vector-stores-txtai`
+
+            ```python
+            import txtai
+            from llama_index.vector_stores.txtai import TxtaiVectorStore
+
+            # Create txtai ann index
+            txtai_index = txtai.ann.ANNFactory.create({"backend": "numpy"})
+
+            vector_store = TxtaiVectorStore(txtai_index=txtai_index)
+    ```
     """
 
     stores_text: bool = False
diff --git a/llama-index-integrations/vector_stores/llama-index-vector-stores-typesense/llama_index/vector_stores/typesense/base.py b/llama-index-integrations/vector_stores/llama-index-vector-stores-typesense/llama_index/vector_stores/typesense/base.py
index e498a62c1e2f57ad526527130e8b90874e54668b..ed6e52f0bc5d7601df43089ca3a368010ed1b656 100644
--- a/llama-index-integrations/vector_stores/llama-index-vector-stores-typesense/llama_index/vector_stores/typesense/base.py
+++ b/llama-index-integrations/vector_stores/llama-index-vector-stores-typesense/llama_index/vector_stores/typesense/base.py
@@ -47,6 +47,25 @@ class TypesenseVectorStore(VectorStore):
         client (Any): Typesense client
         tokenizer (Optional[Callable[[str], List]]): tokenizer function.
 
+    Examples:
+        `pip install llama-index-vector-stores-typesense`
+
+        ```python
+        from llama_index.vector_stores.typesense import TypesenseVectorStore
+        from typesense import Client
+
+        # Sign up for Typesense and get your API key
+        typesense_client = Client(
+            {
+                "api_key": "your_api_key_here",
+                "nodes": [{"host": "localhost", "port": "8108", "protocol": "http"}],
+                "connection_timeout_seconds": 2,
+            }
+        )
+
+        # Create an instance of TypesenseVectorStore
+        vector_store = TypesenseVectorStore(typesense_client)
+        ```
     """
 
     stores_text: bool = True
diff --git a/llama-index-integrations/vector_stores/llama-index-vector-stores-upstash/llama_index/vector_stores/upstash/base.py b/llama-index-integrations/vector_stores/llama-index-vector-stores-upstash/llama_index/vector_stores/upstash/base.py
index e09addbfe54ca5a66d8a5ab6b3f4bfe5d0641118..5cfea6ae463ef88a5f3fdd27d661044927461d9a 100644
--- a/llama-index-integrations/vector_stores/llama-index-vector-stores-upstash/llama_index/vector_stores/upstash/base.py
+++ b/llama-index-integrations/vector_stores/llama-index-vector-stores-upstash/llama_index/vector_stores/upstash/base.py
@@ -87,8 +87,20 @@ def _to_upstash_filters(filters: MetadataFilters) -> str:
 
 
 class UpstashVectorStore(VectorStore):
-    """
-    Upstash Vector Store.
+    """Upstash Vector Store.
+
+    Examples:
+        `pip install llama-index-vector-stores-upstash`
+
+        ```python
+        from llama_index.vector_stores.upstash import UpstashVectorStore
+
+        # Create Upstash vector store
+        upstash_vector_store = UpstashVectorStore(
+            url="your_upstash_vector_url",
+            token="your_upstash_vector_token",
+        )
+        ```
     """
 
     stores_text: bool = True
diff --git a/llama-index-integrations/vector_stores/llama-index-vector-stores-weaviate/llama_index/vector_stores/weaviate/base.py b/llama-index-integrations/vector_stores/llama-index-vector-stores-weaviate/llama_index/vector_stores/weaviate/base.py
index d2d3a5387a6cc9e6188fbab42f1be75c03f68702..49b1f205d3534ed5936e6eb945d4a95a55460ad5 100644
--- a/llama-index-integrations/vector_stores/llama-index-vector-stores-weaviate/llama_index/vector_stores/weaviate/base.py
+++ b/llama-index-integrations/vector_stores/llama-index-vector-stores-weaviate/llama_index/vector_stores/weaviate/base.py
@@ -108,6 +108,25 @@ class WeaviateVectorStore(BasePydanticVectorStore):
             instance from `weaviate-client` package
         index_name (Optional[str]): name for Weaviate classes
 
+    Examples:
+        `pip install llama-index-vector-stores-weaviate`
+
+        ```python
+        import weaviate
+
+        resource_owner_config = weaviate.AuthClientPassword(
+            username="<username>",
+            password="<password>",
+        )
+        client = weaviate.Client(
+            "https://llama-test-ezjahb4m.weaviate.network",
+            auth_client_secret=resource_owner_config,
+        )
+
+        vector_store = WeaviateVectorStore(
+            weaviate_client=client, index_name="LlamaIndex"
+        )
+        ```
     """
 
     stores_text: bool = True
diff --git a/llama-index-integrations/vector_stores/llama-index-vector-stores-zep/llama_index/vector_stores/zep/base.py b/llama-index-integrations/vector_stores/llama-index-vector-stores-zep/llama_index/vector_stores/zep/base.py
index 9894b49730a6f87d888d4146062c12d2000f5e5e..17fdec9484dbd1bfc559e14c6be592582d11fb39 100644
--- a/llama-index-integrations/vector_stores/llama-index-vector-stores-zep/llama_index/vector_stores/zep/base.py
+++ b/llama-index-integrations/vector_stores/llama-index-vector-stores-zep/llama_index/vector_stores/zep/base.py
@@ -38,6 +38,20 @@ class ZepVectorStore(VectorStore):
             Defaults to None.
         is_auto_embedded (bool, optional): Whether the embeddings are auto-embedded.
             Defaults to False.
+
+    Examples:
+        `pip install llama-index-vector-stores-zep`
+
+        ```python
+        from llama_index.vector_stores.zep import ZepVectorStore
+
+        vector_store = ZepVectorStore(
+            api_url="<api_url>",
+            api_key="<api_key>",
+            collection_name="<unique_collection_name>",  # Can either be an existing collection or a new one
+            embedding_dimensions=1536,  # Optional, required if creating a new collection
+        )
+        ```
     """
 
     stores_text = True