From 2b83a1101fa2df2e60d83ac4d72d37da14721626 Mon Sep 17 00:00:00 2001 From: Lev Kokotov Date: Fri, 26 Apr 2024 13:25:20 -0700 Subject: [PATCH] more docs (#1425) --- pgml-cms/docs/.gitbook/assets/fdw_1.png | Bin 31956 -> 36151 bytes .../.gitbook/assets/logical_replication_1.png | Bin 33862 -> 37965 bytes pgml-cms/docs/SUMMARY.md | 1 - pgml-cms/docs/api/apis.md | 49 ++-- pgml-cms/docs/api/client-sdk/README.md | 255 ++++++++++++++++-- .../docs/api/client-sdk/getting-started.md | 249 ----------------- .../introduction/getting-started/README.md | 2 +- .../getting-started/connect-your-app.md | 2 +- .../getting-started/create-your-database.md | 2 +- .../import-your-data/README.md | 8 +- .../getting-started/import-your-data/copy.md | 4 + .../import-your-data/foreign-data-wrappers.md | 6 +- .../logical-replication/README.md | 6 +- .../logical-replication/inside-a-vpc.md | 2 +- .../import-your-data/pg-dump.md | 4 + pgml-cms/docs/product/pgcat/README.md | 2 +- pgml-cms/docs/product/pgcat/configuration.md | 6 +- pgml-cms/docs/product/pgcat/features.md | 4 + pgml-cms/docs/product/pgcat/installation.md | 4 + pgml-cms/docs/product/vector-database.md | 2 +- pgml-dashboard/src/api/cms.rs | 155 ++++++++--- pgml-dashboard/src/utils/markdown.rs | 7 +- .../static/css/bootstrap-theme.scss | 2 + .../static/css/scss/components/_modals.scss | 4 + 24 files changed, 443 insertions(+), 333 deletions(-) delete mode 100644 pgml-cms/docs/api/client-sdk/getting-started.md diff --git a/pgml-cms/docs/.gitbook/assets/fdw_1.png b/pgml-cms/docs/.gitbook/assets/fdw_1.png index 0dbce2380bcf3df1966d45ec116f007abe5d2408..c19ed86f62b54ee70850b97357485bb1cbf89109 100644 GIT binary patch literal 36151 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≧^(n-AWgYKD{IfCp>rxID}Tv)i}uc0>}L)YNG&w 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 { + const collection = pgml.newCollection("sample_collection"); +} +``` +{% endtab %} + +{% tab title="Python" %} +```python +from pgml import Collection, Pipeline +import asyncio + +async def main(): + collection = Collection("sample_collection") +``` +{% endtab %} +{% endtabs %} + +The above example imports the `pgml` module and creates a collection object. By itself, the collection only tracks document contents and identifiers, but once we add a pipeline, we can instruct the SDK to perform additional tasks when documents and are inserted and retrieved. + + +### Create a pipeline + +Continuing the example, we will create a pipeline called `sample_pipeline`, which will use in-database embeddings generation to automatically chunk and embed documents: + +{% tabs %} +{% tab title="JavaScript" %} +```javascript +// Add this code to the end of the main function from the above example. +const pipeline = pgml.newPipeline("sample_pipeline", { + text: { + splitter: { model: "recursive_character" }, + semantic_search: { + model: "intfloat/e5-small", + }, + }, +}); + +await collection.add_pipeline(pipeline); +``` +{% endtab %} + +{% tab title="Python" %} +```python +# Add this code to the end of the main function from the above example. +pipeline = Pipeline( + "test_pipeline", + { + "text": { + "splitter": { "model": "recursive_character" }, + "semantic_search": { + "model": "intfloat/e5-small", + }, + }, + }, +) + +await collection.add_pipeline(pipeline) +``` +{% endtab %} +{% endtabs %} + +The pipeline configuration is a key/value object, where the key is the name of a column in a document, and the value is the action the SDK should perform on that column. + +In this example, the documents contain a column called `text` which we are instructing the SDK to chunk the contents of using the recursive character splitter, and to embed those chunks using the Hugging Face `intfloat/e5-small` embeddings model. + +### Add documents + +Once the pipeline is configured, we can start adding documents: + +{% tabs %} +{% tab title="JavaScript" %} +```javascript +// Add this code to the end of the main function from the above example. +const documents = [ + { + id: "Document One", + text: "document one contents...", + }, + { + id: "Document Two", + text: "document two contents...", + }, +]; + +await collection.upsert_documents(documents); +``` +{% endtab %} + +{% tab title="Python" %} +```python +# Add this code to the end of the main function in the above example. +documents = [ + { + "id": "Document One", + "text": "document one contents...", + }, + { + "id": "Document Two", + "text": "document two contents...", + }, +] + +await collection.upsert_documents(documents) +``` +{% endtab %} +{% endtabs %} + +If the same document `id` is used, the SDK computes the difference between existing and new documents and only updates the chunks that have changed. + +### Search documents + +Now that the documents are stored, chunked and embedded, we can start searching the collection: + +{% tabs %} +{% tab title="JavaScript" %} +```javascript +// Add this code to the end of the main function in the above example. +const results = await collection.vector_search( + { + query: { + fields: { + text: { + query: "Something about a document...", + }, + }, + }, + limit: 2, + }, + pipeline, +); + +console.log(results); +``` +{% endtab %} + +{% tab title="Python" %} +```python +# Add this code to the end of the main function in the above example. +results = await collection.vector_search( + { + "query": { + "fields": { + "text": { + "query": "Something about a document...", + }, + }, + }, + "limit": 2, + }, + pipeline, +) + +print(results) +``` +{% endtab %} +{% endtabs %} + +We are using built-in vector search, powered by embeddings and the PostgresML [pgml.embed()](../sql-extension/pgml.embed) function, which embeds the `query` argument, compares it to the embeddings stored in the database, and returns the top two results, ranked by cosine similarity. + +### Run the example -* **Automated Database Management**: You can easily handle the management of database tables related to documents, text chunks, text splitters, LLM models, and embeddings. This automated management system simplifies the process of setting up and maintaining your vector search application's data structure. -* **Embedding Generation from Open Source Models**: Provides the ability to generate embeddings using hundreds of open source models. These models, trained on vast amounts of data, capture the semantic meaning of text and enable powerful analysis and search capabilities. -* **Flexible and Scalable Vector Search**: Build flexible and scalable vector search applications. PostgresML seamlessly integrates with PgVector, a PostgreSQL extension specifically designed for handling vector-based indexing and querying. By leveraging these indices, you can perform advanced searches, rank results by relevance, and retrieve accurate and meaningful information from your database. +Since the SDK is using async code, both JavaScript and Python need a little bit of code to run it correctly: -### Use Cases +{% tabs %} +{% tab title="JavaScript" %} +```javascript +main().then(() => { + console.log("SDK example complete"); +}); +``` +{% endtab %} -* Search: Embeddings are commonly used for search functionalities, where results are ranked by relevance to a query string. By comparing the embeddings of query strings and documents, you can retrieve search results in order of their similarity or relevance. -* Clustering: With embeddings, you can group text strings by similarity, enabling clustering of related data. By measuring the similarity between embeddings, you can identify clusters or groups of text strings that share common characteristics. -* Recommendations: Embeddings play a crucial role in recommendation systems. By identifying items with related text strings based on their embeddings, you can provide personalized recommendations to users. -* Anomaly Detection: Anomaly detection involves identifying outliers or anomalies that have little relatedness to the rest of the data. Embeddings can aid in this process by quantifying the similarity between text strings and flagging outliers. -* Classification: Embeddings are utilized in classification tasks, where text strings are classified based on their most similar label. By comparing the embeddings of text strings and labels, you can classify new text strings into predefined categories. +{% tab title="Python" %} +```python +if __name__ == "__main__": + asyncio.run(main()) +``` +{% endtab %} +{% endtabs %} -### How the SDK Works +Once you run the example, you should see something like this in the terminal: -SDK streamlines the development of vector search applications by abstracting away the complexities of database management and indexing. Here's an overview of how the SDK works: +```bash +[ + { + "chunk": "document one contents...", + "document": {"id": "Document One", "text": "document one contents..."}, + "score": 0.9034339189529419, + }, + { + "chunk": "document two contents...", + "document": {"id": "Document Two", "text": "document two contents..."}, + "score": 0.8983734250068665, + }, +] +``` -* **Automatic Document and Text Chunk Management**: The SDK provides a convenient interface to manage documents and pipelines, automatically handling chunking and embedding for you. You can easily organize and structure your text data within the PostgreSQL database. -* **Open Source Model Integration**: With the SDK, you can seamlessly incorporate a wide range of open source models to generate high-quality embeddings. These models capture the semantic meaning of text and enable powerful analysis and search capabilities. -* **Embedding Indexing**: The Python SDK utilizes the PgVector extension to efficiently index the embeddings generated by the open source models. This indexing process optimizes search performance and allows for fast and accurate retrieval of relevant results. -* **Querying and Search**: Once the embeddings are indexed, you can perform vector-based searches on the documents and text chunks stored in the PostgreSQL database. The SDK provides intuitive methods for executing queries and retrieving search results. diff --git a/pgml-cms/docs/api/client-sdk/getting-started.md b/pgml-cms/docs/api/client-sdk/getting-started.md deleted file mode 100644 index fd2f590ae..000000000 --- a/pgml-cms/docs/api/client-sdk/getting-started.md +++ /dev/null @@ -1,249 +0,0 @@ -# Overview - -## Installation - -{% tabs %} -{% tab title="JavaScript " %} -```bash -npm i pgml -``` -{% endtab %} - -{% tab title="Python " %} -```bash -pip install pgml -``` -{% endtab %} -{% endtabs %} - -## Example - -Once the SDK is installed, you can use the following example to get started. - -### Create a collection - -{% tabs %} -{% tab title="JavaScript " %} -```javascript -const pgml = require("pgml"); - -const main = async () => { // Open the main function - collection = pgml.newCollection("sample_collection"); -``` -{% endtab %} - -{% tab title="Python" %} -```python -from pgml import Collection, Pipeline -import asyncio - -async def main(): # Start of the main function - collection = Collection("sample_collection") -``` -{% endtab %} -{% endtabs %} - -**Explanation:** - -* The code imports the pgml module. -* It creates an instance of the Collection class which we will add pipelines and documents onto - -### Create a pipeline - -Continuing with `main` - -{% tabs %} -{% tab title="JavaScript" %} -```javascript -const pipeline = pgml.newPipeline("sample_pipeline", { - text: { - splitter: { model: "recursive_character" }, - semantic_search: { - model: "intfloat/e5-small", - }, - }, -}); -await collection.add_pipeline(pipeline); -``` -{% endtab %} - -{% tab title="Python" %} -```python -pipeline = Pipeline( - "test_pipeline", - { - "text": { - "splitter": { "model": "recursive_character" }, - "semantic_search": { - "model": "intfloat/e5-small", - }, - }, - }, -) -await collection.add_pipeline(pipeline) -``` -{% endtab %} -{% endtabs %} - -#### Explanation - -* The code constructs a pipeline called `"sample_pipeline"` and adds it to the collection we Initialized above. This pipeline automatically generates chunks and embeddings for the `text` key for every upserted document. - -### Upsert documents - -Continuing with `main` - -{% tabs %} -{% tab title="JavaScript" %} -```javascript -const documents = [ - { - id: "Document One", - text: "document one contents...", - }, - { - id: "Document Two", - text: "document two contents...", - }, -]; -await collection.upsert_documents(documents); -``` -{% endtab %} - -{% tab title="Python" %} -```python -documents = [ - { - "id": "Document One", - "text": "document one contents...", - }, - { - "id": "Document Two", - "text": "document two contents...", - }, -] -await collection.upsert_documents(documents) -``` -{% endtab %} -{% endtabs %} - -**Explanation** - -* This code creates and upserts some filler documents. -* As mentioned above, the pipeline added earlier automatically runs and generates chunks and embeddings for each document. - -### Query documents - -Continuing with `main` - -{% tabs %} -{% tab title="JavaScript" %} -```javascript -const results = await collection.vector_search( - { - query: { - fields: { - text: { - query: "Something about a document...", - }, - }, - }, - limit: 2, - }, - pipeline, -); - -console.log(results); - -await collection.archive(); - -} // Close the main function -``` -{% endtab %} - -{% tab title="Python" %} -```python -results = await collection.vector_search( - { - "query": { - "fields": { - "text": { - "query": "Something about a document...", - }, - }, - }, - "limit": 2, - }, - pipeline, -) - -print(results) - -await collection.archive() - -# End of the main function -``` -{% endtab %} -{% endtabs %} - -**Explanation:** - -* The `query` method is called to perform a vector-based search on the collection. The query string is `Something about a document...`, and the top 2 results are requested -* The search results are printed to the screen -* Finally, the `archive` method is called to archive the collection - -Call `main` function. - -{% tabs %} -{% tab title="JavaScript" %} -```javascript -main().then(() => { - console.log("Done with PostgresML demo"); -}); -``` -{% endtab %} - -{% tab title="Python" %} -```python -if __name__ == "__main__": - asyncio.run(main()) -``` -{% endtab %} -{% endtabs %} - -### **Running the Code** - -Open a terminal or command prompt and navigate to the directory where the file is saved. - -Execute the following command: - -{% tabs %} -{% tab title="JavaScript" %} -```bash -node vector_search.js -``` -{% endtab %} - -{% tab title="Python" %} -```bash -python3 vector_search.py -``` -{% endtab %} -{% endtabs %} - -You should see the search results printed in the terminal. - -```bash -[ - { - "chunk": "document one contents...", - "document": {"id": "Document One", "text": "document one contents..."}, - "score": 0.9034339189529419, - }, - { - "chunk": "document two contents...", - "document": {"id": "Document Two", "text": "document two contents..."}, - "score": 0.8983734250068665, - }, -] -``` diff --git a/pgml-cms/docs/introduction/getting-started/README.md b/pgml-cms/docs/introduction/getting-started/README.md index cde0c6d3a..df15a1dee 100644 --- a/pgml-cms/docs/introduction/getting-started/README.md +++ b/pgml-cms/docs/introduction/getting-started/README.md @@ -1,5 +1,5 @@ --- -description: Setup a database and connect your application to PostgresML +description: Getting starting with PostgresML, a GPU powered machine learning database. --- # Getting started diff --git a/pgml-cms/docs/introduction/getting-started/connect-your-app.md b/pgml-cms/docs/introduction/getting-started/connect-your-app.md index c0b003220..642b32597 100644 --- a/pgml-cms/docs/introduction/getting-started/connect-your-app.md +++ b/pgml-cms/docs/introduction/getting-started/connect-your-app.md @@ -1,5 +1,5 @@ --- -description: PostgresML is compatible with all standard PostgreSQL clients +description: Connect your application to PostgresML using our SDK or any standard PostgreSQL client. --- # Connect your app diff --git a/pgml-cms/docs/introduction/getting-started/create-your-database.md b/pgml-cms/docs/introduction/getting-started/create-your-database.md index 01e8c53f4..c20568059 100644 --- a/pgml-cms/docs/introduction/getting-started/create-your-database.md +++ b/pgml-cms/docs/introduction/getting-started/create-your-database.md @@ -1,6 +1,6 @@ --- description: >- - You can create a GPU powered database in less than a minute using our hosted + Create a GPU powered database in less than a minute using our hosted cloud. --- diff --git a/pgml-cms/docs/introduction/getting-started/import-your-data/README.md b/pgml-cms/docs/introduction/getting-started/import-your-data/README.md index 49d2cd15e..0ab10669c 100644 --- a/pgml-cms/docs/introduction/getting-started/import-your-data/README.md +++ b/pgml-cms/docs/introduction/getting-started/import-your-data/README.md @@ -1,3 +1,7 @@ +--- +description: Import your data into PostgresML using one of many supported methods. +--- + # Import your data AI needs data, whether it's generating text with LLMs, creating embeddings, or training regression or classification models on customer data. @@ -12,7 +16,7 @@ If your intention is to use PostgresML as your primary database, your job here i If your primary database is hosted elsewhere, for example AWS RDS, or Azure Postgres, you can get your data replicated to PostgresML in real time using logical replication. -

Logical replication
+
Logical replication
Having access to your data immediately is very useful to accelerate your machine learning use cases and removes the need for moving data multiple times between microservices. Latency-sensitive applications should consider using this approach. @@ -21,7 +25,7 @@ accelerate your machine learning use cases and removes the need for moving data Foreign data wrappers are a set of PostgreSQL extensions that allow making direct connections from inside the database directly to other databases, even if they aren't running on Postgres. For example, Postgres has foreign data wrappers for MySQL, S3, Snowflake and many others. -
Foreign data wrappers
+
Foreign data wrappers
FDWs are useful when data access is infrequent and not latency-sensitive. For many use cases, like offline batch workloads and not very busy websites, this approach is suitable and easy to get started with. diff --git a/pgml-cms/docs/introduction/getting-started/import-your-data/copy.md b/pgml-cms/docs/introduction/getting-started/import-your-data/copy.md index 1e590cb87..29b22b684 100644 --- a/pgml-cms/docs/introduction/getting-started/import-your-data/copy.md +++ b/pgml-cms/docs/introduction/getting-started/import-your-data/copy.md @@ -1,3 +1,7 @@ +--- +description: Move data into PostgresML from data files using COPY and CSV. +--- + # Move data with COPY Data that changes infrequently can be easily imported into PostgresML (and any other Postgres database) using `COPY`. All you have to do is export your data as a file, create a table in Postgres to store it, and import it using the command line (or your IDE of choice). diff --git a/pgml-cms/docs/introduction/getting-started/import-your-data/foreign-data-wrappers.md b/pgml-cms/docs/introduction/getting-started/import-your-data/foreign-data-wrappers.md index e6d068e88..27c9d9227 100644 --- a/pgml-cms/docs/introduction/getting-started/import-your-data/foreign-data-wrappers.md +++ b/pgml-cms/docs/introduction/getting-started/import-your-data/foreign-data-wrappers.md @@ -1,8 +1,12 @@ +--- +description: Connect your production database to PostgresML using Foreign Data Wrappers. +--- + # Foreign Data Wrappers Foreign data wrappers are a set of Postgres extensions that allow making direct connections to other databases from inside your PostgresML database. Other databases can be your production Postgres database on RDS or Azure, or another database engine like MySQL, Snowflake, or even an S3 bucket. -
+
Foreign data wrappers
## Getting started diff --git a/pgml-cms/docs/introduction/getting-started/import-your-data/logical-replication/README.md b/pgml-cms/docs/introduction/getting-started/import-your-data/logical-replication/README.md index 11de28b51..d5371b391 100644 --- a/pgml-cms/docs/introduction/getting-started/import-your-data/logical-replication/README.md +++ b/pgml-cms/docs/introduction/getting-started/import-your-data/logical-replication/README.md @@ -1,8 +1,12 @@ +--- +description: Stream data from your primary database to PostgresML in real time using logical replication. +--- + # Logical replication Logical replication allows your PostgresML database to copy data from your primary database to PostgresML in real time. As soon as your customers make changes to their data on your website, those changes will become available in PostgresML. -
+
Logical replication
## Getting started diff --git a/pgml-cms/docs/introduction/getting-started/import-your-data/logical-replication/inside-a-vpc.md b/pgml-cms/docs/introduction/getting-started/import-your-data/logical-replication/inside-a-vpc.md index 4c45db575..55da8bafb 100644 --- a/pgml-cms/docs/introduction/getting-started/import-your-data/logical-replication/inside-a-vpc.md +++ b/pgml-cms/docs/introduction/getting-started/import-your-data/logical-replication/inside-a-vpc.md @@ -3,7 +3,7 @@ If your database doesn't have Internet access, PostgresML will need a service to proxy connections to your database. Any TCP proxy will do, and we also provide an nginx-based Docker image than can be used without any additional configuration. -
+
VPC
## PostgresML IPs by region diff --git a/pgml-cms/docs/introduction/getting-started/import-your-data/pg-dump.md b/pgml-cms/docs/introduction/getting-started/import-your-data/pg-dump.md index 61cf688f6..b6e13b183 100644 --- a/pgml-cms/docs/introduction/getting-started/import-your-data/pg-dump.md +++ b/pgml-cms/docs/introduction/getting-started/import-your-data/pg-dump.md @@ -1,3 +1,7 @@ +--- +description: Migrate your PostgreSQL database to PostgresML using pg_dump. +--- + # Migrate with pg_dump _pg_dump_ is a command-line PostgreSQL tool that can move data between PostgreSQL databases. If you're planning a migration from your database to PostgresML, _pg_dump_ is a good tool to get you going quickly. diff --git a/pgml-cms/docs/product/pgcat/README.md b/pgml-cms/docs/product/pgcat/README.md index 326252032..805422e97 100644 --- a/pgml-cms/docs/product/pgcat/README.md +++ b/pgml-cms/docs/product/pgcat/README.md @@ -1,5 +1,5 @@ --- -description: Nextgen PostgreSQL Pooler +description: PgCat, the PostgreSQL connection pooler and proxy with support for sharding, load balancing, failover, and many more features. --- # PgCat pooler diff --git a/pgml-cms/docs/product/pgcat/configuration.md b/pgml-cms/docs/product/pgcat/configuration.md index c7e14db72..0fe2c4e54 100644 --- a/pgml-cms/docs/product/pgcat/configuration.md +++ b/pgml-cms/docs/product/pgcat/configuration.md @@ -1,4 +1,8 @@ -# Configuration +--- +description: PgCat configuration settings & recommended default values. +--- + +# PgCat configuration PgCat offers many features out of the box, and comes with good default values for most of its configuration options, but some minimal configuration is required before PgCat can start serving PostgreSQL traffic. diff --git a/pgml-cms/docs/product/pgcat/features.md b/pgml-cms/docs/product/pgcat/features.md index df09649cb..f00ff7fb4 100644 --- a/pgml-cms/docs/product/pgcat/features.md +++ b/pgml-cms/docs/product/pgcat/features.md @@ -1,3 +1,7 @@ +--- +description: PgCat features like sharding, load balancing and failover. +--- + # PgCat features PgCat has many features currently in various stages of readiness and development. Most of its features are used in production and at scale. diff --git a/pgml-cms/docs/product/pgcat/installation.md b/pgml-cms/docs/product/pgcat/installation.md index 07248ba4d..b3b151bc4 100644 --- a/pgml-cms/docs/product/pgcat/installation.md +++ b/pgml-cms/docs/product/pgcat/installation.md @@ -1,3 +1,7 @@ +--- +description: PgCat installation instructions from source, Aptitude repository and using Docker. +--- + # PgCat installation If you're using our [cloud](https://postgresml.org/signup), you're already using PgCat. All databases are using the latest and greatest PgCat version, with automatic updates and monitoring. You can connect directly with your PostgreSQL client libraries and applications, and PgCat will take care of the rest. diff --git a/pgml-cms/docs/product/vector-database.md b/pgml-cms/docs/product/vector-database.md index 71db1684f..5db1582bc 100644 --- a/pgml-cms/docs/product/vector-database.md +++ b/pgml-cms/docs/product/vector-database.md @@ -1,5 +1,5 @@ --- -description: Store, index and query vectors, with pgvector +description: Use PostgreSQL as your vector database to store, index and search vectors with the pgvector extension. --- # Vector database diff --git a/pgml-dashboard/src/api/cms.rs b/pgml-dashboard/src/api/cms.rs index e376d7e9a..608273ef0 100644 --- a/pgml-dashboard/src/api/cms.rs +++ b/pgml-dashboard/src/api/cms.rs @@ -29,7 +29,6 @@ lazy_static! { "Blog", true, HashMap::from([ - ("the-1.0-sdk-is-here", "the-1.0-sdk-is-here"), ("announcing-hnsw-support-in-our-sdk", "speeding-up-vector-recall-5x-with-hnsw"), ("backwards-compatible-or-bust-python-inside-rust-inside-postgres/", "backwards-compatible-or-bust-python-inside-rust-inside-postgres"), ("data-is-living-and-relational/", "data-is-living-and-relational"), @@ -63,6 +62,7 @@ lazy_static! { ("transformers/fine_tuning/", "api/sql-extension/pgml.tune"), ("guides/predictions/overview", "api/sql-extension/pgml.predict/"), ("machine-learning/supervised-learning/data-pre-processing", "api/sql-extension/pgml.train/data-pre-processing"), + ("api/client-sdk/getting-started", "api/client-sdk/"), ]) ); } @@ -115,6 +115,7 @@ pub struct Document { // url to thumbnail for social share pub thumbnail: Option, pub url: String, + pub ignore: bool, } // Gets document markdown @@ -189,7 +190,7 @@ impl Document { }; // parse meta section - let (description, image, featured, tags) = match meta { + let (description, image, featured, tags, ignore) = match meta { Some(meta) => { let description = if meta["description"].is_badvalue() { None @@ -234,9 +235,15 @@ impl Document { tags }; - (description, image, featured, tags) + let ignore = if meta["ignore"].is_badvalue() { + false + } else { + meta["ignore"].as_bool().unwrap_or(false) + }; + + (description, image, featured, tags, ignore) } - None => (None, Some(default_image_path.clone()), false, Vec::new()), + None => (None, Some(default_image_path.clone()), false, Vec::new(), false), }; let thumbnail = match &image { @@ -300,6 +307,7 @@ impl Document { doc_type, thumbnail, url, + ignore, }; Ok(document) } @@ -328,6 +336,38 @@ impl Document { html } + + pub fn ignore(&self) -> bool { + self.ignore + } +} + +#[derive(Debug, Clone)] +pub struct ContentPath { + path: PathBuf, + canonical: String, + redirected: bool, +} + +impl ContentPath { + /// Should we issue a 301 redirect instead. + pub fn redirect(&self) -> bool { + self.redirected + } + + pub fn path(&self) -> PathBuf { + self.path.clone() + } + + pub fn canonical(&self) -> String { + self.canonical.clone() + } +} + +impl From for PathBuf { + fn from(path: ContentPath) -> PathBuf { + path.path + } } /// A Gitbook collection of documents @@ -373,37 +413,56 @@ impl Collection { } pub async fn get_asset(&self, path: &str) -> Option { - info!("get_asset: {} {path}", self.name); + debug!("get_asset: {} {path}", self.name); NamedFile::open(self.asset_dir.join(path)).await.ok() } - pub async fn get_content_path(&self, mut path: PathBuf, origin: &Origin<'_>) -> (PathBuf, String) { - info!("get_content: {} | {path:?}", self.name); + /// Get the actual path on disk to the content being requested. + /// + /// # Arguments + /// + /// * `path` - The path to the content being requested. + /// * `origin` - The HTTP origin of the request. + /// + pub async fn get_content_path(&self, mut path: PathBuf, origin: &Origin<'_>) -> ContentPath { + debug!("get_content: {} | {path:?}", self.name); - let mut redirected = false; match self .redirects .get(path.as_os_str().to_str().expect("needs to be a well formed path")) { Some(redirect) => { - warn!("found redirect: {} <- {:?}", redirect, path); - redirected = true; // reserved for some fallback path - path = PathBuf::from(redirect); + debug!("found redirect: {} <- {:?}", redirect, path); + + return ContentPath { + redirected: true, + path: PathBuf::from(redirect), + canonical: "".into(), + }; } - None => {} - }; + None => (), + } + let canonical = format!( "https://postgresml.org{}/{}", self.url_root.to_string_lossy(), path.to_string_lossy() ); - if origin.path().ends_with("/") && !redirected { + + if origin.path().ends_with("/") { path = path.join("README"); } + let path = self.root_dir.join(format!("{}.md", path.to_string_lossy())); - (path, canonical) + let path = ContentPath { + path, + canonical, + redirected: false, + }; + + path } /// Create an index of the Collection based on the SUMMARY.md from Gitbook. @@ -605,7 +664,7 @@ impl Collection { path: &'a PathBuf, canonical: &str, cluster: &Cluster, - ) -> Result { + ) -> Result { match Document::from_path(&path).await { Ok(doc) => { let head = crate::components::layouts::Head::new() @@ -626,7 +685,7 @@ impl Collection { article.is_careers() }; - Ok(ResponseOk(layout.render(article))) + Ok(Response::ok(layout.render(article))) } // Return page not found on bad path _ => { @@ -758,9 +817,16 @@ async fn get_blog( path: PathBuf, cluster: &Cluster, origin: &Origin<'_>, -) -> Result { - let (doc_file_path, canonical) = BLOG.get_content_path(path.clone(), origin).await; - BLOG.render(&doc_file_path, &canonical, cluster).await +) -> Result { + let content_path = BLOG.get_content_path(path, origin).await; + + if content_path.redirect() { + let redirect = Path::new("/blog/").join(content_path.path()).display().to_string(); + return Ok(Response::redirect(redirect)); + } + + let canonical = content_path.canonical(); + BLOG.render(&content_path.into(), &canonical, cluster).await } #[get("/careers/", rank = 5)] @@ -768,9 +834,16 @@ async fn get_careers( path: PathBuf, cluster: &Cluster, origin: &Origin<'_>, -) -> Result { - let (doc_file_path, canonical) = CAREERS.get_content_path(path.clone(), origin).await; - CAREERS.render(&doc_file_path, &canonical, cluster).await +) -> Result { + let content_path = CAREERS.get_content_path(path, origin).await; + + if content_path.redirect() { + let redirect = Path::new("/blog/").join(content_path.path()).display().to_string(); + return Ok(Response::redirect(redirect)); + } + + let canonical = content_path.canonical(); + CAREERS.render(&content_path.into(), &canonical, cluster).await } #[get("/careers/apply/", rank = 4)] @@ -789,33 +862,35 @@ async fn get_docs( path: PathBuf, cluster: &Cluster, origin: &Origin<'_>, -) -> Result<ResponseOk, crate::responses::NotFound> { - let (doc_file_path, canonical) = DOCS.get_content_path(path.clone(), origin).await; +) -> Result<Response, crate::responses::NotFound> { + use crate::components::{layouts::Docs, pages::docs::Article}; + + let content_path = DOCS.get_content_path(path, origin).await; - match Document::from_path(&doc_file_path).await { - Ok(doc) => { + if content_path.redirect() { + let redirect = Path::new("/docs/").join(content_path.path()).display().to_string(); + return Ok(Response::redirect(redirect)); + } + + if let Ok(doc) = Document::from_path(&content_path.clone().into()).await { + if !doc.ignore() { let index = DOCS.open_index(&doc.path); - let layout = crate::components::layouts::Docs::new(&doc.title, Some(cluster)) + let layout = Docs::new(&doc.title, Some(cluster)) .index(&index) .image(&doc.thumbnail) - .canonical(&canonical); + .canonical(&content_path.canonical()); - let page = crate::components::pages::docs::Article::new(&cluster) - .toc_links(&doc.toc_links) - .content(&doc.html()); + let page = Article::new(&cluster).toc_links(&doc.toc_links).content(&doc.html()); - Ok(ResponseOk(layout.render(page))) + return Ok(Response::ok(layout.render(page))); } - // Return page not found on bad path - _ => { - let layout = crate::components::layouts::Docs::new("404", Some(cluster)).index(&DOCS.index); + } - let page = crate::components::pages::docs::Article::new(&cluster).document_not_found(); + let layout = crate::components::layouts::Docs::new("404", Some(cluster)).index(&DOCS.index); + let page = crate::components::pages::docs::Article::new(&cluster).document_not_found(); - Err(crate::responses::NotFound(layout.render(page))) - } - } + Err(crate::responses::NotFound(layout.render(page))) } #[get("/blog")] diff --git a/pgml-dashboard/src/utils/markdown.rs b/pgml-dashboard/src/utils/markdown.rs index 0b42a9121..26b39155f 100644 --- a/pgml-dashboard/src/utils/markdown.rs +++ b/pgml-dashboard/src/utils/markdown.rs @@ -517,7 +517,8 @@ pub fn get_toc<'a>(root: &'a AstNode<'a>) -> anyhow::Result<Vec<TocLink>> { let text = if let NodeValue::Text(text) = &sibling.data.borrow().value { Some(text.clone()) } else if let NodeValue::Link(_link) = &sibling.data.borrow().value { - let text = sibling.children() + let text = sibling + .children() .into_iter() .map(|child| { if let NodeValue::Text(text) = &child.data.borrow().value { @@ -1378,6 +1379,10 @@ impl SiteSearch { let documents: Vec<Document> = documents .into_iter() .filter(|f| { + if f.ignore() { + return false; + } + !EXCLUDED_DOCUMENT_PATHS .iter() .any(|p| f.path == config::cms_dir().join(p)) diff --git a/pgml-dashboard/static/css/bootstrap-theme.scss b/pgml-dashboard/static/css/bootstrap-theme.scss index 212a7a47f..7bc03ad0c 100644 --- a/pgml-dashboard/static/css/bootstrap-theme.scss +++ b/pgml-dashboard/static/css/bootstrap-theme.scss @@ -90,6 +90,8 @@ @import 'scss/components/images'; @import 'scss/components/code'; @import 'scss/components/forms'; +@import 'scss/components/modals'; + // pages @import 'scss/pages/docs'; @import 'scss/pages/notebooks'; diff --git a/pgml-dashboard/static/css/scss/components/_modals.scss b/pgml-dashboard/static/css/scss/components/_modals.scss index 6b1d6efdd..6c6837c20 100644 --- a/pgml-dashboard/static/css/scss/components/_modals.scss +++ b/pgml-dashboard/static/css/scss/components/_modals.scss @@ -26,3 +26,7 @@ border: none; } } + +.modal-backdrop { + --bs-backdrop-opacity: 0.9; +}