diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml
index 39763513..bfa62f7a 100644
--- a/docs/mkdocs.yml
+++ b/docs/mkdocs.yml
@@ -1,10 +1,16 @@
-site_name: LanceDB Documentation
+site_name: LanceDB Docs
+repo_url: https://github.com/lancedb/lancedb
+repo_name: lancedb/lancedb
docs_dir: src
theme:
name: "material"
+ logo: assets/logo.png
features:
- content.code.copy
+ - content.tabs.link
+ icon:
+ repo: fontawesome/brands/github
plugins:
- search
@@ -14,20 +20,33 @@ plugins:
paths: [../python]
- mkdocs-jupyter
-nav:
-- Home: index.md
-- Basics: basic.md
-- Embeddings: embedding.md
-- Indexing: ann_indexes.md
-- Full-text search: fts.md
-- Integrations: integrations.md
-- Python API: python.md
-
markdown_extensions:
+- admonition
+- pymdownx.superfences
+- pymdownx.details
- pymdownx.highlight:
anchor_linenums: true
line_spans: __span
pygments_lang_class: true
- pymdownx.inlinehilite
- pymdownx.snippets
-- pymdownx.superfences
\ No newline at end of file
+- pymdownx.superfences
+- pymdownx.tabbed:
+ alternate_style: true
+
+nav:
+- Home: index.md
+- Basics: basic.md
+- Embeddings: embedding.md
+- Indexing: ann_indexes.md
+- Python full-text search: fts.md
+- Python integrations: integrations.md
+- Python examples:
+ - YouTube Transcript Search using OpenAI: notebooks/youtube_transcript_search.ipynb
+ - Documentation QA Bot using LangChain: notebooks/code_qa_bot.ipynb
+- API references:
+ - Python API: python/python.md
+ - Javascript API: javascript/modules.md
+
+extra_css:
+ - styles/global.css
\ No newline at end of file
diff --git a/docs/src/ann_indexes.md b/docs/src/ann_indexes.md
index 205bfa50..050247e5 100644
--- a/docs/src/ann_indexes.md
+++ b/docs/src/ann_indexes.md
@@ -12,24 +12,38 @@ In the future we will look to automatically create and configure the ANN index.
## Creating an ANN Index
-Creating indexes is done via the [create_index](https://lancedb.github.io/lancedb/python/#lancedb.table.LanceTable.create_index) method.
+=== "Python"
+ Creating indexes is done via the [create_index](https://lancedb.github.io/lancedb/python/#lancedb.table.LanceTable.create_index) method.
-```python
-import lancedb
-import numpy as np
-uri = "~/.lancedb"
-db = lancedb.connect(uri)
+ ```python
+ import lancedb
+ import numpy as np
+ uri = "~/.lancedb"
+ db = lancedb.connect(uri)
-# Create 10,000 sample vectors
-data = [{"vector": row, "item": f"item {i}"}
- for i, row in enumerate(np.random.random((10_000, 768)).astype('float32'))]
+ # Create 10,000 sample vectors
+ data = [{"vector": row, "item": f"item {i}"}
+ for i, row in enumerate(np.random.random((10_000, 768)).astype('float32'))]
-# Add the vectors to a table
-tbl = db.create_table("my_vectors", data=data)
+ # Add the vectors to a table
+ tbl = db.create_table("my_vectors", data=data)
-# Create and train the index - you need to have enough data in the table for an effective training step
-tbl.create_index(num_partitions=256, num_sub_vectors=96)
-```
+ # Create and train the index - you need to have enough data in the table for an effective training step
+ tbl.create_index(num_partitions=256, num_sub_vectors=96)
+ ```
+
+=== "Javascript"
+ ```javascript
+ const vectordb = require('vectordb')
+ const db = await vectordb.connect('data/sample-lancedb')
+
+ let data = []
+ for (let i = 0; i < 10_000; i++) {
+ data.push({vector: Array(1536).fill(i), id: `${i}`, content: "", longId: `${i}`},)
+ }
+ const table = await db.createTable('vectors', data)
+ await table.create_index({ type: 'ivf_pq', column: 'vector', num_partitions: 256, num_sub_vectors: 96 })
+ ```
Since `create_index` has a training step, it can take a few minutes to finish for large tables. You can control the index
creation by providing the following parameters:
@@ -57,18 +71,28 @@ There are a couple of parameters that can be used to fine-tune the search:
e.g., for 1M vectors divided into 256 partitions, if you're looking for top 20, then refine_factor=200 reranks the whole partition.
Note: refine_factor is only applicable if an ANN index is present. If specified on a table without an ANN index, it is ignored.
-
-```python
-tbl.search(np.random.random((768))) \
- .limit(2) \
- .nprobes(20) \
- .refine_factor(10) \
- .to_df()
+=== "Python"
+ ```python
+ tbl.search(np.random.random((768))) \
+ .limit(2) \
+ .nprobes(20) \
+ .refine_factor(10) \
+ .to_df()
vector item score
-0 [0.44949695, 0.8444449, 0.06281311, 0.23338133... item 1141 103.575333
-1 [0.48587373, 0.269207, 0.15095535, 0.65531915,... item 3953 108.393867
-```
+ 0 [0.44949695, 0.8444449, 0.06281311, 0.23338133... item 1141 103.575333
+ 1 [0.48587373, 0.269207, 0.15095535, 0.65531915,... item 3953 108.393867
+ ```
+
+=== "Javascript"
+ ```javascript
+ const results = await table
+ .search(Array(1536).fill(1.2))
+ .limit(2)
+ .nprobes(20)
+ .refineFactor(10)
+ .execute()
+ ```
The search will return the data requested in addition to the score of each item.
@@ -78,18 +102,31 @@ The search will return the data requested in addition to the score of each item.
You can further filter the elements returned by a search using a where clause.
-```python
-tbl.search(np.random.random((768))).where("item != 'item 1141'").to_df()
-```
+=== "Python"
+ ```python
+ tbl.search(np.random.random((768))).where("item != 'item 1141'").to_df()
+ ```
+
+=== "Javascript"
+ ```javascript
+ const results = await table
+ .search(Array(1536).fill(1.2))
+ .where("item != 'item 1141'")
+ .execute()
+ ```
### Projections (select clause)
You can select the columns returned by the query using a select clause.
-```python
-tbl.search(np.random.random((768))).select(["vector"]).to_df()
- vector score
-0 [0.30928212, 0.022668175, 0.1756372, 0.4911822... 93.971092
-1 [0.2525465, 0.01723831, 0.261568, 0.002007689,... 95.173485
-...
-```
+=== "Python"
+ ```python
+ tbl.search(np.random.random((768))).select(["vector"]).to_df()
+ vector score
+ 0 [0.30928212, 0.022668175, 0.1756372, 0.4911822... 93.971092
+ 1 [0.2525465, 0.01723831, 0.261568, 0.002007689,... 95.173485
+ ...
+ ```
+
+=== "Javascript"
+ Projections are not currently supported in the Javascript SDK.
diff --git a/docs/src/assets/lancedb_embedded_explanation.png b/docs/src/assets/lancedb_embedded_explanation.png
new file mode 100644
index 00000000..cb59c662
Binary files /dev/null and b/docs/src/assets/lancedb_embedded_explanation.png differ
diff --git a/docs/src/assets/lancedb_local_data_explanation.png b/docs/src/assets/lancedb_local_data_explanation.png
new file mode 100644
index 00000000..9b7cc7cd
Binary files /dev/null and b/docs/src/assets/lancedb_local_data_explanation.png differ
diff --git a/docs/src/assets/logo.png b/docs/src/assets/logo.png
new file mode 100644
index 00000000..5ecddb23
Binary files /dev/null and b/docs/src/assets/logo.png differ
diff --git a/docs/src/basic.md b/docs/src/basic.md
index 1151dd1c..21638fb8 100644
--- a/docs/src/basic.md
+++ b/docs/src/basic.md
@@ -1,74 +1,142 @@
# Basic LanceDB Functionality
+We'll cover the basics of using LanceDB on your local machine in this section.
+
+??? info "LanceDB runs embedded on your backend application, so there is no need to run a separate server."
+
+
+
+## Installation
+
+=== "Python"
+ ```shell
+ pip install lancedb
+ ```
+
+=== "Javascript"
+ ```shell
+ npm install vectordb
+ ```
+
## How to connect to a database
-In local mode, LanceDB stores data in a directory on your local machine. To connect to a local database, you can use the following code:
-```python
-import lancedb
-uri = "~/.lancedb"
-db = lancedb.connect(uri)
-```
+=== "Python"
+ ```python
+ import lancedb
+ uri = "~/.lancedb"
+ db = lancedb.connect(uri)
+ ```
-LanceDB will create the directory if it doesn't exist (including parent directories).
+ LanceDB will create the directory if it doesn't exist (including parent directories).
-If you need a reminder of the uri, use the `db.uri` property.
+ If you need a reminder of the uri, use the `db.uri` property.
+
+=== "Javascript"
+ ```javascript
+ const lancedb = require("vectordb");
+
+ const uri = "~./lancedb";
+ const db = await lancedb.connect(uri);
+ ```
+
+ LanceDB will create the directory if it doesn't exist (including parent directories).
+
+ If you need a reminder of the uri, you can call `db.uri()`.
## How to create a table
-To create a table, you can use the following code:
-```python
-tbl = db.create_table("my_table",
- data=[{"vector": [3.1, 4.1], "item": "foo", "price": 10.0},
- {"vector": [5.9, 26.5], "item": "bar", "price": 20.0}])
-```
+=== "Python"
+ ```python
+ tbl = db.create_table("my_table",
+ data=[{"vector": [3.1, 4.1], "item": "foo", "price": 10.0},
+ {"vector": [5.9, 26.5], "item": "bar", "price": 20.0}])
+ ```
-Under the hood, LanceDB is converting the input data into an Apache Arrow table
-and persisting it to disk in [Lance format](github.com/eto-ai/lance).
+ If the table already exists, LanceDB will raise an error by default.
+ If you want to overwrite the table, you can pass in `mode="overwrite"`
+ to the `create_table` method.
-If the table already exists, LanceDB will raise an error by default.
-If you want to overwrite the table, you can pass in `mode="overwrite"`
-to the `create_table` method.
+ You can also pass in a pandas DataFrame directly:
+ ```python
+ import pandas as pd
+ df = pd.DataFrame([{"vector": [3.1, 4.1], "item": "foo", "price": 10.0},
+ {"vector": [5.9, 26.5], "item": "bar", "price": 20.0}])
+ tbl = db.create_table("table_from_df", data=df)
+ ```
-You can also pass in a pandas DataFrame directly:
-```python
-import pandas as pd
-df = pd.DataFrame([{"vector": [3.1, 4.1], "item": "foo", "price": 10.0},
- {"vector": [5.9, 26.5], "item": "bar", "price": 20.0}])
-tbl = db.create_table("table_from_df", data=df)
-```
+=== "Javascript"
+ ```javascript
+ const tb = await db.createTable("my_table",
+ data=[{"vector": [3.1, 4.1], "item": "foo", "price": 10.0},
+ {"vector": [5.9, 26.5], "item": "bar", "price": 20.0}])
+ ```
+
+!!! warning
+
+ If the table already exists, LanceDB will raise an error by default.
+ If you want to overwrite the table, you can pass in `mode="overwrite"`
+ to the `createTable` function.
+
+??? info "Under the hood, LanceDB is converting the input data into an Apache Arrow table and persisting it to disk in [Lance format](https://www.github.com/lancedb/lance)."
## How to open an existing table
Once created, you can open a table using the following code:
-```python
-tbl = db.open_table("my_table")
-```
-If you forget the name of your table, you can always get a listing of all table names:
+=== "Python"
+ ```python
+ tbl = db.open_table("my_table")
+ ```
-```python
-db.table_names()
-```
+ If you forget the name of your table, you can always get a listing of all table names:
+
+ ```python
+ print(db.table_names())
+ ```
+
+=== "Javascript"
+ ```javascript
+ const tbl = await db.openTable("my_table");
+ ```
+
+ If you forget the name of your table, you can always get a listing of all table names:
+
+ ```javascript
+ console.log(db.tableNames());
+ ```
## How to add data to a table
After a table has been created, you can always add more data to it using
-```python
-df = pd.DataFrame([{"vector": [1.3, 1.4], "item": "fizz", "price": 100.0},
- {"vector": [9.5, 56.2], "item": "buzz", "price": 200.0}])
-tbl.add(df)
-```
+=== "Python"
+ ```python
+ df = pd.DataFrame([{"vector": [1.3, 1.4], "item": "fizz", "price": 100.0},
+ {"vector": [9.5, 56.2], "item": "buzz", "price": 200.0}])
+ tbl.add(df)
+ ```
+
+=== "Javascript"
+ ```javascript
+ await tbl.add([vector: [1.3, 1.4], item: "fizz", price: 100.0},
+ {vector: [9.5, 56.2], item: "buzz", price: 200.0}])
+ ```
## How to search for (approximate) nearest neighbors
Once you've embedded the query, you can find its nearest neighbors using the following code:
-```python
-tbl.search([100, 100]).limit(2).to_df()
-```
+=== "Python"
+ ```python
+ tbl.search([100, 100]).limit(2).to_df()
+ ```
-This returns a pandas DataFrame with the results.
+ This returns a pandas DataFrame with the results.
+
+=== "Javascript"
+ ```javascript
+ const query = await tbl.search([100, 100]).limit(2).execute();
+ ```
## What's next
diff --git a/docs/src/embedding.md b/docs/src/embedding.md
index 41096514..7ebadf8f 100644
--- a/docs/src/embedding.md
+++ b/docs/src/embedding.md
@@ -25,55 +25,88 @@ def embed_func(batch):
return [model.encode(sentence) for sentence in batch]
```
+Please note that currently HuggingFace is only supported in the Python SDK.
+
### OpenAI example
You can also use an external API like OpenAI to generate embeddings
-```python
-import openai
-import os
+=== "Python"
+ ```python
+ import openai
+ import os
-# Configuring the environment variable OPENAI_API_KEY
-if "OPENAI_API_KEY" not in os.environ:
- # OR set the key here as a variable
- openai.api_key = "sk-..."
+ # Configuring the environment variable OPENAI_API_KEY
+ if "OPENAI_API_KEY" not in os.environ:
+ # OR set the key here as a variable
+ openai.api_key = "sk-..."
-# verify that the API key is working
-assert len(openai.Model.list()["data"]) > 0
+ # verify that the API key is working
+ assert len(openai.Model.list()["data"]) > 0
-def embed_func(c):
- rs = openai.Embedding.create(input=c, engine="text-embedding-ada-002")
- return [record["embedding"] for record in rs["data"]]
-```
+ def embed_func(c):
+ rs = openai.Embedding.create(input=c, engine="text-embedding-ada-002")
+ return [record["embedding"] for record in rs["data"]]
+ ```
+
+=== "Javascript"
+ ```javascript
+ const lancedb = require("vectordb");
+
+ // You need to provide an OpenAI API key
+ const apiKey = "sk-..."
+ // The embedding function will create embeddings for the 'text' column
+ const embedding = new lancedb.OpenAIEmbeddingFunction('text', apiKey)
+ ```
## Applying an embedding function
-Using an embedding function, you can apply it to raw data
-to generate embeddings for each row.
+=== "Python"
+ Using an embedding function, you can apply it to raw data
+ to generate embeddings for each row.
-Say if you have a pandas DataFrame with a `text` column that you want to be embedded,
-you can use the [with_embeddings](https://lancedb.github.io/lancedb/python/#lancedb.embeddings.with_embeddings)
-function to generate embeddings and add create a combined pyarrow table:
+ Say if you have a pandas DataFrame with a `text` column that you want to be embedded,
+ you can use the [with_embeddings](https://lancedb.github.io/lancedb/python/#lancedb.embeddings.with_embeddings)
+ function to generate embeddings and add create a combined pyarrow table:
-```python
-import pandas as pd
-from lancedb.embeddings import with_embeddings
-df = pd.DataFrame([{"text": "pepperoni"},
- {"text": "pineapple"}])
-data = with_embeddings(embed_func, df)
+ ```python
+ import pandas as pd
+ from lancedb.embeddings import with_embeddings
-# The output is used to create / append to a table
-# db.create_table("my_table", data=data)
-```
+ df = pd.DataFrame([{"text": "pepperoni"},
+ {"text": "pineapple"}])
+ data = with_embeddings(embed_func, df)
-If your data is in a different column, you can specify the `column` kwarg to `with_embeddings`.
+ # The output is used to create / append to a table
+ # db.create_table("my_table", data=data)
+ ```
-By default, LanceDB calls the function with batches of 1000 rows. This can be configured
-using the `batch_size` parameter to `with_embeddings`.
+ If your data is in a different column, you can specify the `column` kwarg to `with_embeddings`.
+
+ By default, LanceDB calls the function with batches of 1000 rows. This can be configured
+ using the `batch_size` parameter to `with_embeddings`.
+
+ LanceDB automatically wraps the function with retry and rate-limit logic to ensure the OpenAI
+ API call is reliable.
+
+=== "Javascript"
+ Using an embedding function, you can apply it to raw data
+ to generate embeddings for each row.
+
+ You can just pass the embedding function created previously and LanceDB will automatically generate
+ embededings for your data.
+
+ ```javascript
+ const db = await lancedb.connect("/tmp/lancedb");
+ const data = [
+ { text: 'pepperoni' },
+ { text: 'pineapple' }
+ ]
+
+ const table = await db.createTable('vectors', data, embedding)
+ ```
-LanceDB automatically wraps the function with retry and rate-limit logic to ensure the OpenAI
-API call is reliable.
## Searching with an embedding function
@@ -81,13 +114,25 @@ At inference time, you also need the same embedding function to embed your query
It's important that you use the same model / function otherwise the embedding vectors don't
belong in the same latent space and your results will be nonsensical.
-```python
-query = "What's the best pizza topping?"
-query_vector = embed_func([query])[0]
-tbl.search(query_vector).limit(10).to_df()
-```
+=== "Python"
+ ```python
+ query = "What's the best pizza topping?"
+ query_vector = embed_func([query])[0]
+ tbl.search(query_vector).limit(10).to_df()
+ ```
+
+ The above snippet returns a pandas DataFrame with the 10 closest vectors to the query.
+
+=== "Javascript"
+ ```javascript
+ const results = await table
+ .search('What's the best pizza topping?')
+ .limit(10)
+ .execute()
+ ```
+
+ The above snippet returns an array of records with the 10 closest vectors to the query.
-The above snippet returns a pandas DataFrame with the 10 closest vectors to the query.
## Roadmap
diff --git a/docs/src/examples/modal.py b/docs/src/examples/modal.py
new file mode 100644
index 00000000..07195639
--- /dev/null
+++ b/docs/src/examples/modal.py
@@ -0,0 +1,90 @@
+import sys
+from modal import Secret, Stub, Image
+import lancedb
+import re
+import pickle
+from pathlib import Path
+
+from langchain.document_loaders import UnstructuredHTMLLoader
+from langchain.embeddings import OpenAIEmbeddings
+from langchain.text_splitter import RecursiveCharacterTextSplitter
+from langchain.vectorstores import LanceDB
+from langchain.llms import OpenAI
+from langchain.chains import RetrievalQA
+
+lancedb_image = Image.debian_slim().pip_install("lancedb", "langchain", "openai", "tiktoken")
+
+stub = Stub(
+ name="example-langchain-lancedb",
+ image=lancedb_image,
+ secrets=[Secret.from_name("my-openai-secret")],
+)
+
+docsearch = None
+docs_path = Path("docs.pkl")
+db_path = Path("lancedb")
+doc_cache = []
+
+def get_document_title(document):
+ m = str(document.metadata["source"])
+ title = re.findall("pandas.documentation(.*).html", m)
+ if title[0] is not None:
+ return(title[0])
+ return ''
+
+def store_docs():
+ docs = []
+
+ if not docs_path.exists():
+ for p in Path("./pandas.documentation").rglob("*.html"):
+ if p.is_dir():
+ continue
+ loader = UnstructuredHTMLLoader(p)
+ raw_document = loader.load()
+
+ m = {}
+ m["title"] = get_document_title(raw_document[0])
+ m["version"] = "2.0rc0"
+ raw_document[0].metadata = raw_document[0].metadata | m
+ raw_document[0].metadata["source"] = str(raw_document[0].metadata["source"])
+ docs = docs + raw_document
+
+ with docs_path.open("wb") as fh:
+ pickle.dump(docs, fh)
+ else:
+ with docs_path.open("rb") as fh:
+ docs = pickle.load(fh)
+
+ doc_cache = docs
+
+def qanda_langchain(query):
+ store_docs()
+
+ text_splitter = RecursiveCharacterTextSplitter(
+ chunk_size=1000,
+ chunk_overlap=200,
+ )
+ documents = text_splitter.split_documents(doc_cache)
+ embeddings = OpenAIEmbeddings()
+
+ db = lancedb.connect(db_path)
+ table = db.create_table("pandas_docs", data=[
+ {"vector": embeddings.embed_query("Hello World")}
+ ], mode="overwrite")
+ docsearch = LanceDB.from_documents(documents, embeddings, connection=table)
+ qa = RetrievalQA.from_chain_type(llm=OpenAI(), chain_type="stuff", retriever=docsearch.as_retriever())
+ return qa.run(query)
+
+@stub.function()
+def cli(query: str, show_sources: bool = False):
+ answer = qanda_langchain(query)
+ # Terminal codes for pretty-printing.
+ bold, end = "\033[1m", "\033[0m"
+
+ print(f"🦜 {bold}ANSWER:{end}")
+ print(answer)
+ if show_sources:
+ print(f"🔗 {bold}SOURCES:{end}")
+ for text in sources:
+ print(text)
+ print("----")
diff --git a/docs/src/index.md b/docs/src/index.md
index 515ea78d..7d720e38 100644
--- a/docs/src/index.md
+++ b/docs/src/index.md
@@ -1,6 +1,6 @@
# Welcome to LanceDB's Documentation
-LanceDB is an open-source database for vector-search built with persistent storage, which greatly simplifies retrivial, filtering and management of embeddings.
+LanceDB is an open-source database for vector-search built with persistent storage, which greatly simplifies retrevial, filtering and management of embeddings.
The key features of LanceDB include:
@@ -8,37 +8,52 @@ The key features of LanceDB include:
* Store, query and filter vectors, metadata and multi-modal data (text, images, videos, point clouds, and more).
-* Native Python and Javascript/Typescript support (coming soon).
+* Native Python and Javascript/Typescript support.
* Zero-copy, automatic versioning, manage versions of your data without needing extra infrastructure.
* Ecosystem integrations with [LangChain 🦜️🔗](https://python.langchain.com/en/latest/modules/indexes/vectorstores/examples/lanecdb.html), [LlamaIndex 🦙](https://gpt-index.readthedocs.io/en/latest/examples/vector_stores/LanceDBIndexDemo.html), Apache-Arrow, Pandas, Polars, DuckDB and more on the way.
-LanceDB's core is written in Rust 🦀 and is built using Lance, an open-source columnar format designed for performant ML workloads.
+LanceDB's core is written in Rust 🦀 and is built using Lance, an open-source columnar format designed for performant ML workloads.
+## Quick Start
-## Installation
+=== "Python"
+ ```shell
+ pip install lancedb
+ ```
-```shell
-pip install lancedb
-```
+ ```python
+ import lancedb
-## Quickstart
+ uri = "/tmp/lancedb"
+ db = lancedb.connect(uri)
+ table = db.create_table("my_table",
+ data=[{"vector": [3.1, 4.1], "item": "foo", "price": 10.0},
+ {"vector": [5.9, 26.5], "item": "bar", "price": 20.0}])
+ result = table.search([100, 100]).limit(2).to_df()
+ ```
-```python
-import lancedb
+=== "Javascript"
+ ```shell
+ npm install vectordb
+ ```
-db = lancedb.connect(".")
-table = db.create_table("my_table",
- data=[{"vector": [3.1, 4.1], "item": "foo", "price": 10.0},
- {"vector": [5.9, 26.5], "item": "bar", "price": 20.0}])
-result = table.search([100, 100]).limit(2).to_df()
-```
+ ```javascript
+ const lancedb = require("vectordb");
+
+ const uri = "/tmp/lancedb";
+ const db = await lancedb.connect(uri);
+ const table = await db.createTable("my_table",
+ [{ id: 1, vector: [3.1, 4.1], item: "foo", price: 10.0 },
+ { id: 2, vector: [5.9, 26.5], item: "bar", price: 20.0 }])
+ const results = await table.search([100, 100]).limit(2).execute();
+ ```
## Complete Demos
We will be adding completed demo apps built using LanceDB.
-- [YouTube Transcript Search](../../notebooks/youtube_transcript_search.ipynb)
+- [YouTube Transcript Search](notebooks/youtube_transcript_search.ipynb)
## Documentation Quick Links
diff --git a/docs/src/javascript/.nojekyll b/docs/src/javascript/.nojekyll
new file mode 100644
index 00000000..e2ac6616
--- /dev/null
+++ b/docs/src/javascript/.nojekyll
@@ -0,0 +1 @@
+TypeDoc added this file to prevent GitHub Pages from using Jekyll. You can turn off this behavior by setting the `githubPages` option to false.
\ No newline at end of file
diff --git a/docs/src/javascript/README.md b/docs/src/javascript/README.md
new file mode 100644
index 00000000..4f9cd732
--- /dev/null
+++ b/docs/src/javascript/README.md
@@ -0,0 +1,51 @@
+vectordb / [Exports](modules.md)
+
+# LanceDB
+
+A JavaScript / Node.js library for [LanceDB](https://github.com/lancedb/lancedb).
+
+## Installation
+
+```bash
+npm install vectordb
+```
+
+## Usage
+
+### Basic Example
+
+```javascript
+const lancedb = require('vectordb');
+const db = lancedb.connect('');
+const table = await db.openTable('my_table');
+const query = await table.search([0.1, 0.3]).setLimit(20).execute();
+console.log(results);
+```
+
+The [examples](./examples) folder contains complete examples.
+
+## Development
+
+The LanceDB javascript is built with npm:
+
+```bash
+npm run tsc
+```
+
+Run the tests with
+
+```bash
+npm test
+```
+
+To run the linter and have it automatically fix all errors
+
+```bash
+npm run lint -- --fix
+```
+
+To build documentation
+
+```bash
+npx typedoc --plugin typedoc-plugin-markdown --out ../docs/src/javascript src/index.ts
+```
diff --git a/docs/src/javascript/classes/Connection.md b/docs/src/javascript/classes/Connection.md
new file mode 100644
index 00000000..092e94ab
--- /dev/null
+++ b/docs/src/javascript/classes/Connection.md
@@ -0,0 +1,211 @@
+[vectordb](../README.md) / [Exports](../modules.md) / Connection
+
+# Class: Connection
+
+A connection to a LanceDB database.
+
+## Table of contents
+
+### Constructors
+
+- [constructor](Connection.md#constructor)
+
+### Properties
+
+- [\_db](Connection.md#_db)
+- [\_uri](Connection.md#_uri)
+
+### Accessors
+
+- [uri](Connection.md#uri)
+
+### Methods
+
+- [createTable](Connection.md#createtable)
+- [createTableArrow](Connection.md#createtablearrow)
+- [openTable](Connection.md#opentable)
+- [tableNames](Connection.md#tablenames)
+
+## Constructors
+
+### constructor
+
+• **new Connection**(`db`, `uri`)
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `db` | `any` |
+| `uri` | `string` |
+
+#### Defined in
+
+[index.ts:46](https://github.com/lancedb/lancedb/blob/31dab97/node/src/index.ts#L46)
+
+## Properties
+
+### \_db
+
+• `Private` `Readonly` **\_db**: `any`
+
+#### Defined in
+
+[index.ts:44](https://github.com/lancedb/lancedb/blob/31dab97/node/src/index.ts#L44)
+
+___
+
+### \_uri
+
+• `Private` `Readonly` **\_uri**: `string`
+
+#### Defined in
+
+[index.ts:43](https://github.com/lancedb/lancedb/blob/31dab97/node/src/index.ts#L43)
+
+## Accessors
+
+### uri
+
+• `get` **uri**(): `string`
+
+#### Returns
+
+`string`
+
+#### Defined in
+
+[index.ts:51](https://github.com/lancedb/lancedb/blob/31dab97/node/src/index.ts#L51)
+
+## Methods
+
+### createTable
+
+▸ **createTable**(`name`, `data`): `Promise`<[`Table`](Table.md)<`number`[]\>\>
+
+Creates a new Table and initialize it with new data.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `name` | `string` | The name of the table. |
+| `data` | `Record`<`string`, `unknown`\>[] | Non-empty Array of Records to be inserted into the Table |
+
+#### Returns
+
+`Promise`<[`Table`](Table.md)<`number`[]\>\>
+
+#### Defined in
+
+[index.ts:91](https://github.com/lancedb/lancedb/blob/31dab97/node/src/index.ts#L91)
+
+▸ **createTable**<`T`\>(`name`, `data`, `embeddings`): `Promise`<[`Table`](Table.md)<`T`\>\>
+
+Creates a new Table and initialize it with new data.
+
+#### Type parameters
+
+| Name |
+| :------ |
+| `T` |
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `name` | `string` | The name of the table. |
+| `data` | `Record`<`string`, `unknown`\>[] | Non-empty Array of Records to be inserted into the Table |
+| `embeddings` | [`EmbeddingFunction`](../interfaces/EmbeddingFunction.md)<`T`\> | An embedding function to use on this Table |
+
+#### Returns
+
+`Promise`<[`Table`](Table.md)<`T`\>\>
+
+#### Defined in
+
+[index.ts:99](https://github.com/lancedb/lancedb/blob/31dab97/node/src/index.ts#L99)
+
+___
+
+### createTableArrow
+
+▸ **createTableArrow**(`name`, `table`): `Promise`<[`Table`](Table.md)<`number`[]\>\>
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `name` | `string` |
+| `table` | `Table`<`any`\> |
+
+#### Returns
+
+`Promise`<[`Table`](Table.md)<`number`[]\>\>
+
+#### Defined in
+
+[index.ts:109](https://github.com/lancedb/lancedb/blob/31dab97/node/src/index.ts#L109)
+
+___
+
+### openTable
+
+▸ **openTable**(`name`): `Promise`<[`Table`](Table.md)<`number`[]\>\>
+
+Open a table in the database.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `name` | `string` | The name of the table. |
+
+#### Returns
+
+`Promise`<[`Table`](Table.md)<`number`[]\>\>
+
+#### Defined in
+
+[index.ts:67](https://github.com/lancedb/lancedb/blob/31dab97/node/src/index.ts#L67)
+
+▸ **openTable**<`T`\>(`name`, `embeddings`): `Promise`<[`Table`](Table.md)<`T`\>\>
+
+Open a table in the database.
+
+#### Type parameters
+
+| Name |
+| :------ |
+| `T` |
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `name` | `string` | The name of the table. |
+| `embeddings` | [`EmbeddingFunction`](../interfaces/EmbeddingFunction.md)<`T`\> | An embedding function to use on this Table |
+
+#### Returns
+
+`Promise`<[`Table`](Table.md)<`T`\>\>
+
+#### Defined in
+
+[index.ts:74](https://github.com/lancedb/lancedb/blob/31dab97/node/src/index.ts#L74)
+
+___
+
+### tableNames
+
+▸ **tableNames**(): `Promise`<`string`[]\>
+
+Get the names of all tables in the database.
+
+#### Returns
+
+`Promise`<`string`[]\>
+
+#### Defined in
+
+[index.ts:58](https://github.com/lancedb/lancedb/blob/31dab97/node/src/index.ts#L58)
diff --git a/docs/src/javascript/classes/OpenAIEmbeddingFunction.md b/docs/src/javascript/classes/OpenAIEmbeddingFunction.md
new file mode 100644
index 00000000..d6087ed3
--- /dev/null
+++ b/docs/src/javascript/classes/OpenAIEmbeddingFunction.md
@@ -0,0 +1,105 @@
+[vectordb](../README.md) / [Exports](../modules.md) / OpenAIEmbeddingFunction
+
+# Class: OpenAIEmbeddingFunction
+
+An embedding function that automatically creates vector representation for a given column.
+
+## Implements
+
+- [`EmbeddingFunction`](../interfaces/EmbeddingFunction.md)<`string`\>
+
+## Table of contents
+
+### Constructors
+
+- [constructor](OpenAIEmbeddingFunction.md#constructor)
+
+### Properties
+
+- [\_modelName](OpenAIEmbeddingFunction.md#_modelname)
+- [\_openai](OpenAIEmbeddingFunction.md#_openai)
+- [sourceColumn](OpenAIEmbeddingFunction.md#sourcecolumn)
+
+### Methods
+
+- [embed](OpenAIEmbeddingFunction.md#embed)
+
+## Constructors
+
+### constructor
+
+• **new OpenAIEmbeddingFunction**(`sourceColumn`, `openAIKey`, `modelName?`)
+
+#### Parameters
+
+| Name | Type | Default value |
+| :------ | :------ | :------ |
+| `sourceColumn` | `string` | `undefined` |
+| `openAIKey` | `string` | `undefined` |
+| `modelName` | `string` | `'text-embedding-ada-002'` |
+
+#### Defined in
+
+[embedding/openai.ts:21](https://github.com/lancedb/lancedb/blob/31dab97/node/src/embedding/openai.ts#L21)
+
+## Properties
+
+### \_modelName
+
+• `Private` `Readonly` **\_modelName**: `string`
+
+#### Defined in
+
+[embedding/openai.ts:19](https://github.com/lancedb/lancedb/blob/31dab97/node/src/embedding/openai.ts#L19)
+
+___
+
+### \_openai
+
+• `Private` `Readonly` **\_openai**: `any`
+
+#### Defined in
+
+[embedding/openai.ts:18](https://github.com/lancedb/lancedb/blob/31dab97/node/src/embedding/openai.ts#L18)
+
+___
+
+### sourceColumn
+
+• **sourceColumn**: `string`
+
+The name of the column that will be used as input for the Embedding Function.
+
+#### Implementation of
+
+[EmbeddingFunction](../interfaces/EmbeddingFunction.md).[sourceColumn](../interfaces/EmbeddingFunction.md#sourcecolumn)
+
+#### Defined in
+
+[embedding/openai.ts:50](https://github.com/lancedb/lancedb/blob/31dab97/node/src/embedding/openai.ts#L50)
+
+## Methods
+
+### embed
+
+▸ **embed**(`data`): `Promise`<`number`[][]\>
+
+Creates a vector representation for the given values.
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `data` | `string`[] |
+
+#### Returns
+
+`Promise`<`number`[][]\>
+
+#### Implementation of
+
+[EmbeddingFunction](../interfaces/EmbeddingFunction.md).[embed](../interfaces/EmbeddingFunction.md#embed)
+
+#### Defined in
+
+[embedding/openai.ts:38](https://github.com/lancedb/lancedb/blob/31dab97/node/src/embedding/openai.ts#L38)
diff --git a/docs/src/javascript/classes/Query.md b/docs/src/javascript/classes/Query.md
new file mode 100644
index 00000000..da1fae5e
--- /dev/null
+++ b/docs/src/javascript/classes/Query.md
@@ -0,0 +1,299 @@
+[vectordb](../README.md) / [Exports](../modules.md) / Query
+
+# Class: Query
+
+A builder for nearest neighbor queries for LanceDB.
+
+## Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | `number`[] |
+
+## Table of contents
+
+### Constructors
+
+- [constructor](Query.md#constructor)
+
+### Properties
+
+- [\_columns](Query.md#_columns)
+- [\_embeddings](Query.md#_embeddings)
+- [\_filter](Query.md#_filter)
+- [\_limit](Query.md#_limit)
+- [\_metricType](Query.md#_metrictype)
+- [\_nprobes](Query.md#_nprobes)
+- [\_query](Query.md#_query)
+- [\_queryVector](Query.md#_queryvector)
+- [\_refineFactor](Query.md#_refinefactor)
+- [\_tbl](Query.md#_tbl)
+
+### Methods
+
+- [execute](Query.md#execute)
+- [filter](Query.md#filter)
+- [limit](Query.md#limit)
+- [metricType](Query.md#metrictype)
+- [nprobes](Query.md#nprobes)
+- [refineFactor](Query.md#refinefactor)
+
+## Constructors
+
+### constructor
+
+• **new Query**<`T`\>(`tbl`, `query`, `embeddings?`)
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | `number`[] |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `tbl` | `any` |
+| `query` | `T` |
+| `embeddings?` | [`EmbeddingFunction`](../interfaces/EmbeddingFunction.md)<`T`\> |
+
+#### Defined in
+
+[index.ts:241](https://github.com/lancedb/lancedb/blob/31dab97/node/src/index.ts#L241)
+
+## Properties
+
+### \_columns
+
+• `Private` `Optional` `Readonly` **\_columns**: `string`[]
+
+#### Defined in
+
+[index.ts:236](https://github.com/lancedb/lancedb/blob/31dab97/node/src/index.ts#L236)
+
+___
+
+### \_embeddings
+
+• `Private` `Optional` `Readonly` **\_embeddings**: [`EmbeddingFunction`](../interfaces/EmbeddingFunction.md)<`T`\>
+
+#### Defined in
+
+[index.ts:239](https://github.com/lancedb/lancedb/blob/31dab97/node/src/index.ts#L239)
+
+___
+
+### \_filter
+
+• `Private` `Optional` **\_filter**: `string`
+
+#### Defined in
+
+[index.ts:237](https://github.com/lancedb/lancedb/blob/31dab97/node/src/index.ts#L237)
+
+___
+
+### \_limit
+
+• `Private` **\_limit**: `number`
+
+#### Defined in
+
+[index.ts:233](https://github.com/lancedb/lancedb/blob/31dab97/node/src/index.ts#L233)
+
+___
+
+### \_metricType
+
+• `Private` `Optional` **\_metricType**: [`MetricType`](../enums/MetricType.md)
+
+#### Defined in
+
+[index.ts:238](https://github.com/lancedb/lancedb/blob/31dab97/node/src/index.ts#L238)
+
+___
+
+### \_nprobes
+
+• `Private` **\_nprobes**: `number`
+
+#### Defined in
+
+[index.ts:235](https://github.com/lancedb/lancedb/blob/31dab97/node/src/index.ts#L235)
+
+___
+
+### \_query
+
+• `Private` `Readonly` **\_query**: `T`
+
+#### Defined in
+
+[index.ts:231](https://github.com/lancedb/lancedb/blob/31dab97/node/src/index.ts#L231)
+
+___
+
+### \_queryVector
+
+• `Private` `Optional` **\_queryVector**: `number`[]
+
+#### Defined in
+
+[index.ts:232](https://github.com/lancedb/lancedb/blob/31dab97/node/src/index.ts#L232)
+
+___
+
+### \_refineFactor
+
+• `Private` `Optional` **\_refineFactor**: `number`
+
+#### Defined in
+
+[index.ts:234](https://github.com/lancedb/lancedb/blob/31dab97/node/src/index.ts#L234)
+
+___
+
+### \_tbl
+
+• `Private` `Readonly` **\_tbl**: `any`
+
+#### Defined in
+
+[index.ts:230](https://github.com/lancedb/lancedb/blob/31dab97/node/src/index.ts#L230)
+
+## Methods
+
+### execute
+
+▸ **execute**<`T`\>(): `Promise`<`T`[]\>
+
+Execute the query and return the results as an Array of Objects
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | `Record`<`string`, `unknown`\> |
+
+#### Returns
+
+`Promise`<`T`[]\>
+
+#### Defined in
+
+[index.ts:301](https://github.com/lancedb/lancedb/blob/31dab97/node/src/index.ts#L301)
+
+___
+
+### filter
+
+▸ **filter**(`value`): [`Query`](Query.md)<`T`\>
+
+A filter statement to be applied to this query.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `value` | `string` | A filter in the same format used by a sql WHERE clause. |
+
+#### Returns
+
+[`Query`](Query.md)<`T`\>
+
+#### Defined in
+
+[index.ts:284](https://github.com/lancedb/lancedb/blob/31dab97/node/src/index.ts#L284)
+
+___
+
+### limit
+
+▸ **limit**(`value`): [`Query`](Query.md)<`T`\>
+
+Sets the number of results that will be returned
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `value` | `number` | number of results |
+
+#### Returns
+
+[`Query`](Query.md)<`T`\>
+
+#### Defined in
+
+[index.ts:257](https://github.com/lancedb/lancedb/blob/31dab97/node/src/index.ts#L257)
+
+___
+
+### metricType
+
+▸ **metricType**(`value`): [`Query`](Query.md)<`T`\>
+
+The MetricType used for this Query.
+
+**`See`**
+
+MetricType for the different options
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `value` | [`MetricType`](../enums/MetricType.md) | The metric to the. |
+
+#### Returns
+
+[`Query`](Query.md)<`T`\>
+
+#### Defined in
+
+[index.ts:293](https://github.com/lancedb/lancedb/blob/31dab97/node/src/index.ts#L293)
+
+___
+
+### nprobes
+
+▸ **nprobes**(`value`): [`Query`](Query.md)<`T`\>
+
+The number of probes used. A higher number makes search more accurate but also slower.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `value` | `number` | The number of probes used. |
+
+#### Returns
+
+[`Query`](Query.md)<`T`\>
+
+#### Defined in
+
+[index.ts:275](https://github.com/lancedb/lancedb/blob/31dab97/node/src/index.ts#L275)
+
+___
+
+### refineFactor
+
+▸ **refineFactor**(`value`): [`Query`](Query.md)<`T`\>
+
+Refine the results by reading extra elements and re-ranking them in memory.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `value` | `number` | refine factor to use in this query. |
+
+#### Returns
+
+[`Query`](Query.md)<`T`\>
+
+#### Defined in
+
+[index.ts:266](https://github.com/lancedb/lancedb/blob/31dab97/node/src/index.ts#L266)
diff --git a/docs/src/javascript/classes/Table.md b/docs/src/javascript/classes/Table.md
new file mode 100644
index 00000000..5a28755f
--- /dev/null
+++ b/docs/src/javascript/classes/Table.md
@@ -0,0 +1,215 @@
+[vectordb](../README.md) / [Exports](../modules.md) / Table
+
+# Class: Table
+
+## Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | `number`[] |
+
+## Table of contents
+
+### Constructors
+
+- [constructor](Table.md#constructor)
+
+### Properties
+
+- [\_embeddings](Table.md#_embeddings)
+- [\_name](Table.md#_name)
+- [\_tbl](Table.md#_tbl)
+
+### Accessors
+
+- [name](Table.md#name)
+
+### Methods
+
+- [add](Table.md#add)
+- [create\_index](Table.md#create_index)
+- [overwrite](Table.md#overwrite)
+- [search](Table.md#search)
+
+## Constructors
+
+### constructor
+
+• **new Table**<`T`\>(`tbl`, `name`)
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | `number`[] |
+
+#### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `tbl` | `any` |
+| `name` | `string` |
+
+#### Defined in
+
+[index.ts:121](https://github.com/lancedb/lancedb/blob/31dab97/node/src/index.ts#L121)
+
+• **new Table**<`T`\>(`tbl`, `name`, `embeddings`)
+
+#### Type parameters
+
+| Name | Type |
+| :------ | :------ |
+| `T` | `number`[] |
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `tbl` | `any` | |
+| `name` | `string` | |
+| `embeddings` | [`EmbeddingFunction`](../interfaces/EmbeddingFunction.md)<`T`\> | An embedding function to use when interacting with this table |
+
+#### Defined in
+
+[index.ts:127](https://github.com/lancedb/lancedb/blob/31dab97/node/src/index.ts#L127)
+
+## Properties
+
+### \_embeddings
+
+• `Private` `Optional` `Readonly` **\_embeddings**: [`EmbeddingFunction`](../interfaces/EmbeddingFunction.md)<`T`\>
+
+#### Defined in
+
+[index.ts:119](https://github.com/lancedb/lancedb/blob/31dab97/node/src/index.ts#L119)
+
+___
+
+### \_name
+
+• `Private` `Readonly` **\_name**: `string`
+
+#### Defined in
+
+[index.ts:118](https://github.com/lancedb/lancedb/blob/31dab97/node/src/index.ts#L118)
+
+___
+
+### \_tbl
+
+• `Private` `Readonly` **\_tbl**: `any`
+
+#### Defined in
+
+[index.ts:117](https://github.com/lancedb/lancedb/blob/31dab97/node/src/index.ts#L117)
+
+## Accessors
+
+### name
+
+• `get` **name**(): `string`
+
+#### Returns
+
+`string`
+
+#### Defined in
+
+[index.ts:134](https://github.com/lancedb/lancedb/blob/31dab97/node/src/index.ts#L134)
+
+## Methods
+
+### add
+
+▸ **add**(`data`): `Promise`<`number`\>
+
+Insert records into this Table.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `data` | `Record`<`string`, `unknown`\>[] | Records to be inserted into the Table |
+
+#### Returns
+
+`Promise`<`number`\>
+
+The number of rows added to the table
+
+#### Defined in
+
+[index.ts:152](https://github.com/lancedb/lancedb/blob/31dab97/node/src/index.ts#L152)
+
+___
+
+### create\_index
+
+▸ **create_index**(`indexParams`): `Promise`<`any`\>
+
+Create an ANN index on this Table vector index.
+
+**`See`**
+
+VectorIndexParams.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `indexParams` | `IvfPQIndexConfig` | The parameters of this Index, |
+
+#### Returns
+
+`Promise`<`any`\>
+
+#### Defined in
+
+[index.ts:171](https://github.com/lancedb/lancedb/blob/31dab97/node/src/index.ts#L171)
+
+___
+
+### overwrite
+
+▸ **overwrite**(`data`): `Promise`<`number`\>
+
+Insert records into this Table, replacing its contents.
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `data` | `Record`<`string`, `unknown`\>[] | Records to be inserted into the Table |
+
+#### Returns
+
+`Promise`<`number`\>
+
+The number of rows added to the table
+
+#### Defined in
+
+[index.ts:162](https://github.com/lancedb/lancedb/blob/31dab97/node/src/index.ts#L162)
+
+___
+
+### search
+
+▸ **search**(`query`): [`Query`](Query.md)<`T`\>
+
+Creates a search query to find the nearest neighbors of the given search term
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `query` | `T` | The query search term |
+
+#### Returns
+
+[`Query`](Query.md)<`T`\>
+
+#### Defined in
+
+[index.ts:142](https://github.com/lancedb/lancedb/blob/31dab97/node/src/index.ts#L142)
diff --git a/docs/src/javascript/enums/MetricType.md b/docs/src/javascript/enums/MetricType.md
new file mode 100644
index 00000000..adced6a2
--- /dev/null
+++ b/docs/src/javascript/enums/MetricType.md
@@ -0,0 +1,36 @@
+[vectordb](../README.md) / [Exports](../modules.md) / MetricType
+
+# Enumeration: MetricType
+
+Distance metrics type.
+
+## Table of contents
+
+### Enumeration Members
+
+- [Cosine](MetricType.md#cosine)
+- [L2](MetricType.md#l2)
+
+## Enumeration Members
+
+### Cosine
+
+• **Cosine** = ``"cosine"``
+
+Cosine distance
+
+#### Defined in
+
+[index.ts:341](https://github.com/lancedb/lancedb/blob/31dab97/node/src/index.ts#L341)
+
+___
+
+### L2
+
+• **L2** = ``"l2"``
+
+Euclidean distance
+
+#### Defined in
+
+[index.ts:336](https://github.com/lancedb/lancedb/blob/31dab97/node/src/index.ts#L336)
diff --git a/docs/src/javascript/enums/WriteMode.md b/docs/src/javascript/enums/WriteMode.md
new file mode 100644
index 00000000..32a5c244
--- /dev/null
+++ b/docs/src/javascript/enums/WriteMode.md
@@ -0,0 +1,30 @@
+[vectordb](../README.md) / [Exports](../modules.md) / WriteMode
+
+# Enumeration: WriteMode
+
+## Table of contents
+
+### Enumeration Members
+
+- [Append](WriteMode.md#append)
+- [Overwrite](WriteMode.md#overwrite)
+
+## Enumeration Members
+
+### Append
+
+• **Append** = ``"append"``
+
+#### Defined in
+
+[index.ts:326](https://github.com/lancedb/lancedb/blob/31dab97/node/src/index.ts#L326)
+
+___
+
+### Overwrite
+
+• **Overwrite** = ``"overwrite"``
+
+#### Defined in
+
+[index.ts:325](https://github.com/lancedb/lancedb/blob/31dab97/node/src/index.ts#L325)
diff --git a/docs/src/javascript/interfaces/EmbeddingFunction.md b/docs/src/javascript/interfaces/EmbeddingFunction.md
new file mode 100644
index 00000000..85962de9
--- /dev/null
+++ b/docs/src/javascript/interfaces/EmbeddingFunction.md
@@ -0,0 +1,60 @@
+[vectordb](../README.md) / [Exports](../modules.md) / EmbeddingFunction
+
+# Interface: EmbeddingFunction
+
+An embedding function that automatically creates vector representation for a given column.
+
+## Type parameters
+
+| Name |
+| :------ |
+| `T` |
+
+## Implemented by
+
+- [`OpenAIEmbeddingFunction`](../classes/OpenAIEmbeddingFunction.md)
+
+## Table of contents
+
+### Properties
+
+- [embed](EmbeddingFunction.md#embed)
+- [sourceColumn](EmbeddingFunction.md#sourcecolumn)
+
+## Properties
+
+### embed
+
+• **embed**: (`data`: `T`[]) => `Promise`<`number`[][]\>
+
+#### Type declaration
+
+▸ (`data`): `Promise`<`number`[][]\>
+
+Creates a vector representation for the given values.
+
+##### Parameters
+
+| Name | Type |
+| :------ | :------ |
+| `data` | `T`[] |
+
+##### Returns
+
+`Promise`<`number`[][]\>
+
+#### Defined in
+
+[embedding/embedding_function.ts:27](https://github.com/lancedb/lancedb/blob/31dab97/node/src/embedding/embedding_function.ts#L27)
+
+___
+
+### sourceColumn
+
+• **sourceColumn**: `string`
+
+The name of the column that will be used as input for the Embedding Function.
+
+#### Defined in
+
+[embedding/embedding_function.ts:22](https://github.com/lancedb/lancedb/blob/31dab97/node/src/embedding/embedding_function.ts#L22)
diff --git a/docs/src/javascript/modules.md b/docs/src/javascript/modules.md
new file mode 100644
index 00000000..2ac99034
--- /dev/null
+++ b/docs/src/javascript/modules.md
@@ -0,0 +1,61 @@
+[vectordb](README.md) / Exports
+
+# vectordb
+
+## Table of contents
+
+### Enumerations
+
+- [MetricType](enums/MetricType.md)
+- [WriteMode](enums/WriteMode.md)
+
+### Classes
+
+- [Connection](classes/Connection.md)
+- [OpenAIEmbeddingFunction](classes/OpenAIEmbeddingFunction.md)
+- [Query](classes/Query.md)
+- [Table](classes/Table.md)
+
+### Interfaces
+
+- [EmbeddingFunction](interfaces/EmbeddingFunction.md)
+
+### Type Aliases
+
+- [VectorIndexParams](modules.md#vectorindexparams)
+
+### Functions
+
+- [connect](modules.md#connect)
+
+## Type Aliases
+
+### VectorIndexParams
+
+Ƭ **VectorIndexParams**: `IvfPQIndexConfig`
+
+#### Defined in
+
+[index.ts:224](https://github.com/lancedb/lancedb/blob/31dab97/node/src/index.ts#L224)
+
+## Functions
+
+### connect
+
+▸ **connect**(`uri`): `Promise`<[`Connection`](classes/Connection.md)\>
+
+Connect to a LanceDB instance at the given URI
+
+#### Parameters
+
+| Name | Type | Description |
+| :------ | :------ | :------ |
+| `uri` | `string` | The uri of the database. |
+
+#### Returns
+
+`Promise`<[`Connection`](classes/Connection.md)\>
+
+#### Defined in
+
+[index.ts:34](https://github.com/lancedb/lancedb/blob/31dab97/node/src/index.ts#L34)
diff --git a/notebooks/code_qa_bot.ipynb b/docs/src/notebooks/code_qa_bot.ipynb
similarity index 100%
rename from notebooks/code_qa_bot.ipynb
rename to docs/src/notebooks/code_qa_bot.ipynb
diff --git a/notebooks/diffusiondb/datagen.py b/docs/src/notebooks/diffusiondb/datagen.py
similarity index 100%
rename from notebooks/diffusiondb/datagen.py
rename to docs/src/notebooks/diffusiondb/datagen.py
diff --git a/notebooks/diffusiondb/requirements.txt b/docs/src/notebooks/diffusiondb/requirements.txt
similarity index 100%
rename from notebooks/diffusiondb/requirements.txt
rename to docs/src/notebooks/diffusiondb/requirements.txt
diff --git a/notebooks/multimodal_search.ipynb b/docs/src/notebooks/multimodal_search.ipynb
similarity index 100%
rename from notebooks/multimodal_search.ipynb
rename to docs/src/notebooks/multimodal_search.ipynb
diff --git a/notebooks/youtube_transcript_search.ipynb b/docs/src/notebooks/youtube_transcript_search.ipynb
similarity index 100%
rename from notebooks/youtube_transcript_search.ipynb
rename to docs/src/notebooks/youtube_transcript_search.ipynb
diff --git a/docs/src/python.md b/docs/src/python/python.md
similarity index 100%
rename from docs/src/python.md
rename to docs/src/python/python.md
diff --git a/docs/src/styles/global.css b/docs/src/styles/global.css
new file mode 100644
index 00000000..d511a964
--- /dev/null
+++ b/docs/src/styles/global.css
@@ -0,0 +1,6 @@
+:root {
+ --md-primary-fg-color: #625eff;
+ --md-primary-fg-color--dark: #4338ca;
+ --md-text-font: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
+ --md-code-font: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
+}
\ No newline at end of file
diff --git a/node/README.md b/node/README.md
index 5e0a4838..9302cf5b 100644
--- a/node/README.md
+++ b/node/README.md
@@ -41,3 +41,9 @@ To run the linter and have it automatically fix all errors
```bash
npm run lint -- --fix
```
+
+To build documentation
+
+```bash
+npx typedoc --plugin typedoc-plugin-markdown --out ../docs/src/javascript src/index.ts
+```
\ No newline at end of file
diff --git a/node/package-lock.json b/node/package-lock.json
index 10a62727..ee17adbf 100644
--- a/node/package-lock.json
+++ b/node/package-lock.json
@@ -32,6 +32,8 @@
"temp": "^0.9.4",
"ts-node": "^10.9.1",
"ts-node-dev": "^2.0.0",
+ "typedoc": "^0.24.7",
+ "typedoc-plugin-markdown": "^3.15.3",
"typescript": "*"
}
},
@@ -642,6 +644,12 @@
"node": ">=8"
}
},
+ "node_modules/ansi-sequence-parser": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-sequence-parser/-/ansi-sequence-parser-1.1.0.tgz",
+ "integrity": "sha512-lEm8mt52to2fT8GhciPCGeCXACSz2UwIN4X2e2LJSnZ5uAbn2/dsYdOmUXq0AtWS5cpAupysIneExOgH0Vd2TQ==",
+ "dev": true
+ },
"node_modules/ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
@@ -2284,6 +2292,27 @@
"integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==",
"dev": true
},
+ "node_modules/handlebars": {
+ "version": "4.7.7",
+ "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz",
+ "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==",
+ "dev": true,
+ "dependencies": {
+ "minimist": "^1.2.5",
+ "neo-async": "^2.6.0",
+ "source-map": "^0.6.1",
+ "wordwrap": "^1.0.0"
+ },
+ "bin": {
+ "handlebars": "bin/handlebars"
+ },
+ "engines": {
+ "node": ">=0.4.7"
+ },
+ "optionalDependencies": {
+ "uglify-js": "^3.1.4"
+ }
+ },
"node_modules/has": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
@@ -2782,6 +2811,12 @@
"json5": "lib/cli.js"
}
},
+ "node_modules/jsonc-parser": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz",
+ "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==",
+ "dev": true
+ },
"node_modules/just-extend": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz",
@@ -2870,12 +2905,30 @@
"node": ">=10"
}
},
+ "node_modules/lunr": {
+ "version": "2.3.9",
+ "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz",
+ "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==",
+ "dev": true
+ },
"node_modules/make-error": {
"version": "1.3.6",
"resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
"integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
"dev": true
},
+ "node_modules/marked": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz",
+ "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==",
+ "dev": true,
+ "bin": {
+ "marked": "bin/marked.js"
+ },
+ "engines": {
+ "node": ">= 12"
+ }
+ },
"node_modules/merge2": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
@@ -3096,6 +3149,12 @@
"integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==",
"dev": true
},
+ "node_modules/neo-async": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
+ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
+ "dev": true
+ },
"node_modules/nise": {
"version": "5.1.4",
"resolved": "https://registry.npmjs.org/nise/-/nise-5.1.4.tgz",
@@ -3604,6 +3663,18 @@
"node": ">=8"
}
},
+ "node_modules/shiki": {
+ "version": "0.14.2",
+ "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.14.2.tgz",
+ "integrity": "sha512-ltSZlSLOuSY0M0Y75KA+ieRaZ0Trf5Wl3gutE7jzLuIcWxLp5i/uEnLoQWNvgKXQ5OMpGkJnVMRLAuzjc0LJ2A==",
+ "dev": true,
+ "dependencies": {
+ "ansi-sequence-parser": "^1.1.0",
+ "jsonc-parser": "^3.2.0",
+ "vscode-oniguruma": "^1.7.0",
+ "vscode-textmate": "^8.0.0"
+ }
+ },
"node_modules/side-channel": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
@@ -4064,6 +4135,63 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/typedoc": {
+ "version": "0.24.7",
+ "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.24.7.tgz",
+ "integrity": "sha512-zzfKDFIZADA+XRIp2rMzLe9xZ6pt12yQOhCr7cD7/PBTjhPmMyMvGrkZ2lPNJitg3Hj1SeiYFNzCsSDrlpxpKw==",
+ "dev": true,
+ "dependencies": {
+ "lunr": "^2.3.9",
+ "marked": "^4.3.0",
+ "minimatch": "^9.0.0",
+ "shiki": "^0.14.1"
+ },
+ "bin": {
+ "typedoc": "bin/typedoc"
+ },
+ "engines": {
+ "node": ">= 14.14"
+ },
+ "peerDependencies": {
+ "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x"
+ }
+ },
+ "node_modules/typedoc-plugin-markdown": {
+ "version": "3.15.3",
+ "resolved": "https://registry.npmjs.org/typedoc-plugin-markdown/-/typedoc-plugin-markdown-3.15.3.tgz",
+ "integrity": "sha512-idntFYu3vfaY3eaD+w9DeRd0PmNGqGuNLKihPU9poxFGnATJYGn9dPtEhn2QrTdishFMg7jPXAhos+2T6YCWRQ==",
+ "dev": true,
+ "dependencies": {
+ "handlebars": "^4.7.7"
+ },
+ "peerDependencies": {
+ "typedoc": ">=0.24.0"
+ }
+ },
+ "node_modules/typedoc/node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/typedoc/node_modules/minimatch": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz",
+ "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
"node_modules/typescript": {
"version": "5.0.4",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz",
@@ -4085,6 +4213,19 @@
"node": ">=8"
}
},
+ "node_modules/uglify-js": {
+ "version": "3.17.4",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz",
+ "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==",
+ "dev": true,
+ "optional": true,
+ "bin": {
+ "uglifyjs": "bin/uglifyjs"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
"node_modules/unbox-primitive": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
@@ -4115,6 +4256,18 @@
"integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==",
"dev": true
},
+ "node_modules/vscode-oniguruma": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz",
+ "integrity": "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==",
+ "dev": true
+ },
+ "node_modules/vscode-textmate": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-8.0.0.tgz",
+ "integrity": "sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==",
+ "dev": true
+ },
"node_modules/which": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
@@ -4175,6 +4328,12 @@
"node": ">=0.10.0"
}
},
+ "node_modules/wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==",
+ "dev": true
+ },
"node_modules/wordwrapjs": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz",
@@ -4767,6 +4926,12 @@
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
"dev": true
},
+ "ansi-sequence-parser": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-sequence-parser/-/ansi-sequence-parser-1.1.0.tgz",
+ "integrity": "sha512-lEm8mt52to2fT8GhciPCGeCXACSz2UwIN4X2e2LJSnZ5uAbn2/dsYdOmUXq0AtWS5cpAupysIneExOgH0Vd2TQ==",
+ "dev": true
+ },
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
@@ -5983,6 +6148,19 @@
"integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==",
"dev": true
},
+ "handlebars": {
+ "version": "4.7.7",
+ "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz",
+ "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.5",
+ "neo-async": "^2.6.0",
+ "source-map": "^0.6.1",
+ "uglify-js": "^3.1.4",
+ "wordwrap": "^1.0.0"
+ }
+ },
"has": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
@@ -6324,6 +6502,12 @@
"minimist": "^1.2.0"
}
},
+ "jsonc-parser": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz",
+ "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==",
+ "dev": true
+ },
"just-extend": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz",
@@ -6394,12 +6578,24 @@
"yallist": "^4.0.0"
}
},
+ "lunr": {
+ "version": "2.3.9",
+ "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz",
+ "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==",
+ "dev": true
+ },
"make-error": {
"version": "1.3.6",
"resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
"integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
"dev": true
},
+ "marked": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz",
+ "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==",
+ "dev": true
+ },
"merge2": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
@@ -6564,6 +6760,12 @@
"integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==",
"dev": true
},
+ "neo-async": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
+ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
+ "dev": true
+ },
"nise": {
"version": "5.1.4",
"resolved": "https://registry.npmjs.org/nise/-/nise-5.1.4.tgz",
@@ -6908,6 +7110,18 @@
"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
"dev": true
},
+ "shiki": {
+ "version": "0.14.2",
+ "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.14.2.tgz",
+ "integrity": "sha512-ltSZlSLOuSY0M0Y75KA+ieRaZ0Trf5Wl3gutE7jzLuIcWxLp5i/uEnLoQWNvgKXQ5OMpGkJnVMRLAuzjc0LJ2A==",
+ "dev": true,
+ "requires": {
+ "ansi-sequence-parser": "^1.1.0",
+ "jsonc-parser": "^3.2.0",
+ "vscode-oniguruma": "^1.7.0",
+ "vscode-textmate": "^8.0.0"
+ }
+ },
"side-channel": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
@@ -7236,6 +7450,47 @@
"is-typed-array": "^1.1.9"
}
},
+ "typedoc": {
+ "version": "0.24.7",
+ "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.24.7.tgz",
+ "integrity": "sha512-zzfKDFIZADA+XRIp2rMzLe9xZ6pt12yQOhCr7cD7/PBTjhPmMyMvGrkZ2lPNJitg3Hj1SeiYFNzCsSDrlpxpKw==",
+ "dev": true,
+ "requires": {
+ "lunr": "^2.3.9",
+ "marked": "^4.3.0",
+ "minimatch": "^9.0.0",
+ "shiki": "^0.14.1"
+ },
+ "dependencies": {
+ "brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "minimatch": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz",
+ "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^2.0.1"
+ }
+ }
+ }
+ },
+ "typedoc-plugin-markdown": {
+ "version": "3.15.3",
+ "resolved": "https://registry.npmjs.org/typedoc-plugin-markdown/-/typedoc-plugin-markdown-3.15.3.tgz",
+ "integrity": "sha512-idntFYu3vfaY3eaD+w9DeRd0PmNGqGuNLKihPU9poxFGnATJYGn9dPtEhn2QrTdishFMg7jPXAhos+2T6YCWRQ==",
+ "dev": true,
+ "requires": {
+ "handlebars": "^4.7.7"
+ }
+ },
"typescript": {
"version": "5.0.4",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz",
@@ -7247,6 +7502,13 @@
"resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz",
"integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw=="
},
+ "uglify-js": {
+ "version": "3.17.4",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz",
+ "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==",
+ "dev": true,
+ "optional": true
+ },
"unbox-primitive": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
@@ -7274,6 +7536,18 @@
"integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==",
"dev": true
},
+ "vscode-oniguruma": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz",
+ "integrity": "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==",
+ "dev": true
+ },
+ "vscode-textmate": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-8.0.0.tgz",
+ "integrity": "sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==",
+ "dev": true
+ },
"which": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
@@ -7316,6 +7590,12 @@
"integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
"dev": true
},
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==",
+ "dev": true
+ },
"wordwrapjs": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz",
diff --git a/node/package.json b/node/package.json
index 894769fa..484d937e 100644
--- a/node/package.json
+++ b/node/package.json
@@ -38,11 +38,13 @@
"eslint-plugin-n": "^15.7.0",
"eslint-plugin-promise": "^6.1.1",
"mocha": "^10.2.0",
- "sinon": "^15.1.0",
"openai": "^3.2.1",
+ "sinon": "^15.1.0",
"temp": "^0.9.4",
"ts-node": "^10.9.1",
"ts-node-dev": "^2.0.0",
+ "typedoc": "^0.24.7",
+ "typedoc-plugin-markdown": "^3.15.3",
"typescript": "*"
},
"dependencies": {