From bfeab16e90309d54b6d71a042cba32644468bdd0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Louis=20Brul=C3=A9=20Naudet?= Date: Sat, 27 Jul 2024 12:53:02 +0200 Subject: [PATCH] Test commit --- docs/build/doctrees/environment.pickle | Bin 0 -> 136092 bytes docs/build/doctrees/index.doctree | Bin 0 -> 6545 bytes docs/build/doctrees/ragoon.doctree | Bin 0 -> 314899 bytes docs/build/html/_sources/index.rst.txt | 41 + docs/build/html/_sources/ragoon.rst.txt | 37 + docs/build/html/genindex.html | 675 ++++++++++ docs/build/html/index.html | 473 ++++++++ docs/build/html/modules.html | 559 +++++++++ docs/build/html/objects.inv | Bin 0 -> 750 bytes docs/build/html/py-modindex.html | 425 +++++++ docs/build/html/ragoon.html | 1486 +++++++++++++++++++++++ docs/build/html/searchindex.js | 1 + docs/source/conf.py | 2 - docs/source/index.rst | 7 +- docs/source/introduction.rst | 8 - 15 files changed, 3702 insertions(+), 12 deletions(-) create mode 100644 docs/build/doctrees/environment.pickle create mode 100644 docs/build/doctrees/index.doctree create mode 100644 docs/build/doctrees/ragoon.doctree create mode 100644 docs/build/html/_sources/index.rst.txt create mode 100644 docs/build/html/_sources/ragoon.rst.txt create mode 100644 docs/build/html/genindex.html create mode 100644 docs/build/html/index.html create mode 100644 docs/build/html/modules.html create mode 100644 docs/build/html/objects.inv create mode 100644 docs/build/html/py-modindex.html create mode 100644 docs/build/html/ragoon.html create mode 100644 docs/build/html/searchindex.js delete mode 100644 docs/source/introduction.rst diff --git a/docs/build/doctrees/environment.pickle b/docs/build/doctrees/environment.pickle new file mode 100644 index 0000000000000000000000000000000000000000..8b25d64dfa048622306be66842bd58482c20953f GIT binary patch literal 136092 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 literal 0 HcmV?d00001 diff --git a/docs/build/doctrees/index.doctree b/docs/build/doctrees/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..476123cc3b37371dc5a196ecdc0a417c38ba8ac5 GIT binary patch literal 6545 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 KX`AhgM*lw_GS1Kd literal 0 HcmV?d00001 diff --git a/docs/build/html/_sources/index.rst.txt b/docs/build/html/_sources/index.rst.txt new file mode 100644 index 0000000..398fb63 --- /dev/null +++ b/docs/build/html/_sources/index.rst.txt @@ -0,0 +1,41 @@ +.. RAGoon documentation master file, created by + sphinx-quickstart on Fri Jul 26 22:25:47 2024. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +RAGoon documentation +==================== + +Contents: + +.. toctree:: + :maxdepth: 2 + :caption: Modules: + + modules + ragoon + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` + +ragoon package +=============== + +.. automodule:: ragoon + :members: + :undoc-members: + :show-inheritance: + +Submodules +---------- + +.. toctree:: + :maxdepth: 2 + + ragoon.embeddings + ragoon.similarity_search + ragoon.web_rag diff --git a/docs/build/html/_sources/ragoon.rst.txt b/docs/build/html/_sources/ragoon.rst.txt new file mode 100644 index 0000000..d51885a --- /dev/null +++ b/docs/build/html/_sources/ragoon.rst.txt @@ -0,0 +1,37 @@ +ragoon package +============== + +Submodules +---------- + +ragoon.embeddings module +------------------------ + +.. automodule:: ragoon.embeddings + :members: + :undoc-members: + :show-inheritance: + +ragoon.similarity\_search module +-------------------------------- + +.. automodule:: ragoon.similarity_search + :members: + :undoc-members: + :show-inheritance: + +ragoon.web\_rag module +---------------------- + +.. automodule:: ragoon.web_rag + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: ragoon + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/build/html/genindex.html b/docs/build/html/genindex.html new file mode 100644 index 0000000..ff495c1 --- /dev/null +++ b/docs/build/html/genindex.html @@ -0,0 +1,675 @@ + + + + + + + + + + Index — RAGoon 0.0.4 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ +
+ +
+ + + + + +
+
+ + + + + +
+ + + + + + + + + + + +
+ +
+ + +
+
+ +
+ + + + + +
+ + +

Index

+ +
+ B + | C + | D + | E + | G + | I + | L + | M + | N + | P + | Q + | R + | S + | T + | U + | V + | W + +
+

B

+ + +
+ +

C

+ + + +
+ +

D

+ + + +
+ +

E

+ + + +
+ +

G

+ + +
+ +

I

+ + + +
+ +

L

+ + + +
+ +

M

+ + +
+ +

N

+ + +
+ +

P

+ + + +
+ +

Q

+ + +
+ +

R

+ + + +
    +
  • + ragoon + +
  • +
  • + ragoon.embeddings + +
  • +
  • + ragoon.similarity_search + +
  • +
+ +

S

+ + + +
+ +

T

+ + +
+ +

U

+ + +
+ +

V

+ + + +
+ +

W

+ + +
+ + + +
+ + + + + +
+ +
+
+
+ +
+ + + + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/docs/build/html/index.html b/docs/build/html/index.html new file mode 100644 index 0000000..7d408c4 --- /dev/null +++ b/docs/build/html/index.html @@ -0,0 +1,473 @@ + + + + + + + + + + + RAGoon documentation — RAGoon 0.0.4 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ +
+ +
+ + + + + +
+
+ + + + + +
+ + + + + + + + + + + +
+ +
+ + +
+
+ +
+ + + + + + + + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/docs/build/html/modules.html b/docs/build/html/modules.html new file mode 100644 index 0000000..0795b25 --- /dev/null +++ b/docs/build/html/modules.html @@ -0,0 +1,559 @@ + + + + + + + + + + + ragoon — RAGoon 0.0.4 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ +
+ +
+ + + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

ragoon#

+
+ +
+
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/docs/build/html/objects.inv b/docs/build/html/objects.inv new file mode 100644 index 0000000000000000000000000000000000000000..318ae79c059aedd583d90773210521221b61971b GIT binary patch literal 750 zcmVNERX>N99Zgg*Qc_4OWa&u{KZXhxWBOp+6Z)#;@bUGkXK}TV>iAPOTORA^-&a%F8{X>Md?av*PJAarPHb0B7EY-J#6b0A}HZE$jB zb8}^6Aa!$TZf78RY-wUH3V7PBmrHNkFbsh2`4tAXYmB7nW9x0ehGD=46f3YD1zKVg zp|<2nvfJ#}kA5Vz+r^dwogzr&M~Y%d+Q3$8m6ZG2LW?TLWR*xI@HySNB7fKIE#D{0 zg=qy-EHV^As;wRA^ry2*>6hd3GdTFJL7-_!JO^u&^$6roNHcJJ$E^H|4Gf$!GOHY( z59C_aXdH8zIaF4gSlmhggBoNGSsu$-K}(A+E{!QDVma8Jw+Vx8r^PFf6srJ~;#%MY zYwge4(k%zEI|01#2j=wSLEHoq=^usp1n<(H*P<9@_k-;I!VzA#G@7He%$B*Fy7twX zNISv2_GenC(c^J${E1FKqKXv6s`N~r4>QbP(pHdDB|N*Xz7SGw5F9e{?X*h)xCn*n zEsd4nc9D?y>-P~jO6h`+l_Mplez~}Q9X-C`%{5(R3+G}FUJ$%ya|F2YRL)SU|M>@ zjL|Zn^7I<%Z_Ivv`sz_-#tL)pHHuqQT@G6(Zrfg*EZ50lx0Or2HOs||n9#ft8c2|_ z<}02KDr!Xz95tf_-RD2(a=$zrbhPj;!?Q(2DmR;I5JV2d%*+MK9N50RR91 literal 0 HcmV?d00001 diff --git a/docs/build/html/py-modindex.html b/docs/build/html/py-modindex.html new file mode 100644 index 0000000..b50bcdd --- /dev/null +++ b/docs/build/html/py-modindex.html @@ -0,0 +1,425 @@ + + + + + + + + + + Python Module Index — RAGoon 0.0.4 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ +
+ +
+ + + + + +
+
+ + + + + +
+ + + + + + + + + + + +
+ +
+ + +
+
+ +
+ + + + + + + + + + + +
+ +
+
+
+ +
+ + + + +
+
+ +
+ +
+
+
+ + + + + +
+ + +
+ + \ No newline at end of file diff --git a/docs/build/html/ragoon.html b/docs/build/html/ragoon.html new file mode 100644 index 0000000..7c37f79 --- /dev/null +++ b/docs/build/html/ragoon.html @@ -0,0 +1,1486 @@ + + + + + + + + + + + ragoon package — RAGoon 0.0.4 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ +
+ +
+ + + + + +
+
+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + + +
+ +
+ + +
+
+ + + + + +
+ +
+

ragoon package#

+
+

Submodules#

+
+
+

ragoon.embeddings module#

+
+
+class ragoon.embeddings.EmbeddingsDataLoader(dataset_name: str, token: str, model_configs: List[Dict[str, str]], batch_size: int | None = 16, convert_to_tensor: bool | None = False)[source]#
+

Bases: object

+

A class to load a dataset and process it to add embeddings using specified models.

+

This class handles loading a dataset from Hugging Face, processing it to add +embeddings using specified models, and provides methods to save the processed dataset.

+
+
+dataset_name#
+

The name of the dataset to load from Hugging Face.

+
+
Type:
+

str

+
+
+
+ +
+
+token#
+

The token for accessing Hugging Face API.

+
+
Type:
+

str

+
+
+
+ +
+
+model_configs#
+

The list of dictionaries with model configurations to use for generating embeddings.

+
+
Type:
+

list of dict

+
+
+
+ +
+
+batch_size#
+

The number of samples to process in each batch.

+
+
Type:
+

int

+
+
+
+ +
+
+dataset#
+

The loaded and processed dataset.

+
+
Type:
+

datasets.DatasetDict

+
+
+
+ +
+
+convert_to_tensor#
+

Whether the output should be one large tensor. Default is False.

+
+
Type:
+

bool, optional

+
+
+
+ +
+
+cuda_available#
+

Whether CUDA is available for GPU acceleration.

+
+
Type:
+

bool

+
+
+
+ +
+
+load_dataset()[source]#
+

Load the dataset from Hugging Face.

+
+ +
+
+load_model(model_name)[source]#
+

Load the specified model.

+
+ +
+
+encode(texts, model, query_prefix=None, passage_prefix=None)[source]#
+

Create embeddings for a list of texts using a loaded model with optional prefixes.

+
+ +
+
+embed(batch, model, model_name, column='text', query_prefix=None, passage_prefix=None)[source]#
+

Add embeddings columns to the dataset for each model.

+
+ +
+
+process_split(split, column='text')[source]#
+

Process a specific split of the dataset and add embeddings for each model.

+
+ +
+
+process_splits(splits, column='text')[source]#
+

Process specified splits of the dataset and add embeddings for each model.

+
+ +
+
+get_dataset()[source]#
+

Return the processed dataset.

+
+ +
+
+save_dataset(output_dir)[source]#
+

Save the processed dataset to disk.

+
+ +
+
+upload_dataset(repo_id)[source]#
+

Upload the processed dataset to the Hugging Face Hub.

+
+ +
+
+embed(batch: dict, model: InferenceClient | SentenceTransformer, model_name: str, column: str | None = 'text', query_prefix: str | None = None, passage_prefix: str | None = None) dict[source]#
+

Add embeddings columns to the dataset for each model.

+
+
Parameters:
+
    +
  • batch (dict) – A batch of data from the dataset.

  • +
  • model (model) – The loaded model to use for encoding.

  • +
  • model_name (str) – The name of the model to use for encoding.

  • +
  • column (str, optional) – The name of the column containing the text to encode (default is “text”).

  • +
  • query_prefix (str, optional) – The prefix to add to each query (default is None).

  • +
  • passage_prefix (str, optional) – The prefix to add to each passage (default is None).

  • +
+
+
Returns:
+

A dictionary containing the embeddings for the model.

+
+
Return type:
+

dict

+
+
Raises:
+

Exception – If embedding fails.

+
+
+
+ +
+
+encode(texts: List[str], model: InferenceClient | SentenceTransformer, query_prefix: str | None = None, passage_prefix: str | None = None)[source]#
+

Create embeddings for a list of texts using a loaded model with optional prefixes.

+
+
Parameters:
+
    +
  • texts (list of str) – The list of texts to encode.

  • +
  • model (model) – The loaded model to use for encoding.

  • +
  • query_prefix (str, optional) – The prefix to add to each query. Default is None.

  • +
  • passage_prefix (str, optional) – The prefix to add to each passage. Default is None.

  • +
+
+
Returns:
+

The embeddings for the texts.

+
+
Return type:
+

numpy.ndarray

+
+
Raises:
+

Exception – If encoding fails.

+
+
+
+ +
+
+get_dataset() Dataset | DatasetDict[source]#
+

Return the processed dataset.

+
+
Returns:
+

The processed dataset.

+
+
Return type:
+

datasets.DatasetDict

+
+
Raises:
+

ValueError – If the dataset is not processed.

+
+
+
+ +
+
+load_dataset()[source]#
+

Load the dataset from Hugging Face.

+
+
Raises:
+

Exception – If the dataset fails to load from Hugging Face.

+
+
+
+ +
+
+load_model(model_name: str) InferenceClient | SentenceTransformer[source]#
+

Load the specified model.

+
+
Parameters:
+

model_name (str) – The name of the model to load.

+
+
Returns:
+

model – The loaded model, either a SentenceTransformer or an InferenceClient.

+
+
Return type:
+

Union[InferenceClient, SentenceTransformer]

+
+
Raises:
+

Exception – If the model fails to load.

+
+
+
+ +
+
+process_split(split: str, column: str | None = 'text')[source]#
+

Process a specific split of the dataset and add embeddings for each model.

+
+
Parameters:
+
    +
  • split (str) – The split of the dataset to process.

  • +
  • column (str, optional) – The name of the column containing the text to encode (default is “text”).

  • +
+
+
Raises:
+

ValueError – If the dataset is not loaded.

+
+
+
+ +
+
+process_splits(splits: List[str] = None, column='text')[source]#
+

Process specified splits of the dataset and add embeddings for each model. +If splits are not provided, process all splits available in the dataset.

+
+
Parameters:
+
    +
  • splits (list of str) – The list of splits to process. If None, process all splits.

  • +
  • column (str, optional) – The name of the column containing the text to encode (default is “text”).

  • +
+
+
Raises:
+

ValueError – If the dataset is not loaded.

+
+
+
+ +
+
+save_dataset(output_dir: str)[source]#
+

Save the processed dataset to disk.

+
+
Parameters:
+

output_dir (str) – The directory where the dataset will be saved.

+
+
Raises:
+

ValueError – If the dataset is not processed.

+
+
+
+ +
+
+upload_dataset(repo_id: str)[source]#
+

Upload the processed dataset to the Hugging Face Hub.

+
+
Parameters:
+

repo_id (str) – The repository ID on the Hugging Face Hub.

+
+
Raises:
+

ValueError – If the dataset is not processed.

+
+
+
+ +
+ +
+
+class ragoon.embeddings.EmbeddingsVisualizer(index_path: str, dataset_path: str)[source]#
+

Bases: object

+

A class for Embedding Exploration Lab, visualizing high-dimensional embeddings in 3D space.

+

This class provides functionality to load embeddings from a FAISS index, +reduce their dimensionality using PCA and/or t-SNE, and visualize them +in an interactive 3D plot.

+
+
Parameters:
+
    +
  • index_path (str) – Path to the FAISS index file.

  • +
  • dataset_path (str) – Path to the dataset containing labels.

  • +
+
+
+
+
+index_path#
+

Path to the FAISS index file.

+
+
Type:
+

str

+
+
+
+ +
+
+dataset_path#
+

Path to the dataset containing labels.

+
+
Type:
+

str

+
+
+
+ +
+
+index#
+

Loaded FAISS index.

+
+
Type:
+

faiss.Index or None

+
+
+
+ +
+
+dataset#
+

Loaded dataset containing labels.

+
+
Type:
+

datasets.Dataset or None

+
+
+
+ +
+
+vectors#
+

Extracted vectors from the FAISS index.

+
+
Type:
+

np.ndarray or None

+
+
+
+ +
+
+reduced_vectors#
+

Dimensionality-reduced vectors.

+
+
Type:
+

np.ndarray or None

+
+
+
+ +
+
+labels#
+

Labels from the dataset.

+
+
Type:
+

list of str or None

+
+
+
+ +
+
+load_index() 'EmbeddingsVisualizer':[source]#
+

Load the FAISS index from the specified file path.

+
+ +
+
+load_dataset() 'EmbeddingsVisualizer':[source]#
+

Load the dataset containing labels from the specified file path.

+
+ +
+
+extract_vectors() 'EmbeddingsVisualizer':[source]#
+

Extract all vectors from the loaded FAISS index.

+
+ +
+
+reduce_dimensionality(
+

method: str = “umap”, +pca_components: int = 50, +final_components: int = 3, +random_state: int = 42

+
+ +
+
+) -> 'EmbeddingsVisualizer':
+

Reduce dimensionality of the extracted vectors with dynamic progress tracking.

+
+ +
+
+plot_3d() None:#
+

Generate a 3D scatter plot of the reduced vectors with labels.

+
+ +

Examples

+
>>> visualizer = EmbeddingsVisualizer(index_path="path/to/index", dataset_path="path/to/dataset")
+>>> visualizer.load_index().load_dataset().extract_vectors()
+>>> visualizer.reduce_dimensionality(method="pca_umap", pca_components=50, final_components=3)
+>>> visualizer.plot_3d()
+
+
+
+
+create_plot(title: str = '3D Visualization of Embeddings', point_size: int = 3) Figure[source]#
+

Generate a 3D scatter plot of the reduced vectors with labels.

+
+
Parameters:
+
    +
  • title (str, optional) – The title of the plot (default is ‘3D Visualization of Embeddings’).

  • +
  • point_size (int, optional) – The size of the markers in the scatter plot (default is 3).

  • +
+
+
Returns:
+

The generated 3D scatter plot.

+
+
Return type:
+

go.Figure

+
+
Raises:
+

ValueError – If vectors have not been reduced yet.

+
+
+

Notes

+

This method requires the plotly library to be installed.

+

Examples

+
>>> visualizer = EmbeddingsVisualizer()
+>>> plot = visualizer.create_plot(title='My Embeddings', point_size=5)
+>>> plot.show()
+
+
+
+ +
+
+extract_vectors()[source]#
+

Extract all vectors from the loaded FAISS index.

+

This method should be called after load_index().

+
+
Returns:
+

self – The instance itself, allowing for method chaining.

+
+
Return type:
+

EmbeddingsVisualizer

+
+
Raises:
+
    +
  • ValueError – If the index has not been loaded yet.

  • +
  • RuntimeError – If there’s an issue with vector extraction.

  • +
+
+
+
+ +
+
+load_dataset(column: str = 'document')[source]#
+

Load the Dataset containing labels from the specified file path.

+
+
Parameters:
+

column (str, optional) – The column of the split corresponding to the embeddings stored in +the index. Default is ‘document’.

+
+
Returns:
+

self – The instance itself, allowing for method chaining.

+
+
Return type:
+

datasets.Dataset

+
+
+
+ +
+
+load_index()[source]#
+

Load the FAISS index from the specified file path.

+
+
Returns:
+

self – The instance itself, allowing for method chaining.

+
+
Return type:
+

EmbeddingsVisualizer

+
+
+
+ +
+
+reduce_dimensionality(method: str = 'umap', pca_components: int = 50, final_components: int = 3, random_state: int = 42)[source]#
+

Reduce dimensionality of the extracted vectors with dynamic progress tracking.

+
+
Parameters:
+
    +
  • method ({'pca', 'umap', 'pca_umap'}, optional) –

    The method to use for dimensionality reduction, by default ‘umap’.

    +
      +
    • pca : Principal Component Analysis (PCA) is a linear dimensionality reduction technique

    • +
    +

    that is commonly used to reduce the dimensionality of high-dimensional data. +It identifies the directions (principal components) in which the data varies the most +and projects the data onto these components, resulting in a lower-dimensional representation.

    +
      +
    • umap : Uniform Manifold Approximation and Projection (UMAP) is a non-linear dimensionality

    • +
    +

    reduction technique that is particularly well-suited for visualizing high-dimensional +data in lower-dimensional space. It preserves both local and global structure of the data +by constructing a low-dimensional representation that captures the underlying manifold +structure of the data.

    +
      +
    • pca_umap : PCA followed by UMAP is a two-step dimensionality reduction technique.

    • +
    +

    First, PCA is applied to reduce the dimensionality of the data. +Then, UMAP is applied to further reduce the dimensionality and capture the +non-linear structure of the data. This combination can be effective in +preserving both global and local structure of the data.

    +

  • +
  • pca_components (int, optional) – Number of components for PCA (used in ‘pca’ and ‘pca_umap’), by default 50.

  • +
  • final_components (int, optional) – Final number of components (3 for 3D visualization), by default 3.

  • +
  • random_state (int, optional) – Random state for reproducibility, by default 42.

  • +
+
+
Returns:
+

self – The instance itself, allowing for method chaining.

+
+
Return type:
+

EmbeddingsVisualizer

+
+
Raises:
+

ValueError – If vectors have not been extracted yet or if an invalid method is specified.

+
+
+
+ +
+
+visualize(method: str = 'tsne', pca_components: int = 50, final_components: int = 3, random_state: int = 42, title: str = '3D Visualization of Embeddings', point_size: int = 3, save_html: bool = False, html_file_name: str = 'embedding_visualization.html')[source]#
+

Full pipeline: load index, extract vectors, reduce dimensionality, and visualize.

+
+
Parameters:
+
    +
  • method (str, optional) – The dimensionality reduction method to use. Default is ‘tsne’.

  • +
  • pca_components (int, optional) – The number of components to keep when using PCA for dimensionality reduction. Default is 50.

  • +
  • final_components (int, optional) – The number of final components to visualize. Default is 3.

  • +
  • random_state (int, optional) – The random state for reproducibility. Default is 42.

  • +
  • title (str, optional) – The title of the visualization plot. Default is ‘3D Visualization of Embeddings’.

  • +
  • point_size (int, optional) – The size of the points in the visualization plot. Default is 3.

  • +
  • save_html (bool, optional) – Whether to save the visualization as an HTML file. Default is False.

  • +
  • html_file_name (str, optional) – The name of the HTML file to save. Default is ‘embedding_visualization.html’.

  • +
+
+
Return type:
+

None

+
+
Raises:
+

None

+
+
+

Examples

+
>>> visualizer = EmbeddingsVisualizer()
+>>> visualizer.visualize(method='tsne', pca_components=50, final_components=3, random_state=42)
+
+
+
+ +
+ +
+ +
+

ragoon.web_rag module#

+
+
+class ragoon.web_rag.WebRAG(google_api_key: str, google_cx: str, completion_client, user_agent: str = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36')[source]#
+

Bases: object

+
+
+search(query: str, completion_model: str, system_prompt: str = "\n        Given the user's input query, generate a concise and relevant Google search\n        query that directly addresses the main intent of the user's question. The search query must\n        be specifically tailored to retrieve results that can significantly enhance the context for a\n        subsequent dialogue with an LLM. This approach will facilitate few-shot learning by providing\n        rich, specific, and contextually relevant information. Please ensure that the response is\n        well-formed and format it as a JSON object with a key named 'search_query'. This\n        structured approach will help in assimilating the fetched results into an enhanced conversational\n        model, contributing to a more nuanced and informed interaction.\n        ", *args, **kargs)[source]#
+

Search for information and perform completion.

+

This method searches for information related to the given query +and performs completion using the specified model. Additional +parameters can be passed to the completion method.

+
+
Parameters:
+
    +
  • query (str) – The search query.

  • +
  • completion_model (str) – The name or identifier of the completion model to be used.

  • +
  • *args – Additional positional arguments to be passed to the completion method.

  • +
  • **kwargs – Additional keyword arguments to be passed to the completion method.

  • +
+
+
Returns:
+

completion_data – A dictionary containing the generated completion data.

+
+
Return type:
+

dict

+
+
+
+ +
+ +
+
+

Module contents#

+
+
+ + +
+ + + + + + + +
+ + + +
+ + +
+
+ +
+ +
+
+
+ + + + + + + + \ No newline at end of file diff --git a/docs/build/html/searchindex.js b/docs/build/html/searchindex.js new file mode 100644 index 0000000..1ccef32 --- /dev/null +++ b/docs/build/html/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({"alltitles": {"Indices and tables": [[0, "indices-and-tables"]], "Module contents": [[2, "module-ragoon"]], "Modules:": [[0, null]], "RAGoon documentation": [[0, null]], "Submodules": [[0, "submodules"], [2, "submodules"]], "ragoon": [[1, null]], "ragoon package": [[0, "module-ragoon"], [2, null]], "ragoon.embeddings module": [[2, "module-ragoon.embeddings"]], "ragoon.similarity_search module": [[2, "module-ragoon.similarity_search"]], "ragoon.web_rag module": [[2, "module-ragoon.web_rag"]]}, "docnames": ["index", "modules", "ragoon"], "envversion": {"sphinx": 62, "sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.viewcode": 1}, "filenames": ["index.rst", "modules.rst", "ragoon.rst"], "indexentries": {"batch_size (ragoon.embeddings.embeddingsdataloader attribute)": [[2, "ragoon.embeddings.EmbeddingsDataLoader.batch_size", false]], "convert_to_tensor (ragoon.embeddings.embeddingsdataloader attribute)": [[2, "ragoon.embeddings.EmbeddingsDataLoader.convert_to_tensor", false]], "create_faiss_index() (ragoon.similarity_search.similaritysearch method)": [[2, "id12", false], [2, "ragoon.similarity_search.SimilaritySearch.create_faiss_index", false]], "create_plot() (ragoon.embeddings.embeddingsvisualizer method)": [[2, "ragoon.embeddings.EmbeddingsVisualizer.create_plot", false]], "create_usearch_index() (ragoon.similarity_search.similaritysearch method)": [[2, "id13", false], [2, "ragoon.similarity_search.SimilaritySearch.create_usearch_index", false]], "cuda_available (ragoon.embeddings.embeddingsdataloader attribute)": [[2, "ragoon.embeddings.EmbeddingsDataLoader.cuda_available", false]], "dataset (ragoon.embeddings.embeddingsdataloader attribute)": [[2, "ragoon.embeddings.EmbeddingsDataLoader.dataset", false]], "dataset (ragoon.embeddings.embeddingsvisualizer attribute)": [[2, "ragoon.embeddings.EmbeddingsVisualizer.dataset", false]], "dataset_name (ragoon.embeddings.embeddingsdataloader attribute)": [[2, "ragoon.embeddings.EmbeddingsDataLoader.dataset_name", false]], "dataset_path (ragoon.embeddings.embeddingsvisualizer attribute)": [[2, "ragoon.embeddings.EmbeddingsVisualizer.dataset_path", false]], "device (ragoon.similarity_search.similaritysearch attribute)": [[2, "ragoon.similarity_search.SimilaritySearch.device", false]], "dtype (ragoon.similarity_search.similaritysearch attribute)": [[2, "ragoon.similarity_search.SimilaritySearch.dtype", false]], "embed() (ragoon.embeddings.embeddingsdataloader method)": [[2, "id0", false], [2, "ragoon.embeddings.EmbeddingsDataLoader.embed", false]], "embeddingsdataloader (class in ragoon.embeddings)": [[2, "ragoon.embeddings.EmbeddingsDataLoader", false]], "embeddingsvisualizer (class in ragoon.embeddings)": [[2, "ragoon.embeddings.EmbeddingsVisualizer", false]], "encode() (ragoon.embeddings.embeddingsdataloader method)": [[2, "id1", false], [2, "ragoon.embeddings.EmbeddingsDataLoader.encode", false]], "encode() (ragoon.similarity_search.similaritysearch method)": [[2, "id14", false], [2, "ragoon.similarity_search.SimilaritySearch.encode", false]], "extract_vectors() (ragoon.embeddings.embeddingsvisualizer method)": [[2, "id9", false], [2, "ragoon.embeddings.EmbeddingsVisualizer.extract_vectors", false]], "get_dataset() (ragoon.embeddings.embeddingsdataloader method)": [[2, "id2", false], [2, "ragoon.embeddings.EmbeddingsDataLoader.get_dataset", false]], "index (ragoon.embeddings.embeddingsvisualizer attribute)": [[2, "ragoon.embeddings.EmbeddingsVisualizer.index", false]], "index_path (ragoon.embeddings.embeddingsvisualizer attribute)": [[2, "ragoon.embeddings.EmbeddingsVisualizer.index_path", false]], "labels (ragoon.embeddings.embeddingsvisualizer attribute)": [[2, "ragoon.embeddings.EmbeddingsVisualizer.labels", false]], "load_dataset() (ragoon.embeddings.embeddingsdataloader method)": [[2, "id3", false], [2, "ragoon.embeddings.EmbeddingsDataLoader.load_dataset", false]], "load_dataset() (ragoon.embeddings.embeddingsvisualizer method)": [[2, "id10", false], [2, "ragoon.embeddings.EmbeddingsVisualizer.load_dataset", false]], "load_faiss_index() (ragoon.similarity_search.similaritysearch method)": [[2, "id15", false], [2, "ragoon.similarity_search.SimilaritySearch.load_faiss_index", false]], "load_index() (ragoon.embeddings.embeddingsvisualizer method)": [[2, "id11", false], [2, "ragoon.embeddings.EmbeddingsVisualizer.load_index", false]], "load_model() (ragoon.embeddings.embeddingsdataloader method)": [[2, "id4", false], [2, "ragoon.embeddings.EmbeddingsDataLoader.load_model", false]], "load_usearch_index_view() (ragoon.similarity_search.similaritysearch method)": [[2, "id16", false], [2, "ragoon.similarity_search.SimilaritySearch.load_usearch_index_view", false]], "metric (ragoon.similarity_search.similaritysearch attribute)": [[2, "ragoon.similarity_search.SimilaritySearch.metric", false]], "model_configs (ragoon.embeddings.embeddingsdataloader attribute)": [[2, "ragoon.embeddings.EmbeddingsDataLoader.model_configs", false]], "model_name (ragoon.similarity_search.similaritysearch attribute)": [[2, "ragoon.similarity_search.SimilaritySearch.model_name", false]], "module": [[0, "module-ragoon", false], [2, "module-ragoon", false], [2, "module-ragoon.embeddings", false], [2, "module-ragoon.similarity_search", false], [2, "module-ragoon.web_rag", false]], "ndim (ragoon.similarity_search.similaritysearch attribute)": [[2, "ragoon.similarity_search.SimilaritySearch.ndim", false]], "plot_3d() (ragoon.embeddings.embeddingsvisualizer method)": [[2, "ragoon.embeddings.EmbeddingsVisualizer.plot_3d", false]], "process_split() (ragoon.embeddings.embeddingsdataloader method)": [[2, "id5", false], [2, "ragoon.embeddings.EmbeddingsDataLoader.process_split", false]], "process_splits() (ragoon.embeddings.embeddingsdataloader method)": [[2, "id6", false], [2, "ragoon.embeddings.EmbeddingsDataLoader.process_splits", false]], "quantize_embeddings() (ragoon.similarity_search.similaritysearch method)": [[2, "id17", false], [2, "ragoon.similarity_search.SimilaritySearch.quantize_embeddings", false]], "ragoon": [[0, "module-ragoon", false], [2, "module-ragoon", false]], "ragoon.embeddings": [[2, "module-ragoon.embeddings", false]], "ragoon.similarity_search": [[2, "module-ragoon.similarity_search", false]], "ragoon.web_rag": [[2, "module-ragoon.web_rag", false]], "reduce_dimensionality() (ragoon.embeddings.embeddingsvisualizer method)": [[2, "ragoon.embeddings.EmbeddingsVisualizer.reduce_dimensionality", false]], "reduced_vectors (ragoon.embeddings.embeddingsvisualizer attribute)": [[2, "ragoon.embeddings.EmbeddingsVisualizer.reduced_vectors", false]], "save_dataset() (ragoon.embeddings.embeddingsdataloader method)": [[2, "id7", false], [2, "ragoon.embeddings.EmbeddingsDataLoader.save_dataset", false]], "search() (ragoon.similarity_search.similaritysearch method)": [[2, "id18", false], [2, "ragoon.similarity_search.SimilaritySearch.search", false]], "search() (ragoon.web_rag.webrag method)": [[2, "ragoon.web_rag.WebRAG.search", false]], "similaritysearch (class in ragoon.similarity_search)": [[2, "ragoon.similarity_search.SimilaritySearch", false]], "token (ragoon.embeddings.embeddingsdataloader attribute)": [[2, "ragoon.embeddings.EmbeddingsDataLoader.token", false]], "upload_dataset() (ragoon.embeddings.embeddingsdataloader method)": [[2, "id8", false], [2, "ragoon.embeddings.EmbeddingsDataLoader.upload_dataset", false]], "vectors (ragoon.embeddings.embeddingsvisualizer attribute)": [[2, "ragoon.embeddings.EmbeddingsVisualizer.vectors", false]], "visualize() (ragoon.embeddings.embeddingsvisualizer method)": [[2, "ragoon.embeddings.EmbeddingsVisualizer.visualize", false]], "webrag (class in ragoon.web_rag)": [[2, "ragoon.web_rag.WebRAG", false]]}, "objects": {"": [[0, 0, 0, "-", "ragoon"]], "ragoon": [[2, 0, 0, "-", "embeddings"], [2, 0, 0, "-", "similarity_search"], [2, 0, 0, "-", "web_rag"]], "ragoon.embeddings": [[2, 1, 1, "", "EmbeddingsDataLoader"], [2, 1, 1, "", "EmbeddingsVisualizer"]], "ragoon.embeddings.EmbeddingsDataLoader": [[2, 2, 1, "", "batch_size"], [2, 2, 1, "", "convert_to_tensor"], [2, 2, 1, "", "cuda_available"], [2, 2, 1, "", "dataset"], [2, 2, 1, "", "dataset_name"], [2, 3, 1, "id0", "embed"], [2, 3, 1, "id1", "encode"], [2, 3, 1, "id2", "get_dataset"], [2, 3, 1, "id3", "load_dataset"], [2, 3, 1, "id4", "load_model"], [2, 2, 1, "", "model_configs"], [2, 3, 1, "id5", "process_split"], [2, 3, 1, "id6", "process_splits"], [2, 3, 1, "id7", "save_dataset"], [2, 2, 1, "", "token"], [2, 3, 1, "id8", "upload_dataset"]], "ragoon.embeddings.EmbeddingsVisualizer": [[2, 3, 1, "", "create_plot"], [2, 2, 1, "", "dataset"], [2, 2, 1, "", "dataset_path"], [2, 3, 1, "id9", "extract_vectors"], [2, 2, 1, "", "index"], [2, 2, 1, "", "index_path"], [2, 2, 1, "", "labels"], [2, 3, 1, "id10", "load_dataset"], [2, 3, 1, "id11", "load_index"], [2, 3, 1, "", "plot_3d"], [2, 3, 1, "", "reduce_dimensionality"], [2, 2, 1, "", "reduced_vectors"], [2, 2, 1, "", "vectors"], [2, 3, 1, "", "visualize"]], "ragoon.similarity_search": [[2, 1, 1, "", "SimilaritySearch"]], "ragoon.similarity_search.SimilaritySearch": [[2, 3, 1, "id12", "create_faiss_index"], [2, 3, 1, "id13", "create_usearch_index"], [2, 2, 1, "", "device"], [2, 2, 1, "", "dtype"], [2, 3, 1, "id14", "encode"], [2, 3, 1, "id15", "load_faiss_index"], [2, 3, 1, "id16", "load_usearch_index_view"], [2, 2, 1, "", "metric"], [2, 2, 1, "", "model_name"], [2, 2, 1, "", "ndim"], [2, 3, 1, "id17", "quantize_embeddings"], [2, 3, 1, "id18", "search"]], "ragoon.web_rag": [[2, 1, 1, "", "WebRAG"]], "ragoon.web_rag.WebRAG": [[2, 3, 1, "", "search"]]}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "attribute", "Python attribute"], "3": ["py", "method", "Python method"]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:attribute", "3": "py:method"}, "terms": {"": 2, "0": 2, "1": 2, "10": 2, "102": 2, "1024": 2, "16": 2, "3": 2, "36": 2, "3d": 2, "4": 2, "42": 2, "4758": 2, "5": 2, "50": 2, "537": 2, "768": 2, "8": 2, "98": 2, "A": 2, "If": 2, "In": 2, "It": 2, "The": 2, "Then": 2, "acceler": 2, "access": 2, "add": 2, "addit": 2, "address": 2, "after": 2, "against": 2, "all": 2, "allow": 2, "alreadi": 2, "an": 2, "analysi": 2, "ani": 2, "api": 2, "applewebkit": 2, "appli": 2, "approach": 2, "approxim": 2, "ar": 2, "arg": 2, "argument": 2, "articl": 2, "assimil": 2, "assum": 2, "attribut": 2, "au": 2, "avail": 2, "ayant": 2, "bar": 2, "base": 2, "batch": 2, "batch_siz": [1, 2], "been": 2, "being": 2, "binari": 2, "binary_index": 2, "bit": 2, "bool": 2, "both": 2, "bytearrai": 2, "call": 2, "can": 2, "captur": 2, "case": 2, "chain": 2, "chrome": 2, "class": 2, "column": 2, "combin": 2, "comm": 2, "commonli": 2, "compat": 2, "complet": 2, "completion_cli": 2, "completion_data": 2, "completion_model": 2, "compon": 2, "comput": 2, "concis": 2, "configur": 2, "consid\u00e9r\u00e9": 2, "construct": 2, "contain": 2, "content": [0, 1], "context": 2, "contextu": 2, "contribut": 2, "convers": 2, "convert_to_tensor": [1, 2], "corpu": 2, "correspond": 2, "cosin": 2, "cost": 2, "cpu": 2, "creat": 2, "create_faiss_index": [1, 2], "create_plot": [1, 2], "create_usearch_index": [1, 2], "cuda": 2, "cuda_avail": [1, 2], "data": 2, "dataset": [1, 2], "dataset_nam": [1, 2], "dataset_path": [1, 2], "datasetdict": 2, "de": 2, "dedic": 2, "default": 2, "depend": 2, "detail": [], "devic": [1, 2], "dialogu": 2, "dict": 2, "dictionari": 2, "dimens": 2, "dimension": 2, "direct": 2, "directli": 2, "directori": 2, "disk": 2, "document": 2, "domicil": 2, "dot": 2, "dot_scor": 2, "dtype": [1, 2], "dure": 2, "dynam": 2, "e": 2, "each": 2, "effect": 2, "effici": 2, "either": 2, "emb": [1, 2], "embed": [0, 1], "embedding_visu": 2, "embeddingsdataload": [1, 2], "embeddingsvisu": [1, 2], "en": 2, "encod": [1, 2], "enhanc": 2, "ensur": 2, "etc": 2, "exampl": 2, "except": 2, "explor": 2, "extract": 2, "extract_vector": [1, 2], "face": 2, "facilit": 2, "fail": 2, "faiss": 2, "faiss_ubinari": 2, "fals": 2, "faster": 2, "fetch": 2, "few": 2, "figur": 2, "file": 2, "final": 2, "final_compon": 2, "first": 2, "fiscal": 2, "float": 2, "follow": 2, "form": 2, "format": 2, "franc": 2, "from": 2, "full": 2, "function": 2, "further": 2, "g": 2, "gecko": 2, "gener": 2, "get_dataset": [1, 2], "given": 2, "global": 2, "go": 2, "googl": 2, "google_api_kei": 2, "google_cx": 2, "gpu": 2, "ha": 2, "handl": 2, "have": 2, "help": 2, "high": 2, "higher": 2, "html": 2, "html_file_nam": 2, "hub": 2, "hug": 2, "i": 2, "i8": 2, "id": 2, "identifi": 2, "implement": 2, "increas": 2, "index": [0, 1, 2], "index_path": [1, 2], "indic": 2, "inferencecli": 2, "inform": 2, "initi": 2, "inner": 2, "input": 2, "instal": 2, "instanc": 2, "instead": 2, "int": 2, "int8": 2, "int8_embed": 2, "int8_index": 2, "integ": 2, "intent": 2, "interact": 2, "invalid": 2, "ip": 2, "issu": 2, "itself": 2, "json": 2, "k": 2, "karg": 2, "keep": 2, "kei": 2, "keyword": 2, "khtml": 2, "kwarg": 2, "l": 2, "lab": 2, "label": [1, 2], "larg": 2, "learn": 2, "lemon": 2, "length": 2, "leur": 2, "librari": 2, "like": 2, "linear": 2, "list": 2, "llm": 2, "load": 2, "load_dataset": [1, 2], "load_faiss_index": [1, 2], "load_index": [1, 2], "load_model": [1, 2], "load_usearch_index_view": [1, 2], "local": 2, "louisbrulenaudet": 2, "low": 2, "lower": 2, "main": 2, "manag": 2, "manifold": 2, "marker": 2, "mbert": 2, "memori": 2, "method": 2, "metric": [1, 2], "model": 2, "model_config": [1, 2], "model_nam": [1, 2], "modul": 1, "more": 2, "most": 2, "mozilla": 2, "multipli": 2, "must": 2, "my": 2, "n": 2, "name": 2, "ndarrai": 2, "ndim": [1, 2], "non": 2, "none": 2, "normal": 2, "normalize_embed": 2, "note": 2, "np": 2, "nt": 2, "nuanc": 2, "number": 2, "numpi": 2, "object": 2, "one": 2, "onto": 2, "oper": 2, "option": 2, "output": 2, "output_dir": 2, "packag": 1, "page": 0, "paramet": 2, "particularli": 2, "pass": 2, "passag": 2, "passage_prefix": 2, "path": 2, "pca": 2, "pca_compon": 2, "pca_umap": 2, "perform": 2, "pipelin": 2, "pleas": 2, "plot": 2, "plot_3d": [1, 2], "plotli": 2, "point": 2, "point_siz": 2, "posit": 2, "precis": 2, "prefix": 2, "preserv": 2, "princip": 2, "process": 2, "process_split": [1, 2], "product": 2, "progress": 2, "project": 2, "provid": 2, "quantiz": 2, "quantization_typ": 2, "quantize_embed": [1, 2], "queri": 2, "query_prefix": 2, "question": 2, "rais": 2, "random": 2, "random_st": 2, "re": 2, "readi": 2, "reduc": 2, "reduce_dimension": [1, 2], "reduced_vector": [1, 2], "reduct": 2, "relat": 2, "relev": 2, "repo_id": 2, "repositori": 2, "represent": 2, "reproduc": 2, "requir": 2, "rescore_multipli": 2, "respons": 2, "restructuredtext": [], "result": 2, "retriev": 2, "return": 2, "rich": 2, "runtimeerror": 2, "safari": 2, "sampl": 2, "save": 2, "save_dataset": [1, 2], "save_html": 2, "scatter": 2, "score": 2, "search": [0, 1, 2], "search_queri": 2, "see": [], "self": 2, "sen": 2, "sentenc": 2, "sentencetransform": 2, "shot": 2, "should": 2, "show": 2, "significantli": 2, "similar": 2, "similarity_search": [0, 1], "similaritysearch": [1, 2], "size": 2, "sne": 2, "sont": 2, "sourc": 2, "space": 2, "specif": 2, "specifi": 2, "split": 2, "state": 2, "step": 2, "storag": 2, "store": 2, "str": 2, "string": 2, "structur": 2, "submodul": 1, "subsequ": 2, "suit": 2, "syntax": [], "system_prompt": 2, "t": 2, "tailor": 2, "techniqu": 2, "tensor": 2, "text": 2, "them": 2, "thi": 2, "titl": 2, "token": [1, 2], "top": 2, "top_k": 2, "top_k_indic": 2, "top_k_scor": 2, "track": 2, "true": 2, "tsdae": 2, "tsne": 2, "tupl": 2, "two": 2, "type": 2, "ubinari": 2, "ubinary_embed": 2, "umap": 2, "underli": 2, "uniform": 2, "union": 2, "unsign": 2, "unsupport": 2, "upload": 2, "upload_dataset": [1, 2], "us": 2, "usearch": 2, "usearch_int8": 2, "user": 2, "user_ag": 2, "util": 2, "valu": 2, "valueerror": 2, "vari": 2, "vector": [1, 2], "view": 2, "visual": [1, 2], "web_rag": [0, 1], "webrag": [1, 2], "well": 2, "when": 2, "where": 2, "whether": 2, "which": 2, "win64": 2, "window": 2, "would": 2, "x64": 2, "yet": 2, "your": []}, "titles": ["RAGoon documentation", "ragoon", "ragoon package"], "titleterms": {"content": 2, "document": 0, "embed": 2, "indic": 0, "modul": [0, 2], "packag": [0, 2], "ragoon": [0, 1, 2], "similarity_search": 2, "submodul": [0, 2], "tabl": 0, "web_rag": 2}}) \ No newline at end of file diff --git a/docs/source/conf.py b/docs/source/conf.py index c4a597a..83013d6 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -43,8 +43,6 @@ html_static_path = ['_static'] html_theme_options = { - "show_nav_level": 2, # Controls the number of navigation levels to show - "navigation_depth": 4, # Adjust the depth of navigation levels "external_links": [ {"name": "GitHub", "url": "https://github.com/louisbrulenaudet"}, {"name": "Twitter", "url": "https://x.com/louisbrulenaudet"} diff --git a/docs/source/index.rst b/docs/source/index.rst index 1306f99..7faea83 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -10,13 +10,16 @@ Contents: .. toctree:: :maxdepth: 2 - :caption: Contents: + :caption: Modules: - introduction modules api_reference ragoon +<<<<<<< HEAD +======= + +>>>>>>> parent of f9a7317 (Add section navigation to Sphinx documentation) Indices and tables ================== diff --git a/docs/source/introduction.rst b/docs/source/introduction.rst deleted file mode 100644 index 2a1cab4..0000000 --- a/docs/source/introduction.rst +++ /dev/null @@ -1,8 +0,0 @@ -Introduction -============ - -Welcome to the RAGoon documentation. This section provides an overview of the project. - -.. contents:: Table of Contents - :local: - :depth: 2