Pipeline steps#

Each step in an AI pipeline is defined by its operation type and an optional configuration object. You pass the operation name as a string to the step_N parameter of aidb.create_pipeline() , and the configuration as JSONB to the corresponding step_N_options parameter.

SELECT aidb.create_pipeline(
    name              => my_pipeline,
    source            => my_source_table,
    source_key_column => id,
    source_data_column => content,
    step_1            => ChunkText,
    step_1_options    => aidb.chunk_text_config(desired_length => 120, max_length => 150),
    step_2            => KnowledgeBase,
    step_2_options    => aidb.knowledge_base_config(model => bert, data_format => Text)
);

Use the helper functions described below to build the step_N_options value for each operation type. All helper functions return a JSONB configuration object.

ChunkText#

Divides text into smaller segments to fit within LLM context windows.

Helper function: aidb.chunk_text_config()

Parameter

Type

Default

Description

desired_length

INTEGER

Required

Target chunk size. The unit depends on strategy.

max_length

INTEGER

NULL

Maximum chunk size. If omitted, desired_length is a strict upper limit.

overlap_length

INTEGER

NULL

Amount of content to overlap between consecutive chunks. Defaults to 0 (no overlap).

strategy

TEXT

NULL

'chars' (default) for character-based or 'words' for word-based chunking.

Basic chunking example:

SELECT aidb.create_pipeline(
    name               => chunk_pipeline,
    source             => source_table,
    source_key_column  => id,
    source_data_column => content,
    step_1             => ChunkText,
    step_1_options     => aidb.chunk_text_config(
        desired_length => 100,
        max_length     => 150,
        overlap_length => 20,
        strategy       => words
    )
);

Result#

ChunkText transforms the shape of the data by introducing a part_id column. Each source row may produce multiple output rows, one per chunk.

ParseHtml#

Extracts readable text from HTML strings, stripping tags while preserving logical structure.

Helper function: aidb.html_parse_config()

Parameter

Type

Default

Description

method

TEXT

NULL

'StructuredPlaintext' (default) for plain text extraction, or 'StructuredMarkdown' to retain hierarchy.

SELECT aidb.create_pipeline(
    name               => html_pipeline,
    source             => web_data_table,
    source_key_column  => id,
    source_data_column => html_content,
    step_1             => ParseHtml,
    step_1_options     => aidb.html_parse_config(method => StructuredMarkdown),
    step_2             => ChunkText,
    step_2_options     => aidb.chunk_text_config(desired_length => 120)
);

ParsePdf#

Extracts text from binary PDF data, with options to handle non-compliant or complex files.

Helper function: aidb.pdf_parse_config()

Parameter

Type

Default

Description

method

TEXT

NULL

'Structured' (default) — uses the PDF specification to identify text blocks.

allow_partial_parsing

BOOLEAN

NULL

If true (default), continues parsing when errors are encountered on individual pages.

The resulting part_id column maps to the page index from which each text block was extracted.

SELECT aidb.create_pipeline(
    name               => pdf_pipeline,
    source             => pdf_files_table,
    source_key_column  => id,
    source_data_column => pdf_data,
    step_1             => ParsePdf,
    step_1_options     => aidb.pdf_parse_config(
        method                => Structured,
        allow_partial_parsing => true
    ),
    step_2             => KnowledgeBase,
    step_2_options     => aidb.knowledge_base_config(model => bert, data_format => Text)
);

Result#

ParsePdf unnests results — a multi-page PDF produces one row per page, each with a part_id corresponding to the page index.

PerformOcr#

Extracts text from images using an OCR-capable AI model, such as NVIDIA NIM PaddleOCR.

Helper function: aidb.ocr_config()

Parameter

Type

Default

Description

model

TEXT

Required

Name of the registered OCR model to use.

Before using this step, register an OCR-capable model:

SELECT aidb.create_model(
    my_paddle_ocr_model,
    nim_paddle_ocr,
    credentials => {"api_key": "<NVIDIA_NIM_API_KEY>"}::JSONB
);

Then reference it in your pipeline:

SELECT aidb.create_pipeline(
    name               => ocr_pipeline,
    source             => images_table,
    source_key_column  => id,
    source_data_column => image_data,
    step_1             => PerformOcr,
    step_1_options     => aidb.ocr_config(model => my_paddle_ocr_model),
    step_2             => KnowledgeBase,
    step_2_options     => aidb.knowledge_base_config(model => bert, data_format => Text)
);

Result#

PerformOcr unnests results — a single image may produce multiple rows, one per detected text block. The NVIDIA NIM provider currently supports only png and jpeg formats.

SummarizeText#

Generates concise summaries of long text passages using an AI language model.

Helper function: aidb.summarize_text_config()

Parameter

Type

Default

Description

model

TEXT

Required

Name of the registered model to use for summarization.

chunk_config

JSONB

NULL

Optional chunking configuration (from aidb.chunk_text_config()) applied before summarization.

prompt

TEXT

NULL

Custom prompt to guide the summarization. Uses a standard prompt if omitted.

strategy

TEXT

NULL

'append' (default) concatenates per-chunk summaries, 'reduce' iteratively compresses.

reduction_factor

INTEGER

NULL

Used with 'reduce' strategy. Controls how aggressively text is reduced per iteration (default is 3).

inference_config

JSONB

NULL

Optional runtime inference settings (from aidb.inference_config()).

SELECT aidb.create_pipeline(
    name               => summary_pipeline,
    source             => articles_table,
    source_key_column  => id,
    source_data_column => body,
    step_1             => SummarizeText,
    step_1_options     => aidb.summarize_text_config(
        model        => my_t5_model,
        chunk_config => aidb.chunk_text_config(100, 120, 10, words),
        prompt       => Summarize the key points concisely,
        strategy     => reduce,
        reduction_factor => 3
    ),
    step_2             => KnowledgeBase,
    step_2_options     => aidb.knowledge_base_config(model => bert, data_format => Text)
);

KnowledgeBase#

Converts processed text or image data into vector embeddings and stores them in a searchable knowledge base. This step must always be the last step in a pipeline, as its output is a VECTOR type that cannot be used as input by any subsequent step. For querying the knowledge base with semantic or hybrid search, see Knowledge bases reference .

Helper function: aidb.knowledge_base_config()

Parameter

Type

Default

Description

model

TEXT

Required

Name of the embedding model.

data_format

aidb.PipelineDataFormat

Required

'Text' or 'Image'.

distance_operator

aidb.DistanceOperator

NULL

Similarity metric: L2 (default), Cosine, or InnerProduct.

vector_index

JSONB

NULL

Vector index config, built with a vector index helper such as aidb.vector_index_hnsw_config().

SELECT aidb.create_pipeline(
    name               => kb_pipeline,
    source             => source_table,
    source_key_column  => id,
    source_data_column => content,
    step_1             => KnowledgeBase,
    step_1_options     => aidb.knowledge_base_config(
        model             => bert,
        data_format       => Text,
        distance_operator => Cosine,
        vector_index      => aidb.vector_index_hnsw_config(m => 16, ef_construction => 64)
    )
);

To link multiple pipelines to the same knowledge base, use aidb.knowledge_base_config_from_kb(data_format) instead. This technique inherits the model and distance operator settings from the existing knowledge base.

Destination table#

The KnowledgeBase step automatically creates a destination table named pipeline_<pipeline_name> with the following schema:

Column

Type

Description

id

BIGSERIAL

Primary key.

pipeline_id

INT

Reference to the originating pipeline.

source_id

TEXT

ID of the original source record.

part_ids

BIGINT[]

Tracks segments if the data was chunked or parsed.

value

VECTOR

The pgvector embedding.

Multi-pipeline knowledge bases#

A single knowledge base can aggregate embeddings from multiple pipelines. The internal knowledge_base_pipeline junction table manages these mappings. When retrieving results via aidb.retrieve_text() , each row includes a pipeline_name column so you can identify which pipeline produced each embedding.

For knowledge base views and statistics, see Knowledge bases reference .

To see pipeline steps used together in a complete end-to-end workflow, see Examples .