Skip to content

feat: Add Oracle 26ai as default vector database#310

Open
ssraghavan-oci wants to merge 1 commit intoNVIDIA-AI-Blueprints:developfrom
ssraghavan-oci:feature/oracle-26ai-integration
Open

feat: Add Oracle 26ai as default vector database#310
ssraghavan-oci wants to merge 1 commit intoNVIDIA-AI-Blueprints:developfrom
ssraghavan-oci:feature/oracle-26ai-integration

Conversation

@ssraghavan-oci
Copy link

Summary

Replace Milvus with Oracle AI Database 26ai as the default vector store for the NVIDIA RAG Blueprint. This provides CPU-optimized IVF indexes with optional hybrid search support.

Changes

  • Add OracleVDB class implementing VDBRagIngest interface
  • Add oracle_queries.py with DDL and SQL query helpers
  • Register Oracle as default in vdb/__init__.py (Milvus remains as fallback)
  • Add oracledb dependency to pyproject.toml
  • Add Oracle environment variables to deploy/compose/.env
  • Add oracle-26ai Docker service profile to vectordb.yaml
  • Add comprehensive migration guide in docs/migration-oracle-26ai.md

Key Features

  • CPU-based IVF indexes - Optimized for deployments without GPU
  • Hybrid search - Combined vector similarity with Oracle Text full-text search
  • LangChain OracleVS integration - For retrieval operations
  • Connection pooling - Via oracledb thin client (no Oracle Client installation needed)
  • Environment-based configuration - For credentials and index settings

Configuration

export APP_VECTORSTORE_NAME=oracle
export ORACLE_USER=rag_user
export ORACLE_PASSWORD=your_password
export ORACLE_DSN=localhost:1521/FREEPDB1

Testing

  1. Install dependencies: pip install nvidia_rag[oracle]
  2. Set Oracle credentials
  3. Deploy: docker compose -f deploy/compose/docker-compose-rag-server.yaml up -d --build
  4. Health check: curl http://localhost:8081/v1/health?check_dependencies=true

@smasurekar smasurekar added the enhancement New feature or request label Feb 5, 2026
@smasurekar smasurekar self-requested a review February 5, 2026 03:58
Replace Milvus with Oracle AI Database 26ai as the default vector store.
This provides CPU-optimized IVF indexes with optional hybrid search support.

Changes:
- Add OracleVDB class implementing VDBRagIngest interface
- Add oracle_queries.py with DDL and SQL query helpers
- Register Oracle as default in vdb/__init__.py (Milvus as fallback)
- Add oracledb dependency to pyproject.toml
- Add Oracle environment variables to deploy/compose/.env
- Add oracle-26ai Docker service profile to vectordb.yaml
- Add comprehensive migration guide in docs/migration-oracle-26ai.md

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
@smasurekar smasurekar force-pushed the feature/oracle-26ai-integration branch from e17ec82 to 2c37c4b Compare February 5, 2026 04:11
interval: 30s
timeout: 20s
retries: 3
profiles: ["", "milvus", "elasticsearch", "minio"]
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Kindly add "oracle" profile for minio container as well. As it is used internally for Image/Table/charts/etc. citations

"pyarrow>=21.0,<22.0",
# Elasticsearch support
"langchain-elasticsearch>=0.3",
# Oracle 26ai support
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Kindly update the uv.lock file based on the library updates

"protobuf>=6.33.5",
"lark>=1.2.2",
"python-dateutil>=2.9.0.post0",
]
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Kindly add:

    "oracledb>=2.0.0",
    "langchain-community>=0.4",

in common dependencies as well. So they could be used installed in ingestor-server and rag-server containers

)
row = cursor.fetchone()
if row and row[0]:
return json.loads(row[0])
Copy link
Collaborator

@smasurekar smasurekar Feb 5, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The code structure looks great and aligns well with the requirements! 💯

I did run into an issue during ingestion that I wanted to bring to your attention:

Error in src/nvidia_rag/utils/vdb/oracle/oracle_vdb.py:617:

ERROR:nvidia_rag.ingestor_server.main:Ingestion failed due to error: the JSON object must be str, bytes or bytearray, not list
Traceback (most recent call last):
  File "/workspace/.venv/lib/python3.13/site-packages/nvidia_rag/ingestor_server/main.py", line 480, in __run_background_ingest_task
    metadata_schema = vdb_op.get_metadata_schema(collection_name)
  File "/workspace/.venv/lib/python3.13/site-packages/nvidia_rag/utils/vdb/oracle/oracle_vdb.py", line 617, in get_metadata_schema
    return json.loads(row[0])
           ~~~~~~~~~~^^^^^^^^
  File "/usr/lib/python3.13/json/__init__.py", line 345, in loads
    raise TypeError(f'the JSON object must be str, bytes or bytearray, '
                    f'not {s.__class__.__name__}')
TypeError: the JSON object must be str, bytes or bytearray, not list

For testing:

  • Kindly add Oracle test sequence in tests/integration/test_sequences.yaml (similar to the Elasticsearch one at lines 37-42)
  • Integration tests can be run with: pip install -r tests/integration/requirements.txt and python -m tests.integration.main --sequence oracle

Let me know if you need any additional details. Thanks for your work on this integration!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants