Skip to content

Changelog

All notable changes to the pgEdge RAG Server will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[Unreleased]

Added

  • Configurable request_timeout and per_attempt_timeout for LLM providers. Both accept a duration string such as 90s or 2m and can be set per-pipeline or in defaults. The per-attempt timeout makes a slow upstream (for example a heavy embedding batch) retryable rather than consuming the whole request budget in one attempt.

Fixed

  • Vector search now selects the configured id_column, so vector results carry an id. Previously the vector arm returned empty ids, which prevented Reciprocal Rank Fusion from merging the vector and BM25 arms (a document found by both was scored as two separate half-weight entries) and made vector results unusable for id-based source resolution (citations). When no id_column is configured, both search arms now fall back to keying on content for fusion, so a document found by both arms fuses into one result instead of appearing twice (and unstable ROW_NUMBER() ids no longer cause false merges) (#27).

[1.0.0] - 2026-04-04

Added

  • Multi-host database connection support for HA deployments. Configure multiple database hosts for automatic failover (#13).

  • Minimum similarity threshold to avoid sending irrelevant documents to the LLM. Set minimum_similarity per-pipeline to filter out low-quality search results.

  • Configurable base_url for LLM providers (Anthropic, OpenAI, Voyage AI). This allows routing requests through API gateways such as Portkey or custom proxies. The base_url can be set per-pipeline or in defaults and follows the same inheritance rules as provider and model (#7).

  • vector_weight parameter for tuning Reciprocal Rank Fusion (RRF) scoring between vector and text search results.

  • View support for database sources, allowing pipelines to query from database views in addition to tables.

  • Hybrid search control options for fine-tuning search behavior.

Improved

  • OpenAPI specification: added enum constraints for Filter.logic (AND, OR) and FilterCondition.operator (all 12 valid operators), and maxItems: 50 on Filter.conditions to limit payload size and improve client-side validation and code generation.

Fixed

  • Guard against nil dereference when vector weight is unset.
  • Skip zero-weight loops in RRF scoring to avoid unnecessary computation.

Security

  • Pinned GitHub Actions to commit SHAs to prevent supply chain attacks.
  • Upgraded Go to 1.25.8 and updated dependencies to resolve security findings.

[1.0.0-beta3] - 2026-01-26

Added

  • CORS (Cross-Origin Resource Sharing) support for browser-based API access. Configure with server.cors.enabled and server.cors.allowed_origins to allow web applications to make requests from different origins.

  • Configurable system prompt per pipeline. Use the system_prompt field in pipeline configuration to customize LLM instructions for generating responses.

Fixed

  • Docker image now includes CA certificates for HTTPS connections to LLM APIs.

Documentation

  • Added quickstart demo guide with step-by-step instructions.
  • Fixed typos and incorrect version references in installation documentation.

[1.0.0-beta2] - 2025-12-17

Added

  • Docker workflow for building and publishing container images
  • Release badge added to README
  • Manual trigger support for Docker builds from specific tags

[1.0.0-beta1] - 2025-12-15

Changed

  • Documentation restructured for web publishing at docs.pgedge.com
  • New documentation pages: installation guide, quickstart tutorial, usage reference, API keys management, and sample configurations
  • Improved navigation and organization of documentation

[1.0.0-alpha5] - 2025-12-03

Fixed

  • Fixed filter parameter indexing bug where API filters would cause "operator does not exist: text = vector" errors. The filter clause was generating SQL placeholders starting at $1, but VectorSearch already uses $1 for the vector and $2 for LIMIT.

[1.0.0-alpha4] - 2025-12-03

Breaking Changes

  • Security Fix: API filter parameters now require structured filter format to eliminate SQL injection vulnerabilities. API filters must use conditions, operators, and values (parameterized queries prevent injection).

  • Config Rename: The column_pairs field in pipeline configuration has been renamed to tables for clarity. The internal type ColumnPair is now TableSource.

Changed

  • Filter system now uses parameterized queries for API request filters
  • API filter parameter changed from string to structured object
  • Config filter field now accepts either raw SQL strings (for complex queries like subqueries) or structured filter objects

Added

  • Config filters support raw SQL strings for complex expressions (subqueries, JOINs, functions) that cannot be expressed with structured format. Since config files are admin-controlled, raw SQL is safe here.

Migration Guide

API filters (JSON) - must use structured format:

Old (removed):

{"filter": "product = 'pgAdmin'"}

New:

{
  "filter": {
    "conditions": [
      {"column": "product", "operator": "=", "value": "pgAdmin"}
    ]
  }
}

Config filters (YAML) - both formats supported:

Raw SQL (for complex queries):

filter: "source_id IN (SELECT id FROM sources WHERE product='pgEdge')"

Structured:

filter:
  conditions:
    - column: "product"
      operator: "="
      value: "pgAdmin"
    - column: "status"
      operator: "="
      value: "published"
  logic: "AND"

Supported operators (for structured filters): =, !=, <, >, <=, >=, LIKE, ILIKE, IN, NOT IN, IS NULL, IS NOT NULL

Config field rename:

Old:

column_pairs:
  - table: "documents"
    text_column: "content"
    vector_column: "embedding"

New:

tables:
  - table: "documents"
    text_column: "content"
    vector_column: "embedding"

[1.0.0-alpha3] - 2025-12-01

Added

  • GitHub Actions workflow to generate builds when repository is tagged, producing binaries for multiple platforms (linux/amd64, linux/arm64, darwin/amd64, darwin/arm64).

[1.0.0-alpha2] - 2025-12-01

Added

  • Per-pipeline LLM configuration: Pipelines can override embedding_llm and rag_llm settings, allowing different pipelines to use different providers or models.

  • Per-pipeline API keys: API keys can be configured at three levels with cascade priority (pipeline > defaults > global), enabling different pipelines to use separate API keys or accounts.

  • SQL filter support: Tables can include a filter field with a SQL WHERE clause fragment applied to all queries. Filters can also be specified per-request via the API.

  • Extended defaults section: The defaults configuration now supports embedding_llm, rag_llm, and api_keys in addition to token_budget and top_n.

[1.0.0-alpha1] - 2025-11-28

Added

  • Initial RAG server implementation with REST API
  • Multiple pipeline support for different data sources
  • Hybrid search combining vector similarity (pgvector) and BM25 text matching
  • Reciprocal Rank Fusion (RRF) for combining search results
  • Support for multiple LLM providers:

    • OpenAI (embeddings and completions)
    • Anthropic (completions)
    • Voyage AI (embeddings)
    • Ollama (embeddings and completions)
  • Token budget management to control LLM costs

  • Streaming responses via Server-Sent Events (SSE)
  • TLS/HTTPS support for production deployments
  • OpenAPI v3 specification with RFC 8631 Link headers
  • Flexible API key configuration (files, environment variables, defaults)
  • Comprehensive test coverage for core modules