From 3b913aa47baa8a0c74c733f2d2bed113da1c2b04 Mon Sep 17 00:00:00 2001
From: Jerry Liu <jerryjliu98@gmail.com>
Date: Mon, 12 Dec 2022 22:47:24 -0800
Subject: [PATCH] Add documentation (#96)

Co-authored-by: Jerry Liu <jerry@robustintelligence.com>
---
 README.md                                     |  62 ++++++---------
 docs/Makefile                                 |  20 +++++
 docs/_static/composability/diagram.png        | Bin 0 -> 31056 bytes
 docs/_static/composability/diagram_b0.png     | Bin 0 -> 14133 bytes
 docs/_static/composability/diagram_b1.png     | Bin 0 -> 30486 bytes
 docs/_static/composability/diagram_q1.png     | Bin 0 -> 40713 bytes
 docs/_static/composability/diagram_q2.png     | Bin 0 -> 55410 bytes
 docs/conf.py                                  |  50 ++++++++++++
 docs/getting_started/installation.md          |  20 +++++
 docs/getting_started/overview.rst             |   4 +
 docs/getting_started/starter_example.md       |  69 ++++++++++++++++
 docs/how_to/composability.md                  |  53 +++++++++++++
 docs/how_to/cost_analysis.md                  |  39 +++++++++
 docs/how_to/custom_llms.md                    |  43 ++++++++++
 docs/how_to/custom_prompts.md                 |  54 +++++++++++++
 docs/how_to/data_connectors.md                |  13 +++
 docs/how_to/embeddings.md                     |  27 +++++++
 docs/how_to/insert.md                         |   5 ++
 docs/how_to/overview.rst                      |   4 +
 docs/index.rst                                |  75 ++++++++++++++++++
 docs/make.bat                                 |  35 ++++++++
 docs/reference/example_notebooks.rst          |   8 ++
 docs/reference/indices.rst                    |  15 ++++
 docs/reference/indices/list.rst               |   9 +++
 docs/reference/indices/list_query.rst         |   7 ++
 docs/reference/indices/table.rst              |   8 ++
 docs/reference/indices/table_query.rst        |   7 ++
 docs/reference/indices/tree.rst               |   8 ++
 docs/reference/indices/tree_query.rst         |   7 ++
 docs/reference/llm_predictor.rst              |  10 +++
 docs/reference/overview.rst                   |   4 +
 docs/reference/prompts.rst                    |  70 ++++++++++++++++
 docs/reference/query.rst                      |  14 ++++
 docs/reference/readers.rst                    |   6 ++
 docs/requirements.txt                         |   3 +
 gpt_index/__init__.py                         |  13 +--
 gpt_index/indices/__init__.py                 |  17 +++-
 gpt_index/indices/base.py                     |  36 ++++++++-
 gpt_index/indices/keyword_table/__init__.py   |  13 ++-
 gpt_index/indices/keyword_table/base.py       |  23 +++++-
 gpt_index/indices/keyword_table/rake_base.py  |   6 +-
 .../indices/keyword_table/simple_base.py      |   6 +-
 gpt_index/indices/list/__init__.py            |   8 +-
 gpt_index/indices/list/base.py                |  25 +++++-
 .../indices/query/keyword_table/__init__.py   |  14 +++-
 .../indices/query/keyword_table/query.py      |  43 +++++++++-
 gpt_index/indices/query/list/__init__.py      |   7 +-
 .../indices/query/list/embedding_query.py     |  15 +++-
 gpt_index/indices/query/list/query.py         |  29 ++++++-
 gpt_index/indices/query/tree/__init__.py      |  12 ++-
 .../indices/query/tree/embedding_query.py     |  20 +++++
 gpt_index/indices/query/tree/leaf_query.py    |  18 +++++
 .../indices/query/tree/retrieve_query.py      |   8 ++
 gpt_index/indices/tree/__init__.py            |   9 ++-
 gpt_index/indices/tree/base.py                |  18 ++++-
 gpt_index/langchain_helpers/chain_wrapper.py  |  24 +++++-
 gpt_index/prompts/__init__.py                 |   6 +-
 gpt_index/readers/__init__.py                 |  26 +++++-
 gpt_index/readers/file.py                     |  13 ++-
 gpt_index/readers/mongo.py                    |  16 +++-
 gpt_index/readers/notion.py                   |  13 ++-
 gpt_index/readers/slack.py                    |  14 +++-
 gpt_index/readers/wikipedia.py                |   7 +-
 tests/indices/list/__init__.py                |   8 +-
 64 files changed, 1141 insertions(+), 75 deletions(-)
 create mode 100644 docs/Makefile
 create mode 100644 docs/_static/composability/diagram.png
 create mode 100644 docs/_static/composability/diagram_b0.png
 create mode 100644 docs/_static/composability/diagram_b1.png
 create mode 100644 docs/_static/composability/diagram_q1.png
 create mode 100644 docs/_static/composability/diagram_q2.png
 create mode 100644 docs/conf.py
 create mode 100644 docs/getting_started/installation.md
 create mode 100644 docs/getting_started/overview.rst
 create mode 100644 docs/getting_started/starter_example.md
 create mode 100644 docs/how_to/composability.md
 create mode 100644 docs/how_to/cost_analysis.md
 create mode 100644 docs/how_to/custom_llms.md
 create mode 100644 docs/how_to/custom_prompts.md
 create mode 100644 docs/how_to/data_connectors.md
 create mode 100644 docs/how_to/embeddings.md
 create mode 100644 docs/how_to/insert.md
 create mode 100644 docs/how_to/overview.rst
 create mode 100644 docs/index.rst
 create mode 100644 docs/make.bat
 create mode 100644 docs/reference/example_notebooks.rst
 create mode 100644 docs/reference/indices.rst
 create mode 100644 docs/reference/indices/list.rst
 create mode 100644 docs/reference/indices/list_query.rst
 create mode 100644 docs/reference/indices/table.rst
 create mode 100644 docs/reference/indices/table_query.rst
 create mode 100644 docs/reference/indices/tree.rst
 create mode 100644 docs/reference/indices/tree_query.rst
 create mode 100644 docs/reference/llm_predictor.rst
 create mode 100644 docs/reference/overview.rst
 create mode 100644 docs/reference/prompts.rst
 create mode 100644 docs/reference/query.rst
 create mode 100644 docs/reference/readers.rst
 create mode 100644 docs/requirements.txt

diff --git a/README.md b/README.md
index b00595a634..657f7fcf24 100644
--- a/README.md
+++ b/README.md
@@ -1,22 +1,38 @@
 # 🗂️ ️GPT Index
 
-GPT Index is a project consisting of a set of *data structures* that are created using GPT-3 and can be traversed using GPT-3 in order to answer queries.
+GPT Index is a project consisting of a set of *data structures* that are created using LLMs and can be traversed using LLMs in order to answer queries.
+
+PyPi: https://pypi.org/project/gpt-index/.
+
+Documentation: https://gpt-index.readthedocs.io/en/latest/.
 
 ## 🚀 Overview
 
 #### Context
-- GPT-3 is a phenomenonal piece of technology for knowledge generation and reasoning.
-- A big limitation of GPT-3 is context size (e.g. Davinci's limit is 4096 tokens. Large, but not infinite).
-- The ability to feed "knowledge" to GPT-3 is restricted to this limited prompt size and model weights.
-- **Thought**: What if GPT-3 can have access to potentially a much larger database of knowledge without retraining/finetuning? 
+- LLMs are a phenomenonal piece of technology for knowledge generation and reasoning.
+- A big limitation of LLMs is context size (e.g. OpenAI's `davinci` model for GPT-3 has a [limit](https://openai.com/api/pricing/) of 4096 tokens. Large, but not infinite).
+- The ability to feed "knowledge" to LLMs is restricted to this limited prompt size and model weights.
+- **Thought**: What if LLMs can have access to potentially a much larger database of knowledge without retraining/finetuning? 
 
 #### Proposed Solution
-That's where the **GPT Index** data structures come in. Instead of relying on world knowledge encoded in the model weights, a GPT Index data structure does the following:
-- Uses a pre-trained GPT-3 model primarily for *reasoning*/*summarization* instead of prior knowledge.
-- Takes as input a large corpus of text data and build a structured index over it (using GPT-3 or heuristics).
-- Allow users to _query_ the index in order to synthesize an answer to the question - this requires both _traversal_ of the index as well as a synthesis of the answer.
+That's where the **GPT Index** comes in. GPT Index is a simple, flexible interface between your external data and LLMs. It resolves the following pain points:
+
+- Provides simple data structures to resolve prompt size limitations.
+- Offers data connectors to your external data sources.
+- Offers you a comprehensive toolset trading off cost and performance.
+
+At the core of GPT Index is a **data structure**. Instead of relying on world knowledge encoded in the model weights, a GPT Index data structure does the following:
+
+- Uses a pre-trained LLM primarily for *reasoning*/*summarization* instead of prior knowledge.
+- Takes as input a large corpus of text data and build a structured index over it (using an LLM or heuristics).
+- Allow users to *query* the index in order to synthesize an answer to the question - this requires both *traversal* of the index as well as a synthesis of the answer.
+
+## 📄 Documentation
+
+Full documentation can be found here: https://gpt-index.readthedocs.io/en/latest/. 
+
+Please check it out for the most up-to-date tutorials, how-to guides, references, and other resources! 
 
-The high-level design exercise of this project is to test the capability of GPT-3 as a general-purpose processor to organize and retrieve data. From our current understanding, related works have used GPT-3 to reason with external db sources (see below); this work links reasoning with knowledge building.
 
 ## 💻 Example Usage
 
@@ -53,32 +69,6 @@ The main third-party package requirements are `transformers`, `openai`, and `lan
 All requirements should be contained within the `setup.py` file. To run the package locally without building the wheel, simply do `pip install -r requirements.txt`. 
 
 
-## Index Data Structures
-
-- [`Tree Index`](gpt_index/indices/tree/README.md): Tree data structures
-    - **Creation**: with GPT hierarchical summarization over sub-documents
-    - **Query**: with GPT recursive querying over multiple choice problems
-- [`Keyword Table Index`](gpt_index/indices/keyword_table/README.md): a keyword-based table
-    - **Creation**: with GPT keyword extraction over each sub-document
-    - **Query**: with GPT keyword extraction over question, match to sub-documents. *Create and refine* an answer over candidate sub-documents.
-- [`List Index`](gpt_index/indices/list/README.md): a simple list-based data structure
-    - **Creation**: by splitting documents into a list of text chunks
-    - **Query**: use GPT with a create and refine prompt iterately over the list of sub-documents
-
-
-## Data Connectors
-
-We currently offer connectors into the following data sources. External data sources are retrieved through their APIs + corresponding authentication token.
-- Notion (`NotionPageReader`)
-- Google Drive (`GoogleDocsReader`)
-- Slack (`SlackReader`)
-- MongoDB (local) (`SimpleMongoReader`)
-- Wikipedia (`WikipediaReader`)
-- local file directory (`SimpleDirectoryReader`)
-
-Example notebooks of how to use data connectors are found in the [Data Connector Example Notebooks](examples/data_connectors).
-
-
 ## 🔬 Related Work [WIP]
 
 [Measuring and Narrowing the Compositionality Gap in Language Models, by Press et al.](https://arxiv.org/abs/2210.03350)
diff --git a/docs/Makefile b/docs/Makefile
new file mode 100644
index 0000000000..d4bb2cbb9e
--- /dev/null
+++ b/docs/Makefile
@@ -0,0 +1,20 @@
+# 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)
diff --git a/docs/_static/composability/diagram.png b/docs/_static/composability/diagram.png
new file mode 100644
index 0000000000000000000000000000000000000000..9734b399757d0e7d5aae85768423cd59b51873b0
GIT binary patch
literal 31056
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
HN@xNAyo}a=

literal 0
HcmV?d00001

diff --git a/docs/_static/composability/diagram_b0.png b/docs/_static/composability/diagram_b0.png
new file mode 100644
index 0000000000000000000000000000000000000000..0e080daaac368b2f8497d5815637cc9f0d4a85f7
GIT binary patch
literal 14133
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

literal 0
HcmV?d00001

diff --git a/docs/_static/composability/diagram_b1.png b/docs/_static/composability/diagram_b1.png
new file mode 100644
index 0000000000000000000000000000000000000000..31a6d3055ff6259c6bf46c4cd8b23f1fa9f32ecc
GIT binary patch
literal 30486
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

literal 0
HcmV?d00001

diff --git a/docs/_static/composability/diagram_q1.png b/docs/_static/composability/diagram_q1.png
new file mode 100644
index 0000000000000000000000000000000000000000..feb6cbb723f8c537a029e36f2863288ecf9616ee
GIT binary patch
literal 40713
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
aD+<O#5?eJEbZb8Y)oz}yelF{r5}E)LU>+R+

literal 0
HcmV?d00001

diff --git a/docs/_static/composability/diagram_q2.png b/docs/_static/composability/diagram_q2.png
new file mode 100644
index 0000000000000000000000000000000000000000..f89af4216df9e549bb5a6105709667c2bd9151de
GIT binary patch
literal 55410
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
R^WF-O>7K5BF6*2UngAKqzjgos

literal 0
HcmV?d00001

diff --git a/docs/conf.py b/docs/conf.py
new file mode 100644
index 0000000000..e82983c975
--- /dev/null
+++ b/docs/conf.py
@@ -0,0 +1,50 @@
+"""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 os
+import sys
+
+import sphinx_rtd_theme  # noqa: F401
+
+sys.path.insert(0, os.path.abspath("../"))
+
+# -- Project information -----------------------------------------------------
+# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information
+
+
+project = "GPT Index"
+copyright = "2022, 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",
+    "myst_parser",
+]
+
+templates_path = ["_templates"]
+exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"]
+
+
+# -- Options for HTML output -------------------------------------------------
+# https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output
+
+html_theme = "sphinx_rtd_theme"
+html_static_path = ["_static"]
diff --git a/docs/getting_started/installation.md b/docs/getting_started/installation.md
new file mode 100644
index 0000000000..676e9d36b9
--- /dev/null
+++ b/docs/getting_started/installation.md
@@ -0,0 +1,20 @@
+# Installation and Setup
+
+### Installation from Pip
+
+You can simply do:
+```
+pip install gpt-index
+```
+
+### Installation from Source
+Git clone this repository: `git clone git@github.com:jerryjliu/gpt_index.git`. Then do:
+
+- `pip install -e .` if you want to do an editable install (you can modify source files) of just the package itself.
+- `pip install -r requirements.txt` if you want to install optional dependencies + dependencies used for development (e.g. unit testing).
+
+
+### Environment Setup
+
+By default, we use the OpenAI GPT-3 `text-davinci-002` model. In order to use this, you must have an OPENAI_API_KEY setup.
+You can register an API key by logging into [OpenAI's page and creating a new API token](https://beta.openai.com/account/api-keys)
diff --git a/docs/getting_started/overview.rst b/docs/getting_started/overview.rst
new file mode 100644
index 0000000000..25a789dafe
--- /dev/null
+++ b/docs/getting_started/overview.rst
@@ -0,0 +1,4 @@
+Overview
+=====================================
+
+This section shows you how to quickly get up and running with GPT Index.
diff --git a/docs/getting_started/starter_example.md b/docs/getting_started/starter_example.md
new file mode 100644
index 0000000000..d75a8532a7
--- /dev/null
+++ b/docs/getting_started/starter_example.md
@@ -0,0 +1,69 @@
+# Starter Tutorial
+
+Here is a starter example for using GPT Index. Make sure you've followed the [installation](installation.md) steps first.
+
+
+### Download
+GPT Index examples can be found in the `examples` folder of the GPT Index repository. 
+We first want to download this `examples` folder. An easy way to do this is to just clone the repo: 
+
+```bash
+$ git clone git@github.com:jerryjliu/gpt_index.git
+```
+
+Next, navigate to your newly-cloned repository, and verify the contents:
+
+```bash
+$ cd gpt_index
+$ ls
+LICENSE                data_requirements.txt  tests/
+MANIFEST.in            examples/              pyproject.toml
+Makefile               experimental/          requirements.txt
+README.md              gpt_index/             setup.py
+```
+
+
+We now want to navigate to the following folder:
+```bash
+$ cd examples/paul_graham_essay
+```
+
+This contains GPT Index examples around Paul Graham's essay, ["What I Worked On"](http://paulgraham.com/worked.html). A comprehensive set of examples are already provided in `TestEssay.ipynb`. For the purposes of this tutorial, we can focus on a simple example of getting GPT Index up and running.
+
+
+### Build and Query Index
+Create a new `.py` file with the following:
+
+```python
+from gpt_index import GPTTreeIndex, SimpleDirectoryReader
+from IPython.display import Markdown, display
+
+documents = SimpleDirectoryReader('data').load_data()
+index = GPTTreeIndex(documents)
+```
+
+This builds an index over the documents in the `data` folder (which in this case just consists of the essay text). We then run the following
+```python
+response = index.query("What did the author do growing up?")
+print(response)
+```
+
+You should get back a response similar to the following: `The author wrote short stories and tried to program on an IBM 1401.`
+
+### Saving and Loading
+
+To save to disk and load from disk, do
+
+```python
+# save to disk
+index.save_to_disk('index.json')
+# load from disk
+index = GPTTreeIndex.load_from_disk('index.json')
+```
+
+
+### Next Steps
+
+That's it! For more information on GPT Index features, please check out the numerous "How-To Guides" to the left.
+Additionally, if you would like to play around with Example Notebooks, check out [this link](/reference/example_notebooks.rst).
+
diff --git a/docs/how_to/composability.md b/docs/how_to/composability.md
new file mode 100644
index 0000000000..6b46516f32
--- /dev/null
+++ b/docs/how_to/composability.md
@@ -0,0 +1,53 @@
+# Composability
+
+
+GPT Index offers **composability** of your indices, meaning that you can build indices on top of other indices. This allows you to more effectively index your entire document tree in order to feed custom knowledge to GPT.
+
+Composability allows you to to define lower-level indices for each document, and higher-order indices over a collection of documents. To see how this works, imagine defining 1) a tree index for the text within each document, and 2) a list index over each tree index (one document) within your collection.
+
+To see how this works, imagine you have 3 documents: `doc1`, `doc2`, and `doc3`.
+
+```python
+doc1 = SimpleDirectoryReader('data1').load_data()
+doc2 = SimpleDirectoryReader('data2').load_data()
+doc3 = SimpleDirectoryReader('data3').load_data()
+```
+
+![](/_static/composability/diagram_b0.png)
+
+Now let's define a tree index for each document. In Python, we have:
+
+```python
+index1 = GPTTreeIndex(doc1)
+index2 = GPTTreeIndex(doc2)
+index2 = GPTTreeIndex(doc2)
+```
+
+![](/_static/composability/diagram_b1.png)
+
+We can then create a list index on these 3 tree indices:
+
+```python
+list_index = GPTListIndex([index1, index2, index3])
+```
+
+![](/_static/composability/diagram.png)
+
+During a query, we would start with the top-level list index. Each node in the list corresponds to an underlying tree index. 
+
+```python
+response = list_index.query("Where did the author grow up?")
+```
+
+![](/_static/composability/diagram_q1.png)
+
+So within a node, instead of fetching the text, we would recursively query the stored tree index to retrieve our answer.
+
+![](/_static/composability/diagram_q2.png)
+
+NOTE: You can stack indices as many times as you want, depending on the hierarchies of your knowledge base! 
+
+
+We can take a look at a code example below as well. We first build two tree indices, one over the Wikipedia NYC page, and the other over Paul Graham's essay. We then define a keyword extractor index over the two tree indices.
+
+[Here is an example notebook](https://github.com/jerryjliu/gpt_index/blob/main/examples/composable_indices/ComposableIndices.ipynb).
diff --git a/docs/how_to/cost_analysis.md b/docs/how_to/cost_analysis.md
new file mode 100644
index 0000000000..891060b243
--- /dev/null
+++ b/docs/how_to/cost_analysis.md
@@ -0,0 +1,39 @@
+# Cost Analysis
+
+Each call to an LLM will cost some amount of money - for instance, OpenAI's Davinci costs $0.02 / 1k tokens. The cost of building an index and querying depends on 
+1. the type of LLM used
+2. the type of data structure used
+3. parameters used during building 
+4. parameters used during querying
+
+The cost of building and querying each index is a TODO in the reference documentation. In the meantime, here is a high-level overview of the cost structure of the indices.
+
+### Index Building
+
+
+#### Indices with no LLM calls
+The following indices don't require LLM calls at all during building (0 cost):
+- `GPTListIndex`
+- `GPTSimpleKeywordTableIndex` - uses a regex keyword extractor to extract keywords from each document
+- `GPTRAKEKeywordTableIndex` - uses a RAKE keyword extractor to extract keywords from each document
+
+#### Indices with LLM calls
+The following indices do require LLM calls during build time:
+- `GPTTreeIndex` - use LLM to hierarchically summarize the text to build the tree
+- `GPTKeywordTableIndex` - use LLM to extract keywords from each document
+
+
+### Query Time
+
+There will always be >= 1 LLM call during query time, in order to synthesize the final answer. 
+Some indices contain cost tradeoffs between index building and querying. `GPTListIndex`, for instance,
+is free to build, but running a query over a list index (without filtering or embedding lookups), will
+call the LLM {math}`N` times.
+
+Here are some notes regarding each of the indices:
+- `GPTListIndex`: by default requires {math}`N` LLM calls, where N is the number of nodes.
+    - However, can do `index.query(..., keyword="<keyword>")` to filter out nodes that don't contain the keyword
+- `GPTTreeIndex`: by default requires {math}`\log (N)` LLM calls, where N is the number of leaf nodes. 
+    - Setting `child_branch_factor=2` will be more expensive than the default `child_branch_factor=1` (polynomial vs logarithmic), because we traverse 2 children instead of just 1 for each parent node.
+- `GPTKeywordTableIndex`: by default requires an LLM call to extract query keywords.
+    - Can do `index.query(..., mode="simple")` or `index.query(..., mode="rake")` to also use regex/RAKE keyword extractors on your query text.
\ No newline at end of file
diff --git a/docs/how_to/custom_llms.md b/docs/how_to/custom_llms.md
new file mode 100644
index 0000000000..99581ef4bd
--- /dev/null
+++ b/docs/how_to/custom_llms.md
@@ -0,0 +1,43 @@
+# Defining LLMs
+
+The goal of GPT Index is to provide a toolkit of data structures that can organize external information in a manner that 
+is easily compatible with the prompt limitations of an LLM. Therefore LLMs are always used to construct the final
+answer.
+Depending on the [type of index](/reference/indices.rst) being used,
+LLMs may also be used during index construction, insertion, and query traversal.
+
+GPT Index uses Langchain's [LLM](https://langchain.readthedocs.io/en/latest/modules/llms.html) 
+and [LLMChain](https://langchain.readthedocs.io/en/latest/modules/chains.html) module to define
+the underlying abstraction. We introduce a wrapper class, 
+[`LLMPredictor`](/reference/llm_predictor.rst), for integration into GPT Index.
+
+By default, we use OpenAI's `text-davinci-002` model. But you may choose to customize
+the underlying LLM being used.
+
+
+## Example
+
+An example snippet of customizing the LLM being used is shown below. 
+In this example, we use `text-davinci-003` instead of `text-davinci-002`. Note that 
+you may plug in any LLM shown on Langchain's 
+[LLM](https://langchain.readthedocs.io/en/latest/modules/llms.html) page.
+
+
+```python
+
+from gpt_index import GPTKeywordTableIndex, SimpleDirectoryReader, LLMPredictor
+from langchain import OpenAI
+
+# define LLM
+llm_predictor = LLMPredictor(llm=OpenAI(temperature=0, model_name="text-davinci-002"))
+
+# load index from disk
+index = GPTKeywordTableIndex.load_from_disk('index_table.json', llm_predictor=llm_predictor)
+
+# get response from query
+response = index.query("What did the author do after his time at Y Combinator?")
+
+```
+
+In this snipet, the index has already been created and saved to disk. We load
+the existing index, and swap in a new `LLMPredictor` that is used during query time.
\ No newline at end of file
diff --git a/docs/how_to/custom_prompts.md b/docs/how_to/custom_prompts.md
new file mode 100644
index 0000000000..f1cf36c14e
--- /dev/null
+++ b/docs/how_to/custom_prompts.md
@@ -0,0 +1,54 @@
+# Defining Prompts
+
+Prompting is the fundamental input that gives LLMs their expressive power. GPT Index uses prompts to build the index, do insertion, 
+perform traversal during querying, and to synthesize the final answer.
+
+GPT Index uses a finite set of *prompt types*, described [here](/reference/prompts.rst). 
+All index classes, along with their associated queries, utilize a subset of these prompts. The user may provide their own prompt.
+If the user does not provide their own prompt, default prompts are used.
+
+An API reference of all index classes and query classes are found below. The definition of each index class and query
+contains optional prompts that the user may pass in.
+- [Indices](/reference/indices.rst)
+- [Queries](/reference/query.rst)
+
+
+### Example
+
+An example can be found in [this notebook](https://github.com/jerryjliu/gpt_index/blob/main/examples/paul_graham_essay/TestEssay.ipynb).
+
+The corresponding snippet is below. We show how to define a custom Summarization Prompt that not only
+contains a `text` field, but also `query_str` field during construction of `GPTTreeIndex`, so that 
+the answer to the query can be simply synthesized from the root nodes.
+
+```python
+
+from gpt_index import Prompt, GPTTreeIndex, SimpleDirectoryReader
+
+# load documents
+documents = SimpleDirectoryReader('data').load_data()
+# define custom prompt
+query_str = "What did the author do growing up?"
+summary_prompt_tmpl = (
+    "Context information is below. \n"
+    "---------------------\n"
+    "{text}"
+    "\n---------------------\n"
+    "Given the context information and not prior knowledge, "
+    "answer the question: {query_str}\n"
+)
+
+summary_prompt = Prompt(
+    input_variables=["query_str", "text"],
+    template=DEFAULT_TEXT_QA_PROMPT_TMPL
+)
+# Build GPTTreeIndex: pass in custom prompt, also pass in query_str
+index_with_query = GPTTreeIndex(documents, summary_template=summary_prompt, query_str=query_str)
+
+```
+
+Once the index is built, we can retrieve our answer:
+```python
+# directly retrieve response from root nodes instead of traversing tree
+response = index_with_query.query(query_str, mode="retrieve")
+```
diff --git a/docs/how_to/data_connectors.md b/docs/how_to/data_connectors.md
new file mode 100644
index 0000000000..d9b39b3ba9
--- /dev/null
+++ b/docs/how_to/data_connectors.md
@@ -0,0 +1,13 @@
+# Data Connectors
+
+We currently offer connectors into the following data sources. External data sources are retrieved through their APIs + corresponding authentication token.
+The API reference documentation can be found [here](/reference/readers.rst).
+
+- [Notion](https://developers.notion.com/) (`NotionPageReader`)
+- [Google Docs](https://developers.google.com/docs/api) (`GoogleDocsReader`)
+- [Slack](https://api.slack.com/) (`SlackReader`)
+- MongoDB (`SimpleMongoReader`)
+- Wikipedia (`WikipediaReader`)
+- local file directory (`SimpleDirectoryReader`)
+
+We offer [example notebooks of connecting to different data sources](https://github.com/jerryjliu/gpt_index/tree/main/examples/data_connectors). Please check them out!
\ No newline at end of file
diff --git a/docs/how_to/embeddings.md b/docs/how_to/embeddings.md
new file mode 100644
index 0000000000..cc713330d6
--- /dev/null
+++ b/docs/how_to/embeddings.md
@@ -0,0 +1,27 @@
+# Embedding support
+
+GPT Index provides embedding support to our tree and list indices. In addition to each node storing text, each node can optionally store an embedding.
+During query-time, we can use embeddings to do max-similarity retrieval of nodes before calling the LLM to synthesize an answer. 
+Since similarity lookup using embeddings (e.g. using cosine similarity) does not require a LLM call, embeddings serve as a cheaper lookup mechanism instead
+of using LLMs to traverse nodes.
+
+NOTE: we currently support OpenAI embeddings. External embeddings are coming soon!
+
+**How are Embeddings Generated?**
+
+Embeddings are lazily generated and then cached at query time (if mode="embedding" is specified during `index.query`), and not during index construction.
+This design choice prevents the need to generate embeddings for all text chunks during index construction.
+
+**Embedding Lookups**
+For the list index:
+- We iterate through every node in the list, and identify the top k nodes through embedding similarity. We use these nodes to synthesize an answer.
+- See the [List Query API](/reference/indices/list_query.rst) for more details.
+
+For the tree index:
+- We start with the root nodes, and traverse down the tree by picking the child node through embedding similarity.
+- See the [Tree Query API](/reference/indices/tree_query.rst) for more details.
+
+**Example Notebook**
+
+An example notebook is given [here](https://github.com/jerryjliu/gpt_index/blob/main/examples/test_wiki/TestNYC_Embeddings.ipynb).
+
diff --git a/docs/how_to/insert.md b/docs/how_to/insert.md
new file mode 100644
index 0000000000..3b28eb8f7a
--- /dev/null
+++ b/docs/how_to/insert.md
@@ -0,0 +1,5 @@
+# Insert Capabilities
+
+Every GPT Index data structure allows insertion.
+
+An example notebook showcasing our insert capabilities is given [here](https://github.com/jerryjliu/gpt_index/blob/main/examples/paul_graham_essay/InsertDemo.ipynb).
\ No newline at end of file
diff --git a/docs/how_to/overview.rst b/docs/how_to/overview.rst
new file mode 100644
index 0000000000..1c6cc0c6d1
--- /dev/null
+++ b/docs/how_to/overview.rst
@@ -0,0 +1,4 @@
+Overview
+=====================================
+
+The how-to section contains guides on some of the core features of GPT Index:
diff --git a/docs/index.rst b/docs/index.rst
new file mode 100644
index 0000000000..081304af61
--- /dev/null
+++ b/docs/index.rst
@@ -0,0 +1,75 @@
+.. GPT Index documentation master file, created by
+   sphinx-quickstart on Sun Dec 11 14:30:34 2022.
+   You can adapt this file completely to your liking, but it should at least
+   contain the root `toctree` directive.
+
+Welcome to GPT Index!
+=====================================
+
+GPT Index is a project consisting of a set of data structures that are created using LLMs and can be traversed using LLMs in order to answer queries.
+
+The Github project page is here: https://github.com/jerryjliu/gpt_index.
+
+The pypi package is here: https://pypi.org/project/gpt-index/.
+
+
+🚀 Overview
+-----------
+
+Context
+^^^^^^^
+- LLMs are a phenomenonal piece of technology for knowledge generation and reasoning.
+- A big limitation of LLMs is context size (e.g. Davinci's limit is 4096 tokens. Large, but not infinite).
+- The ability to feed "knowledge" to LLMs is restricted to this limited prompt size and model weights.
+- **Thought**: What if LLMs can have access to potentially a much larger database of knowledge without retraining/finetuning? 
+
+Proposed Solution
+^^^^^^^^^^^^^^^^^
+That's where the **GPT Index** comes in. GPT Index is a simple, flexible interface between your external data and LLMs. It resolves the following pain points:
+
+- Provides simple data structures to resolve prompt size limitations.
+- Offers data connectors to your external data sources.
+- Offers you a comprehensive toolset trading off cost and performance.
+
+At the core of GPT Index is a **data structure**. Instead of relying on world knowledge encoded in the model weights, a GPT Index data structure does the following:
+
+- Uses a pre-trained LLM primarily for *reasoning*/*summarization* instead of prior knowledge.
+- Takes as input a large corpus of text data and build a structured index over it (using an LLM or heuristics).
+- Allow users to *query* the index in order to synthesize an answer to the question - this requires both *traversal* of the index as well as a synthesis of the answer.
+
+
+.. toctree::
+   :maxdepth: 1
+   :caption: Getting Started
+
+   getting_started/overview.rst
+   getting_started/installation.md
+   getting_started/starter_example.md
+
+
+.. toctree::
+   :maxdepth: 1
+   :caption: How To
+
+   how_to/overview.rst
+   how_to/data_connectors.md
+   how_to/composability.md
+   how_to/insert.md
+   how_to/cost_analysis.md
+   how_to/embeddings.md
+   how_to/custom_prompts.md
+   how_to/custom_llms.md
+
+
+.. toctree::
+   :maxdepth: 1
+   :caption: Reference
+
+   reference/overview.rst
+   reference/indices.rst
+   reference/query.rst
+   reference/readers.rst
+   reference/prompts.rst
+   reference/example_notebooks.rst
+   reference/llm_predictor.rst
+
diff --git a/docs/make.bat b/docs/make.bat
new file mode 100644
index 0000000000..32bb24529f
--- /dev/null
+++ b/docs/make.bat
@@ -0,0 +1,35 @@
+@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/reference/example_notebooks.rst b/docs/reference/example_notebooks.rst
new file mode 100644
index 0000000000..df5e3e58bc
--- /dev/null
+++ b/docs/reference/example_notebooks.rst
@@ -0,0 +1,8 @@
+.. _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/gpt_index/tree/main/examples>`_.
\ No newline at end of file
diff --git a/docs/reference/indices.rst b/docs/reference/indices.rst
new file mode 100644
index 0000000000..89a8b7fcd3
--- /dev/null
+++ b/docs/reference/indices.rst
@@ -0,0 +1,15 @@
+.. _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.
+
+.. toctree::
+   :maxdepth: 1
+   :caption: Index Data Structures
+
+   indices/list.rst
+   indices/table.rst
+   indices/tree.rst
diff --git a/docs/reference/indices/list.rst b/docs/reference/indices/list.rst
new file mode 100644
index 0000000000..65c0ea734f
--- /dev/null
+++ b/docs/reference/indices/list.rst
@@ -0,0 +1,9 @@
+List Index
+==========
+
+Building the List Index
+
+.. automodule:: gpt_index.indices.list
+   :members:
+   :inherited-members:
+   :exclude-members: delete, docstore, index_struct, index_struct_cls
\ No newline at end of file
diff --git a/docs/reference/indices/list_query.rst b/docs/reference/indices/list_query.rst
new file mode 100644
index 0000000000..fa65e44982
--- /dev/null
+++ b/docs/reference/indices/list_query.rst
@@ -0,0 +1,7 @@
+Querying a List Index
+=====================
+
+.. automodule:: gpt_index.indices.query.list
+   :members:
+   :inherited-members:
+   :exclude-members: index_struct, query, set_llm_predictor, set_prompt_helper
\ No newline at end of file
diff --git a/docs/reference/indices/table.rst b/docs/reference/indices/table.rst
new file mode 100644
index 0000000000..bdda65a5dd
--- /dev/null
+++ b/docs/reference/indices/table.rst
@@ -0,0 +1,8 @@
+Table Index
+===========
+
+Building the Keyword Table Index
+
+.. automodule:: gpt_index.indices.keyword_table
+   :members:
+   :inherited-members:
\ No newline at end of file
diff --git a/docs/reference/indices/table_query.rst b/docs/reference/indices/table_query.rst
new file mode 100644
index 0000000000..abcb62a701
--- /dev/null
+++ b/docs/reference/indices/table_query.rst
@@ -0,0 +1,7 @@
+Querying a Keyword Table Index
+==============================
+
+.. automodule:: gpt_index.indices.query.keyword_table
+   :members:
+   :inherited-members:
+   :exclude-members: index_struct, query, set_llm_predictor, set_prompt_helper
\ No newline at end of file
diff --git a/docs/reference/indices/tree.rst b/docs/reference/indices/tree.rst
new file mode 100644
index 0000000000..5e582f92a6
--- /dev/null
+++ b/docs/reference/indices/tree.rst
@@ -0,0 +1,8 @@
+Tree Index
+==========
+
+Building the Tree Index
+
+.. automodule:: gpt_index.indices.tree
+   :members:
+   :inherited-members:
\ No newline at end of file
diff --git a/docs/reference/indices/tree_query.rst b/docs/reference/indices/tree_query.rst
new file mode 100644
index 0000000000..46f5e67f52
--- /dev/null
+++ b/docs/reference/indices/tree_query.rst
@@ -0,0 +1,7 @@
+Querying a Tree Index
+=====================
+
+.. automodule:: gpt_index.indices.query.tree
+   :members:
+   :inherited-members:
+   :exclude-members: index_struct, query, set_llm_predictor, set_prompt_helper
\ No newline at end of file
diff --git a/docs/reference/llm_predictor.rst b/docs/reference/llm_predictor.rst
new file mode 100644
index 0000000000..ffc096c78b
--- /dev/null
+++ b/docs/reference/llm_predictor.rst
@@ -0,0 +1,10 @@
+.. _Ref-LLM-Predictor:
+
+LLMPredictor
+=================
+
+Our LLMPredictor is a wrapper around Langchain's `LLMChain` that allows easy integration into GPT Index.
+
+.. automodule:: gpt_index.langchain_helpers.chain_wrapper
+   :members:
+   :inherited-members:
diff --git a/docs/reference/overview.rst b/docs/reference/overview.rst
new file mode 100644
index 0000000000..b5ef28e5bf
--- /dev/null
+++ b/docs/reference/overview.rst
@@ -0,0 +1,4 @@
+Overview
+=====================================
+
+The reference section contains comprehensive API documentation over all index data structures, and query modes.
diff --git a/docs/reference/prompts.rst b/docs/reference/prompts.rst
new file mode 100644
index 0000000000..eb8c0cfdac
--- /dev/null
+++ b/docs/reference/prompts.rst
@@ -0,0 +1,70 @@
+.. _Prompt-Templates:
+
+Prompt Templates
+=================
+
+These are the reference prompt templates. 
+We then document all prompts, with their required variables.
+
+We then show the base prompt class, 
+derived from `Langchain <https://langchain.readthedocs.io/en/latest/modules/prompt.html>`_.
+
+
+**Summarization Prompt**
+
+- Prompt to summarize the provided `text`.
+- input variables: `["text"]`
+
+**Tree Insert Prompt**
+
+- Prompt to insert a new chunk of text `new_chunk_text` into the tree index. More specifically,
+    this prompt has the LLM select the relevant candidate child node to continue tree traversal.
+- input variables: `["num_chunks", "context_list", "new_chunk_text"]`
+
+**Question-Answer Prompt**
+
+- Prompt to answer a question `query_str` given a context `context_str`.
+- input variables: `["context_str", "query_str"]`
+
+**Refinement Prompt**
+
+- Prompt to refine an existing answer `existing_answer` given a context `context_msg`,
+    and a query `query_str`.
+- input variables: `["query_str", "existing_answer", "context_msg"]`
+
+**Keyword Extraction Prompt**
+
+- Prompt to extract keywords from a text `text` with a maximum of `max_keywords` keywords.
+- input variables: `["text", "max_keywords"]`
+
+**Query Keyword Extraction Prompt**
+
+- Prompt to extract keywords from a query `query_str` with a maximum of `max_keywords` keywords.
+- input variables: `["question", "max_keywords"]`
+
+
+**Tree Select Query Prompt**
+
+- Prompt to select a candidate child node out of all child nodes provided in `context_list`,
+    given a query `query_str`. `num_chunks` is the number of child nodes in `context_list`.
+
+- input variables: `["num_chunks", "context_list", "query_str"]`
+
+
+**Tree Select Query Prompt (Multiple)**
+
+- Prompt to select multiple candidate child nodes out of all child nodes provided in `context_list`,
+    given a query `query_str`. `branching_factor` refers to the number of child nodes to select, and
+    `num_chunks` is the number of child nodes in `context_list`.
+
+- input variables: `["num_chunks", "context_list", "query_str", "branching_factor"]`
+
+
+**Base Prompt Class**
+
+.. automodule:: gpt_index.prompts
+   :members:
+   :inherited-members:
+   :exclude-members: Config, construct, copy, dict, from_examples, from_file, get_full_format_args, output_parser, save, template, template_format, update_forward_refs, validate_variable_names, json, template_is_valid
+
+
diff --git a/docs/reference/query.rst b/docs/reference/query.rst
new file mode 100644
index 0000000000..84525694f7
--- /dev/null
+++ b/docs/reference/query.rst
@@ -0,0 +1,14 @@
+.. _Ref-Query:
+
+Querying an Index
+=================
+
+This doc specifically shows the classes that are used to query indices.
+
+.. toctree::
+   :maxdepth: 1
+   :caption: Query classes
+
+   indices/list_query.rst
+   indices/table_query.rst
+   indices/tree_query.rst
diff --git a/docs/reference/readers.rst b/docs/reference/readers.rst
new file mode 100644
index 0000000000..8fc062f543
--- /dev/null
+++ b/docs/reference/readers.rst
@@ -0,0 +1,6 @@
+Data Connectors
+===============
+
+.. automodule:: gpt_index.readers
+   :members:
+   :inherited-members:
\ No newline at end of file
diff --git a/docs/requirements.txt b/docs/requirements.txt
new file mode 100644
index 0000000000..0d0e6022fa
--- /dev/null
+++ b/docs/requirements.txt
@@ -0,0 +1,3 @@
+sphinx
+sphinx_rtd_theme
+myst-parser
\ No newline at end of file
diff --git a/gpt_index/__init__.py b/gpt_index/__init__.py
index 53553541bb..d024cd75d8 100644
--- a/gpt_index/__init__.py
+++ b/gpt_index/__init__.py
@@ -6,13 +6,14 @@ with open(Path(__file__).absolute().parents[0] / "VERSION") as _f:
     __version__ = _f.read().strip()
 
 
-from gpt_index.indices.keyword_table.base import GPTKeywordTableIndex
-from gpt_index.indices.keyword_table.rake_base import GPTRAKEKeywordTableIndex
-from gpt_index.indices.keyword_table.simple_base import GPTSimpleKeywordTableIndex
-from gpt_index.indices.list.base import GPTListIndex
-
 # indices
-from gpt_index.indices.tree.base import GPTTreeIndex
+from gpt_index.indices.keyword_table import (
+    GPTKeywordTableIndex,
+    GPTRAKEKeywordTableIndex,
+    GPTSimpleKeywordTableIndex,
+)
+from gpt_index.indices.list import GPTListIndex
+from gpt_index.indices.tree import GPTTreeIndex
 
 # langchain helper
 from gpt_index.langchain_helpers.chain_wrapper import LLMPredictor
diff --git a/gpt_index/indices/__init__.py b/gpt_index/indices/__init__.py
index 0eee67e42b..10f6e05ee4 100644
--- a/gpt_index/indices/__init__.py
+++ b/gpt_index/indices/__init__.py
@@ -1 +1,16 @@
-"""Init file for indices."""
+"""GPT Index data structures."""
+
+# indices
+from gpt_index.indices.keyword_table.base import GPTKeywordTableIndex
+from gpt_index.indices.keyword_table.rake_base import GPTRAKEKeywordTableIndex
+from gpt_index.indices.keyword_table.simple_base import GPTSimpleKeywordTableIndex
+from gpt_index.indices.list.base import GPTListIndex
+from gpt_index.indices.tree.base import GPTTreeIndex
+
+__all__ = [
+    "GPTKeywordTableIndex",
+    "GPTSimpleKeywordTableIndex",
+    "GPTRAKEKeywordTableIndex",
+    "GPTListIndex",
+    "GPTTreeIndex",
+]
diff --git a/gpt_index/indices/base.py b/gpt_index/indices/base.py
index 43c7eab830..915fddbd12 100644
--- a/gpt_index/indices/base.py
+++ b/gpt_index/indices/base.py
@@ -152,7 +152,17 @@ class BaseGPTIndex(Generic[IS]):
         mode: str = DEFAULT_MODE,
         **query_kwargs: Any
     ) -> str:
-        """Answer a query."""
+        """Answer a query.
+
+        When `query` is called, we query the index with the given `mode` and
+        `query_kwargs`. The `mode` determines the type of query to run, and
+        `query_kwargs` are parameters that are specific to the query type.
+
+        For a comprehensive documentation of available `mode` and `query_kwargs` to
+        query a given index, please visit :ref:`Ref-Query`.
+
+
+        """
         # TODO: remove _mode_to_query and consolidate with query_runner
         if mode == "recursive":
             if "query_configs" not in query_kwargs:
@@ -175,7 +185,20 @@ class BaseGPTIndex(Generic[IS]):
 
     @classmethod
     def load_from_disk(cls, save_path: str, **kwargs: Any) -> "BaseGPTIndex":
-        """Load from disk."""
+        """Load index from disk.
+
+        This method loads the index from a JSON file stored on disk. The index data
+        structure itself is preserved completely. If the index is defined over
+        subindices, those subindices will also be preserved (and subindices of
+        those subindices, etc.).
+
+        Args:
+            save_path (str): The save_path of the file.
+
+        Returns:
+            BaseGPTIndex: The loaded index.
+
+        """
         with open(save_path, "r") as f:
             result_dict = json.load(f)
             index_struct = cls.index_struct_cls.from_dict(result_dict["index_struct"])
@@ -183,7 +206,14 @@ class BaseGPTIndex(Generic[IS]):
             return cls(index_struct=index_struct, docstore=docstore, **kwargs)
 
     def save_to_disk(self, save_path: str) -> None:
-        """Safe to file."""
+        """Save to file.
+
+        This method stores the index into a JSON file stored on disk.
+
+        Args:
+            save_path (str): The save_path of the file.
+
+        """
         out_dict: Dict[str, dict] = {
             "index_struct": self.index_struct.to_dict(),
             "docstore": self.docstore.to_dict(),
diff --git a/gpt_index/indices/keyword_table/__init__.py b/gpt_index/indices/keyword_table/__init__.py
index 1d4640565a..43a973b9b0 100644
--- a/gpt_index/indices/keyword_table/__init__.py
+++ b/gpt_index/indices/keyword_table/__init__.py
@@ -1 +1,12 @@
-"""Init file."""
+"""Keyword Table Index Data Structures."""
+
+# indices
+from gpt_index.indices.keyword_table.base import GPTKeywordTableIndex
+from gpt_index.indices.keyword_table.rake_base import GPTRAKEKeywordTableIndex
+from gpt_index.indices.keyword_table.simple_base import GPTSimpleKeywordTableIndex
+
+__all__ = [
+    "GPTKeywordTableIndex",
+    "GPTSimpleKeywordTableIndex",
+    "GPTRAKEKeywordTableIndex",
+]
diff --git a/gpt_index/indices/keyword_table/base.py b/gpt_index/indices/keyword_table/base.py
index 640f40217b..70f1556dc8 100644
--- a/gpt_index/indices/keyword_table/base.py
+++ b/gpt_index/indices/keyword_table/base.py
@@ -39,7 +39,26 @@ DQKET = DEFAULT_QUERY_KEYWORD_EXTRACT_TEMPLATE
 
 
 class BaseGPTKeywordTableIndex(BaseGPTIndex[KeywordTable]):
-    """Base GPT Index."""
+    """GPT Keyword Table Index.
+
+    This index extracts keywords from the text, and maps each
+    keyword to the node(s) that it corresponds to. In this sense it mimicks a
+    "hash table". During index construction, the keyword table is constructed
+    by extracting keywords from each node and creating an internal mapping.
+
+    During query time, the keywords are extracted from the query text, and these
+    keywords are used to index into the keyword table. The retrieved nodes
+    are then used to answer the query.
+
+    Args:
+        keyword_extract_template (Optional[Prompt]): A Keyword Extraction Prompt
+            (see :ref:`Prompt-Templates`).
+        max_keywords_per_query (int): The maximum number of keywords to extract
+            per query.
+        max_keywords_per_query (int): The maximum number of keywords to extract
+            per chunk.
+
+    """
 
     index_struct_cls = KeywordTable
 
@@ -151,7 +170,7 @@ class BaseGPTKeywordTableIndex(BaseGPTIndex[KeywordTable]):
 class GPTKeywordTableIndex(BaseGPTKeywordTableIndex):
     """GPT Keyword Table Index.
 
-    Uses GPT to build keyword table.
+    This index uses a GPT model to extract keywords from the text.
 
     """
 
diff --git a/gpt_index/indices/keyword_table/rake_base.py b/gpt_index/indices/keyword_table/rake_base.py
index b610e3a541..61b26ce6dc 100644
--- a/gpt_index/indices/keyword_table/rake_base.py
+++ b/gpt_index/indices/keyword_table/rake_base.py
@@ -11,7 +11,11 @@ from gpt_index.indices.keyword_table.utils import rake_extract_keywords
 
 
 class GPTRAKEKeywordTableIndex(BaseGPTKeywordTableIndex):
-    """GPT Index."""
+    """GPT RAKE Keyword Table Index.
+
+    This index uses a RAKE keyword extractor to extract keywords from the text.
+
+    """
 
     def _extract_keywords(self, text: str) -> Set[str]:
         """Extract keywords from text."""
diff --git a/gpt_index/indices/keyword_table/simple_base.py b/gpt_index/indices/keyword_table/simple_base.py
index e8f506884b..4d542c38da 100644
--- a/gpt_index/indices/keyword_table/simple_base.py
+++ b/gpt_index/indices/keyword_table/simple_base.py
@@ -15,7 +15,11 @@ DQKET = DEFAULT_QUERY_KEYWORD_EXTRACT_TEMPLATE
 
 
 class GPTSimpleKeywordTableIndex(BaseGPTKeywordTableIndex):
-    """GPT Index."""
+    """GPT Simple Keyword Table Index.
+
+    This index uses a simple regex extractor to extract keywords from the text.
+
+    """
 
     def _extract_keywords(self, text: str) -> Set[str]:
         """Extract keywords from text."""
diff --git a/gpt_index/indices/list/__init__.py b/gpt_index/indices/list/__init__.py
index 1d4640565a..b24c607f33 100644
--- a/gpt_index/indices/list/__init__.py
+++ b/gpt_index/indices/list/__init__.py
@@ -1 +1,7 @@
-"""Init file."""
+"""List-based data structures."""
+
+from gpt_index.indices.list.base import GPTListIndex
+
+__all__ = [
+    "GPTListIndex",
+]
diff --git a/gpt_index/indices/list/base.py b/gpt_index/indices/list/base.py
index e93f8a827d..5eaeb598df 100644
--- a/gpt_index/indices/list/base.py
+++ b/gpt_index/indices/list/base.py
@@ -29,7 +29,21 @@ GENERATE_TEXT_QUERY = "What is a concise summary of this document?"
 
 
 class GPTListIndex(BaseGPTIndex[IndexList]):
-    """GPT List Index."""
+    """GPT List Index.
+
+    The list index is a simple data structure where nodes are stored in
+    a sequence. During index construction, the document texts are
+    chunked up, converted to nodes, and stored in a list.
+
+    During query time, the list index iterates through the nodes
+    with some optional filter parameters, and synthesizes an
+    answer from all the nodes.
+
+    Args:
+        text_qa_template (Optional[Prompt]): A Question-Answer Prompt
+            (see :ref:`Prompt-Templates`).
+
+    """
 
     index_struct_cls = IndexList
 
@@ -69,7 +83,14 @@ class GPTListIndex(BaseGPTIndex[IndexList]):
     def build_index_from_documents(
         self, documents: Sequence[BaseDocument]
     ) -> IndexList:
-        """Build the index from documents."""
+        """Build the index from documents.
+
+        Args:
+            documents (List[BaseDocument]): A list of documents.
+
+        Returns:
+            IndexList: The created list index.
+        """
         text_splitter = self._prompt_helper.get_text_splitter_given_prompt(
             self.text_qa_template, 1
         )
diff --git a/gpt_index/indices/query/keyword_table/__init__.py b/gpt_index/indices/query/keyword_table/__init__.py
index 1d4640565a..9b0b308e6e 100644
--- a/gpt_index/indices/query/keyword_table/__init__.py
+++ b/gpt_index/indices/query/keyword_table/__init__.py
@@ -1 +1,13 @@
-"""Init file."""
+"""Query classes for keyword table indices."""
+
+from gpt_index.indices.query.keyword_table.query import (
+    GPTKeywordTableGPTQuery,
+    GPTKeywordTableRAKEQuery,
+    GPTKeywordTableSimpleQuery,
+)
+
+__all__ = [
+    "GPTKeywordTableGPTQuery",
+    "GPTKeywordTableRAKEQuery",
+    "GPTKeywordTableSimpleQuery",
+]
diff --git a/gpt_index/indices/query/keyword_table/query.py b/gpt_index/indices/query/keyword_table/query.py
index 98b3a5235d..52b00270bc 100644
--- a/gpt_index/indices/query/keyword_table/query.py
+++ b/gpt_index/indices/query/keyword_table/query.py
@@ -23,7 +23,23 @@ DQKET = DEFAULT_QUERY_KEYWORD_EXTRACT_TEMPLATE
 
 
 class BaseGPTKeywordTableQuery(BaseGPTIndexQuery[KeywordTable]):
-    """Base GPT Keyword Table Index Query."""
+    """Base GPT Keyword Table Index Query.
+
+    Arguments are shared among subclasses.
+
+    Args:
+        keyword_extract_template (Optional[Prompt]): A Keyword Extraction Prompt
+            (see :ref:`Prompt-Templates`).
+        query_keyword_extract_template (Optional[Prompt]): A Query Keyword Extraction
+            Prompt (see :ref:`Prompt-Templates`).
+        refine_template (Optional[Prompt]): A Refinement Prompt
+            (see :ref:`Prompt-Templates`).
+        text_qa_template (Optional[Prompt]): A Question Answering Prompt
+            (see :ref:`Prompt-Templates`).
+        max_keywords_per_query (int): Maximum number of keywords to extract from query.
+        num_chunks_per_query (int): Maximum number of text chunks to query.
+
+    """
 
     def __init__(
         self,
@@ -89,7 +105,14 @@ class BaseGPTKeywordTableQuery(BaseGPTIndexQuery[KeywordTable]):
 class GPTKeywordTableGPTQuery(BaseGPTKeywordTableQuery):
     """GPT Keyword Table Index Query.
 
-    Extracts keywords using GPT.
+    Extracts keywords using GPT. Set when `mode="default"` in `query` method of
+    `GPTKeywordTableIndex`.
+
+    .. code-block:: python
+
+        response = index.query("<query_str>", mode="default")
+
+    See BaseGPTKeywordTableQuery for arguments.
 
     """
 
@@ -107,7 +130,14 @@ class GPTKeywordTableGPTQuery(BaseGPTKeywordTableQuery):
 class GPTKeywordTableSimpleQuery(BaseGPTKeywordTableQuery):
     """GPT Keyword Table Index Simple Query.
 
-    Extracts keywords using Simple keyword extractor.
+    Extracts keywords using simple regex-based keyword extractor.
+    Set when `mode="simple"` in `query` method of `GPTKeywordTableIndex`.
+
+    .. code-block:: python
+
+        response = index.query("<query_str>", mode="simple")
+
+    See BaseGPTKeywordTableQuery for arguments.
 
     """
 
@@ -122,6 +152,13 @@ class GPTKeywordTableRAKEQuery(BaseGPTKeywordTableQuery):
     """GPT Keyword Table Index RAKE Query.
 
     Extracts keywords using RAKE keyword extractor.
+    Set when `mode="rake"` in `query` method of `GPTKeywordTableIndex`.
+
+    .. code-block:: python
+
+        response = index.query("<query_str>", mode="rake")
+
+    See BaseGPTKeywordTableQuery for arguments.
 
     """
 
diff --git a/gpt_index/indices/query/list/__init__.py b/gpt_index/indices/query/list/__init__.py
index 1d4640565a..795cc1c5df 100644
--- a/gpt_index/indices/query/list/__init__.py
+++ b/gpt_index/indices/query/list/__init__.py
@@ -1 +1,6 @@
-"""Init file."""
+"""Query classes for list indices."""
+
+from gpt_index.indices.query.list.embedding_query import GPTListIndexEmbeddingQuery
+from gpt_index.indices.query.list.query import GPTListIndexQuery
+
+__all__ = ["GPTListIndexEmbeddingQuery", "GPTListIndexQuery"]
diff --git a/gpt_index/indices/query/list/embedding_query.py b/gpt_index/indices/query/list/embedding_query.py
index fd2fe99e19..4accc86209 100644
--- a/gpt_index/indices/query/list/embedding_query.py
+++ b/gpt_index/indices/query/list/embedding_query.py
@@ -8,7 +8,20 @@ from gpt_index.prompts.base import Prompt
 
 
 class GPTListIndexEmbeddingQuery(BaseGPTListIndexQuery):
-    """GPTListIndex query."""
+    """GPTListIndex query.
+
+    An embedding-based for GPTListIndex, which traverses
+    each node in sequence and retrieves top-k nodes by
+    embedding similarity to the query.
+    Set when `mode="embedding"` in `query` method of `GPTListIndex`.
+
+    .. code-block:: python
+
+        response = index.query("<query_str>", mode="embedding")
+
+    See BaseGPTListIndexQuery for arguments.
+
+    """
 
     def __init__(
         self,
diff --git a/gpt_index/indices/query/list/query.py b/gpt_index/indices/query/list/query.py
index b51746b02d..bf0b18f417 100644
--- a/gpt_index/indices/query/list/query.py
+++ b/gpt_index/indices/query/list/query.py
@@ -12,7 +12,19 @@ from gpt_index.prompts.default_prompts import (
 
 
 class BaseGPTListIndexQuery(BaseGPTIndexQuery[IndexList]):
-    """GPTListIndex query."""
+    """GPTListIndex query.
+
+    Arguments are shared among subclasses.
+
+    Args:
+        text_qa_template (Optional[Prompt]): A Question Answering Prompt
+            (see :ref:`Prompt-Templates`).
+        refine_template (Optional[Prompt]): A Refinement Prompt
+            (see :ref:`Prompt-Templates`).
+        keyword (Optional[str]): If specified, keyword to filter nodes.
+            Simulates Ctrl+F lookup in a document.
+
+    """
 
     def __init__(
         self,
@@ -62,7 +74,20 @@ class BaseGPTListIndexQuery(BaseGPTIndexQuery[IndexList]):
 
 
 class GPTListIndexQuery(BaseGPTListIndexQuery):
-    """GPTListIndex query."""
+    """GPTListIndex query.
+
+    The default query mode for GPTListIndex, which traverses
+    each node in sequence and synthesizes a response across all nodes
+    (with an optional keyword filter).
+    Set when `mode="default"` in `query` method of `GPTListIndex`.
+
+    .. code-block:: python
+
+        response = index.query("<query_str>", mode="default")
+
+    See BaseGPTListIndexQuery for arguments.
+
+    """
 
     def _get_nodes_for_response(
         self, query_str: str, verbose: bool = False
diff --git a/gpt_index/indices/query/tree/__init__.py b/gpt_index/indices/query/tree/__init__.py
index 1d4640565a..f269b72b00 100644
--- a/gpt_index/indices/query/tree/__init__.py
+++ b/gpt_index/indices/query/tree/__init__.py
@@ -1 +1,11 @@
-"""Init file."""
+"""Query classes for tree indices."""
+
+from gpt_index.indices.query.tree.embedding_query import GPTTreeIndexEmbeddingQuery
+from gpt_index.indices.query.tree.leaf_query import GPTTreeIndexLeafQuery
+from gpt_index.indices.query.tree.retrieve_query import GPTTreeIndexRetQuery
+
+__all__ = [
+    "GPTTreeIndexLeafQuery",
+    "GPTTreeIndexRetQuery",
+    "GPTTreeIndexEmbeddingQuery",
+]
diff --git a/gpt_index/indices/query/tree/embedding_query.py b/gpt_index/indices/query/tree/embedding_query.py
index 7d474e0447..ba78dcbe32 100644
--- a/gpt_index/indices/query/tree/embedding_query.py
+++ b/gpt_index/indices/query/tree/embedding_query.py
@@ -16,6 +16,26 @@ class GPTTreeIndexEmbeddingQuery(GPTTreeIndexLeafQuery):
     This class traverses the index graph using the embedding similarity between the
     query and the node text.
 
+    .. code-block:: python
+
+        response = index.query("<query_str>", mode="embedding")
+
+    Args:
+        query_template (Optional[Prompt]): Tree Select Query Prompt
+            (see :ref:`Prompt-Templates`).
+        query_template_multiple (Optional[Prompt]): Tree Select Query Prompt (Multiple)
+            (see :ref:`Prompt-Templates`).
+        text_qa_template (Optional[Prompt]): Question-Answer Prompt
+            (see :ref:`Prompt-Templates`).
+        refine_template (Optional[Prompt]): Refinement Prompt
+            (see :ref:`Prompt-Templates`).
+        child_branch_factor (int): Number of child nodes to consider at each level.
+            If child_branch_factor is 1, then the query will only choose one child node
+            to traverse for any given parent node.
+            If child_branch_factor is 2, then the query will choose two child nodes.
+        embed_model (Optional[OpenAIEmbedding]): Embedding model to use for
+            embedding similarity.
+
     """
 
     def __init__(
diff --git a/gpt_index/indices/query/tree/leaf_query.py b/gpt_index/indices/query/tree/leaf_query.py
index b76d388981..80531d38a0 100644
--- a/gpt_index/indices/query/tree/leaf_query.py
+++ b/gpt_index/indices/query/tree/leaf_query.py
@@ -20,6 +20,24 @@ class GPTTreeIndexLeafQuery(BaseGPTIndexQuery[IndexGraph]):
     This class traverses the index graph and searches for a leaf node that can best
     answer the query.
 
+    .. code-block:: python
+
+        response = index.query("<query_str>", mode="default")
+
+    Args:
+        query_template (Optional[Prompt]): Tree Select Query Prompt
+            (see :ref:`Prompt-Templates`).
+        query_template_multiple (Optional[Prompt]): Tree Select Query Prompt (Multiple)
+            (see :ref:`Prompt-Templates`).
+        text_qa_template (Optional[Prompt]): Question-Answer Prompt
+            (see :ref:`Prompt-Templates`).
+        refine_template (Optional[Prompt]): Refinement Prompt
+            (see :ref:`Prompt-Templates`).
+        child_branch_factor (int): Number of child nodes to consider at each level.
+            If child_branch_factor is 1, then the query will only choose one child node
+            to traverse for any given parent node.
+            If child_branch_factor is 2, then the query will choose two child nodes.
+
     """
 
     def __init__(
diff --git a/gpt_index/indices/query/tree/retrieve_query.py b/gpt_index/indices/query/tree/retrieve_query.py
index f7f9cad538..bc22bebf51 100644
--- a/gpt_index/indices/query/tree/retrieve_query.py
+++ b/gpt_index/indices/query/tree/retrieve_query.py
@@ -19,6 +19,14 @@ class GPTTreeIndexRetQuery(BaseGPTIndexQuery[IndexGraph]):
     the answer (because it was constructed with a query_str), so it does not
     attempt to parse information down the graph in order to synthesize an answer.
 
+    .. code-block:: python
+
+        response = index.query("<query_str>", mode="retrieve")
+
+    Args:
+        text_qa_template (Optional[Prompt]): Question-Answer Prompt
+            (see :ref:`Prompt-Templates`).
+
     """
 
     def __init__(
diff --git a/gpt_index/indices/tree/__init__.py b/gpt_index/indices/tree/__init__.py
index 1d4640565a..c13b792b07 100644
--- a/gpt_index/indices/tree/__init__.py
+++ b/gpt_index/indices/tree/__init__.py
@@ -1 +1,8 @@
-"""Init file."""
+"""Tree-structured Index Data Structures."""
+
+# indices
+from gpt_index.indices.tree.base import GPTTreeIndex
+
+__all__ = [
+    "GPTTreeIndex",
+]
diff --git a/gpt_index/indices/tree/base.py b/gpt_index/indices/tree/base.py
index 18b7c99bf4..a946c4e831 100644
--- a/gpt_index/indices/tree/base.py
+++ b/gpt_index/indices/tree/base.py
@@ -119,7 +119,23 @@ class GPTTreeIndexBuilder:
 
 
 class GPTTreeIndex(BaseGPTIndex[IndexGraph]):
-    """GPT Index."""
+    """GPT Tree Index.
+
+    The tree index is a tree-structured index, where each node is a summary of
+    the children nodes. During index construction, the tree is constructed
+    in a bottoms-up fashion until we end up with a set of root_nodes.
+
+    There are a few different options during query time (see :ref:`Ref-Query`).
+    The main option is to traverse down the tree from the root nodes.
+    A secondary answer is to directly synthesize the answer from the root nodes.
+
+    Args:
+        summary_template (Optional[Prompt]): A Summarization Prompt
+            (see :ref:`Prompt-Templates`).
+        insert_prompt (Optional[Prompt]): An Tree Insertion Prompt
+            (see :ref:`Prompt-Templates`).
+
+    """
 
     index_struct_cls = IndexGraph
 
diff --git a/gpt_index/langchain_helpers/chain_wrapper.py b/gpt_index/langchain_helpers/chain_wrapper.py
index 23a7c99570..390dff4c63 100644
--- a/gpt_index/langchain_helpers/chain_wrapper.py
+++ b/gpt_index/langchain_helpers/chain_wrapper.py
@@ -9,14 +9,34 @@ from gpt_index.prompts.base import Prompt
 
 
 class LLMPredictor:
-    """LLM predictor class."""
+    """LLM predictor class.
+
+    Wrapper around an LLMChain from Langchain.
+
+    Args:
+        llm (Optional[LLM]): LLM from Langchain to use for predictions.
+            Defaults to OpenAI's text-davinci-002 model.
+            Please see
+            `Langchain's LLM Page
+            <https://langchain.readthedocs.io/en/latest/modules/llms.html>`_
+            for more details.
+
+    """
 
     def __init__(self, llm: Optional[LLM] = None) -> None:
         """Initialize params."""
         self._llm = llm or OpenAI(temperature=0, model_name="text-davinci-002")
 
     def predict(self, prompt: Prompt, **prompt_args: Any) -> Tuple[str, str]:
-        """Predict the answer to a query."""
+        """Predict the answer to a query.
+
+        Args:
+            prompt (Prompt): Prompt to use for prediction.
+
+        Returns:
+            Tuple[str, str]: Tuple of the predicted answer and the formatted prompt.
+
+        """
         llm_chain = LLMChain(prompt=prompt, llm=self._llm)
 
         formatted_prompt = prompt.format(**prompt_args)
diff --git a/gpt_index/prompts/__init__.py b/gpt_index/prompts/__init__.py
index 1d4640565a..70a9a06c14 100644
--- a/gpt_index/prompts/__init__.py
+++ b/gpt_index/prompts/__init__.py
@@ -1 +1,5 @@
-"""Init file."""
+"""Prompt class."""
+
+from gpt_index.prompts.base import Prompt
+
+__all__ = ["Prompt"]
diff --git a/gpt_index/readers/__init__.py b/gpt_index/readers/__init__.py
index 04de8b7ec7..0fd7ca35c0 100644
--- a/gpt_index/readers/__init__.py
+++ b/gpt_index/readers/__init__.py
@@ -1 +1,25 @@
-"""Init file for readers."""
+"""Data Connectors for GPT Index.
+
+This module contains the data connectors for GPT Index. Each connector inherits
+from a `BaseReader` class, connects to a data source, and loads BaseDocument objects
+from that data source.
+
+"""
+
+# readers
+from gpt_index.readers.file import SimpleDirectoryReader
+from gpt_index.readers.google.gdocs import GoogleDocsReader
+from gpt_index.readers.mongo import SimpleMongoReader
+from gpt_index.readers.notion import NotionPageReader
+from gpt_index.readers.slack import SlackReader
+from gpt_index.readers.wikipedia import WikipediaReader
+
+__all__ = [
+    "WikipediaReader",
+    "SimpleDirectoryReader",
+    "SimpleMongoReader",
+    "NotionPageReader",
+    "GoogleDocsReader",
+    "SlackReader",
+    "LLMPredictor",
+]
diff --git a/gpt_index/readers/file.py b/gpt_index/readers/file.py
index ea20cd2ea0..f9ca48c17e 100644
--- a/gpt_index/readers/file.py
+++ b/gpt_index/readers/file.py
@@ -12,6 +12,9 @@ class SimpleDirectoryReader(BaseReader):
     Can read files into separate documents, or concatenates
     files into one document text.
 
+    input_dir (str): Path to the directory.
+    exclude_hidden (bool): Whether to exclude hidden files (dotfiles).
+
     """
 
     def __init__(self, input_dir: str, exclude_hidden: bool = True) -> None:
@@ -26,7 +29,15 @@ class SimpleDirectoryReader(BaseReader):
         self.input_files = input_files
 
     def load_data(self, **load_kwargs: Any) -> List[Document]:
-        """Load data from the input directory."""
+        """Load data from the input directory.
+
+        Args:
+            concatenate (bool): whether to concatenate all files into one document.
+
+        Returns:
+            List[Document]: A list of documents.
+
+        """
         concatenate = load_kwargs.get("concatenate", True)
         data = ""
         data_list = []
diff --git a/gpt_index/readers/mongo.py b/gpt_index/readers/mongo.py
index 16a5b24c20..7404223e88 100644
--- a/gpt_index/readers/mongo.py
+++ b/gpt_index/readers/mongo.py
@@ -11,6 +11,11 @@ class SimpleMongoReader(BaseReader):
 
     Concatenates each Mongo doc into Document used by GPT Index.
 
+    Args:
+        host (str): Mongo host.
+        port (int): Mongo port.
+        max_docs (int): Maximum number of documents to load.
+
     """
 
     def __init__(self, host: str, port: int, max_docs: int = 1000) -> None:
@@ -43,7 +48,16 @@ class SimpleMongoReader(BaseReader):
         return documents
 
     def load_data(self, **load_kwargs: Any) -> List[Document]:
-        """Load data from the input directory."""
+        """Load data from the input directory.
+
+        Args:
+            db_name (str): name of the database.
+            collection_name (str): name of the collection.
+
+        Returns:
+            List[Document]: A list of documents.
+
+        """
         if "db_name" not in load_kwargs:
             raise ValueError("`db_name` not found in load_kwargs.")
         else:
diff --git a/gpt_index/readers/notion.py b/gpt_index/readers/notion.py
index 8fc9855059..1bec6a4fd8 100644
--- a/gpt_index/readers/notion.py
+++ b/gpt_index/readers/notion.py
@@ -18,6 +18,9 @@ class NotionPageReader(BaseReader):
 
     Reads a set of Notion pages.
 
+    Args:
+        integration_token (str): Notion integration token.
+
     """
 
     def __init__(self, integration_token: Optional[str] = None) -> None:
@@ -115,7 +118,15 @@ class NotionPageReader(BaseReader):
         return page_ids
 
     def load_data(self, **load_kwargs: Any) -> List[Document]:
-        """Load data from the input directory."""
+        """Load data from the input directory.
+
+        Args:
+            page_ids (List[str]): List of page ids to load.
+
+        Returns:
+            List[Document]: List of documents.
+
+        """
         if "page_ids" not in load_kwargs:
             raise ValueError('Must specify a "page_ids" in `load_kwargs`.')
         docs = []
diff --git a/gpt_index/readers/slack.py b/gpt_index/readers/slack.py
index 73cae8651d..3fd22a4978 100644
--- a/gpt_index/readers/slack.py
+++ b/gpt_index/readers/slack.py
@@ -14,6 +14,10 @@ class SlackReader(BaseReader):
 
     Reads conversations from channels.
 
+    Args:
+        slack_token (Optional[str]): Slack token. If not provided, we
+            assume the environment variable `SLACK_BOT_TOKEN` is set.
+
     """
 
     def __init__(self, slack_token: Optional[str] = None) -> None:
@@ -100,7 +104,15 @@ class SlackReader(BaseReader):
         return "\n\n".join(result_messages)
 
     def load_data(self, **load_kwargs: Any) -> List[Document]:
-        """Load data from the input directory."""
+        """Load data from the input directory.
+
+        Args:
+            channel_ids (List[str]): List of channel ids to read.
+
+        Returns:
+            List[Document]: List of documents.
+
+        """
         channel_ids = load_kwargs.pop("channel_ids", None)
         if channel_ids is None:
             raise ValueError('Must specify a "channel_id" in `load_kwargs`.')
diff --git a/gpt_index/readers/wikipedia.py b/gpt_index/readers/wikipedia.py
index fd361aa1db..2db0fb0cd4 100644
--- a/gpt_index/readers/wikipedia.py
+++ b/gpt_index/readers/wikipedia.py
@@ -22,7 +22,12 @@ class WikipediaReader(BaseReader):
             )
 
     def load_data(self, **load_kwargs: Any) -> List[Document]:
-        """Load data from the input directory."""
+        """Load data from the input directory.
+
+        Args:
+            pages (List[str]): List of pages to read.
+
+        """
         import wikipedia
 
         pages: List[str] = load_kwargs.pop("pages", None)
diff --git a/tests/indices/list/__init__.py b/tests/indices/list/__init__.py
index 1d4640565a..b24c607f33 100644
--- a/tests/indices/list/__init__.py
+++ b/tests/indices/list/__init__.py
@@ -1 +1,7 @@
-"""Init file."""
+"""List-based data structures."""
+
+from gpt_index.indices.list.base import GPTListIndex
+
+__all__ = [
+    "GPTListIndex",
+]
-- 
GitLab