Skip to main content

ragflow_orchestrator

Universal and extensible RAG module with standardized interfaces and adapters.

Ragflow Orchestrator

Authors

Key Updates

  • Storage architecture is PostgreSQL + Qdrant only.
  • New combined provider: postgres+qdrant (PostgreSQL metadata + Qdrant vectors).
  • Adaptive document pipeline supports semantic subtype classification with hybrid scoring:
    • rules-based scoring
    • optional LLM scoring (ollama or openai_compat)
    • weighted merge and confidence threshold fallback
  • Document subtype is persisted in PostgreSQL metadata (documents, document_versions) and propagated into chunk metadata/tags.
  • Added infrastructure compose files for local development:
    • docker-compose.postgres.yml
    • docker-compose.qdrant.yml
    • docker-compose.infra.yml

Goals

  • One internal chunk contract across vector stores.
  • Standardized ingestion pipeline: cleaning -> chunking -> embedding -> upsert.
  • Adaptive document pipeline: detection -> normalization -> strategy-aware chunking.
  • Standard retrieval APIs with semantic/hybrid strategies.
  • First-class interoperability with PromptOrchestrator pipelines.
  • Extensible migration framework and quality evaluation utilities.

Providers

Supported provider kinds in create_provider:

  • postgres+qdrant (recommended)
  • postgresql+qdrant
  • postgres_qdrant
  • pgvector / postgres / postgresql (legacy)
  • qdrant (legacy)

Quick Start (PostgreSQL + Qdrant)

  1. Start infrastructure:
docker compose -f docker-compose.infra.yml up -d
  1. Configure environment:
export RAG_POSTGRES_DSN="postgresql://rag_user:rag_password@localhost:5432/rag_db"
export RAG_QDRANT_URL="http://localhost:6333"
export RAG_QDRANT_COLLECTION="rag_chunks"

PowerShell:

$env:RAG_POSTGRES_DSN = "postgresql://rag_user:rag_password@localhost:5432/rag_db"
$env:RAG_QDRANT_URL = "http://localhost:6333"
$env:RAG_QDRANT_COLLECTION = "rag_chunks"
  1. Ingest and search:
from ragflow_orchestrator.factory import create_provider
from ragflow_orchestrator.orchestrator import RAGOrchestrator
from ragflow_orchestrator.embedding import HashEmbedder
from ragflow_orchestrator.presets import document_preset

provider = create_provider(
    "postgres+qdrant",
    dsn="postgresql://rag_user:rag_password@localhost:5432/rag_db",
    qdrant_url="http://localhost:6333",
    qdrant_collection="rag_chunks",
)
preset = document_preset()

orchestrator = RAGOrchestrator(
    provider=provider,
    embedder=HashEmbedder(dimensions=256),
    chunker=preset.chunker,
    cleaner=preset.cleaner,
)

orchestrator.ingest(
    source_id="doc-1",
    raw_text="RAG orchestration standardizes ingestion and retrieval.",
    metadata={"tenant_id": "t1", "language": "en", "doctype": "note"},
)

hits = orchestrator.search("How does orchestration help?", top_k=3)
for hit in hits:
    print(hit.score, hit.chunk.id, hit.chunk.text)

ConfigStore Example

from ragflow_orchestrator import (
    ConfigStore,
    EmbeddingConfig,
    ModuleConfig,
    PipelineConfig,
    ProviderConfig,
    RAGOrchestratorFactory,
)

store = ConfigStore(
    ModuleConfig(
        provider=ProviderConfig(
            kind="postgres+qdrant",
            params={
                "dsn": "postgresql://rag_user:rag_password@localhost:5432/rag_db",
                "qdrant_url": "http://localhost:6333",
                "qdrant_collection": "rag_chunks",
            },
        ),
        embedding=EmbeddingConfig(
            provider="ollama",
            model="nomic-embed-text:latest",
            options={"base_url": "http://localhost:11434", "timeout_seconds": 60},
        ),
        pipeline=PipelineConfig(preset="document"),
    )
)

orchestrator = RAGOrchestratorFactory.from_config_store(store)

Document Subtype Classification

Subtype classification is integrated into ingestion and versioned metadata pipeline.

Main behavior:

  • If subtype is missing, classifier predicts it from content and metadata.
  • Final subtype and confidence are attached to:
    • document metadata
    • version metadata
    • chunk metadata/tags
  • Fallback subtype is applied when confidence is below threshold.

Config fields in ModuleConfig.subtype_classification:

  • enabled
  • fallback_subtype
  • confidence_threshold
  • rules_weight
  • llm_weight
  • allowed_subtypes
  • llm settings:
    • provider: none | ollama | openai_compat
    • model
    • base_url
    • api_key_env
    • timeout_seconds
    • temperature

Document Pipeline

Default document preset routes content by detected type.

Supported types include:

  • pdf
  • docx
  • xlsx
  • html
  • markdown
  • json
  • xml
  • csv
  • txt
  • code
  • unsupported

Detection can use extension hints, magic bytes, and content-type metadata.

Examples

Examples in examples/ now use PostgreSQL + Qdrant only:

  • examples/basic_usage.py
  • examples/query_rag.py
  • examples/template_ingestion.py
  • examples/evaluate_retrieval.py

Each example reads environment variables:

  • RAG_POSTGRES_DSN
  • RAG_QDRANT_URL
  • RAG_QDRANT_COLLECTION

Docker Compose Files

1) PostgreSQL + pgAdmin only

docker compose -f docker-compose.postgres.yml up -d

Services:

  • postgres on localhost:5432
  • pgadmin on localhost:5050

2) Qdrant only

docker compose -f docker-compose.qdrant.yml up -d

Service:

  • qdrant on localhost:6333 (HTTP), localhost:6334 (gRPC)

3) Full infrastructure (recommended)

docker compose -f docker-compose.infra.yml up -d

Services:

  • postgres
  • pgadmin
  • qdrant

OpenTelemetry (Optional)

Enable local collector:

docker compose -f docker-compose.otel.yml up -d

Files:

  • docker-compose.otel.yml
  • observability/otel-collector-config.yaml
  • observability/signoz-dashboard-ragflow.yaml

Installation

pip install -e .

Optional extras:

pip install -e .[qdrant]
pip install -e .[pgvector]
pip install -e .[hf]
pip install -e .[all]

Testing and Quality

ruff check .
mypy src tests scripts
pytest -q

Integration Tests

Defaults:

  • QDRANT_URL=http://localhost:6333
  • PGVECTOR_DSN=postgresql+psycopg://postgres:N0th1ing@localhost:5432/app

Run preflight:

python scripts/preflight_check.py

Run preflight + integration tests:

python scripts/run_preflight_and_integration.py

PromptOrchestrator Interoperability

Use PromptStyleRAGProviderAdapter to expose retrieve(query, limit) style retrieval for PromptOrchestrator flows while keeping ragflow_orchestrator ingestion/storage responsibilities.

Repository Structure

  • src/ragflow_orchestrator/: package source
  • examples/: usage samples
  • scripts/: runnable demos and utility scripts
  • tests/: test suite
  • datasets/: evaluation datasets

License

See LICENSE.

Metadata

Release files for ragflow-orchestrator 0.1.18

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ragflow-orchestrator 0.1.18
File Size Uploaded
ragflow_orchestrator-0.1.18.tar.gz 145.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for ragflow-orchestrator 0.1.18
File Interpreter ABI Platform
ragflow_orchestrator-0.1.18-py3-none-any.whl Python 3 none any Details

Total release size: 299.9 kB

Release files / ragflow_orchestrator-0.1.18.tar.gz

Download URL ragflow_orchestrator-0.1.18.tar.gz
Size 145.1 kB
Tags Source
SHA-256 checksum
How to use checksums
13fd0f993cac281a6fa688d7a2f70c95d5ec2136352ed1c39f3c0b2b7dd17d54
BLAKE2b-256 checksum
How to use checksums
b1dbc0eb0dae9cc47a5381439f3610796c6f63eda786757c9c7780174c79d395
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jun 24, 2026.

Transparency log

Release files / ragflow_orchestrator-0.1.18-py3-none-any.whl

Download URL ragflow_orchestrator-0.1.18-py3-none-any.whl
Size 154.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
c145c543a11f1d2022ce8d7f8d7f6cb5a43ad0427fca3d143e26a7b1ae11bd2b
BLAKE2b-256 checksum
How to use checksums
1b5d97765f1660c15e9c341ef1a9caceb13e69ddaca9f10a75479d1adf23f313
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jun 24, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.18 This release

2 release files

0.1.14

2 release files

0.1.13

2 release files

0.1.7

2 release files

0.1.6

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page