Skip to content

[Draft] OCI 26ai Integration#485

Open
rriley99-oci wants to merge 89 commits intoNVIDIA-AI-Blueprints:developfrom
oci-ai-incubations:oracle/dev
Open

[Draft] OCI 26ai Integration#485
rriley99-oci wants to merge 89 commits intoNVIDIA-AI-Blueprints:developfrom
oci-ai-incubations:oracle/dev

Conversation

@rriley99-oci
Copy link
Copy Markdown

Description

Checklist

  • I am familiar with the Contributing Guidelines.
  • All commits are signed-off (git commit -s) and GPG signed (git commit -S).
  • New or existing tests cover these changes.
  • The documentation is up to date with these changes.
  • If adjusting docker-compose.yaml environment variables have you ensured those are mimicked in the Helm values.yaml file.

rriley99-oci and others added 30 commits February 17, 2026 13:45
…recated SpanAttributes (NVIDIA-AI-Blueprints#377)

Signed-off-by: Swapnil Masurekar <smasurekar@nvidia.com>
Signed-off-by: Niyati Singal <nsingal@nvidia.com>
* Added MIG Slice support for RTX 6000 pro

Signed-off-by: Punit Kumar <punitk@nvidia.com>

* Changed to default config in MIG slicing in rtx6000pro config

---------

Signed-off-by: Punit Kumar <punitk@nvidia.com>
Co-authored-by: niyatisingal <nsingal@nvidia.com>
…VIDIA-AI-Blueprints#385)

* changes to docs per bug 5767861 (NVIDIA-AI-Blueprints#328)

* Updated launchable with v2.4.0 tag (NVIDIA-AI-Blueprints#318)

* updated support matrix (NVIDIA-AI-Blueprints#321)

* Document the end‑to‑end flow from query to answer and show how to measure time spent in each stage of the RAG pipeline. (NVIDIA-AI-Blueprints#317)

* adding oberservablility

* Update docs/debugging.md

Co-authored-by: nkmcalli <nkmcalli@yahoo.com>

* Update docs/observability.md

Co-authored-by: nkmcalli <nkmcalli@yahoo.com>

* Add query-to-answer-pipeline doc and observability/debugging updates

* Trigger CI

* getting build to kick in for observability file

* Fix typos in query-to-answer-pipeline.md and ensure file in PR for link check

* get rid of PULL_REQUEST_SUMMARY

---------

Co-authored-by: nkmcalli <nkmcalli@yahoo.com>

* fixed files associated with build (NVIDIA-AI-Blueprints#322)

* Add multimodal query integration tests to CI pipeline

* changes to docs per bug 5767861

* updated files per bug 5880717 (NVIDIA-AI-Blueprints#327)

* updated files per bug 5880717

* Update CONTRIBUTING.md

* Update README.md

* Update python-client.md

* Update readme.md

* Update readme.md

* Update docs/deploy-helm.md

Co-authored-by: nkmcalli <nkmcalli@yahoo.com>

* Update docs/deploy-helm.md

Co-authored-by: nkmcalli <nkmcalli@yahoo.com>

---------

Co-authored-by: rkharwar-nv <rkharwar@nvidia.com>
Co-authored-by: nkmcalli <nkmcalli@yahoo.com>
Co-authored-by: Pranjal Doshi <pranjald@nvidia.com>
Co-authored-by: nv-pranjald <150428320+nv-pranjald@users.noreply.github.com>

* Fix workflow rule and doc bugs (NVIDIA-AI-Blueprints#331)

* Revert back milvus version in conf.md to v2.6.5

* Modify workflow to run on any branch

* Fix workflow push rule to run on protected branches

* Add files via upload (NVIDIA-AI-Blueprints#326)

Found an error in the Q&A section where images in the citation were not being printed.

* Doc bug fixes (NVIDIA-AI-Blueprints#339)

* updated helm instructions (NVIDIA-AI-Blueprints#333)

* updated helm instructions

* Update deploy-helm.md

* fix broken image link (NVIDIA-AI-Blueprints#334)

* Add release note for Audio model deployment on Kubernetes on RTX‑6000 Pro is not supported in this release.heiss/5863956a (NVIDIA-AI-Blueprints#335)

* Add release note for Audio model deployment on Kubernetes on RTX‑6000 Pro is not supported in this release.

* Add release note for Audio model deployment on Kubernetes on RTX‑6000 Pro is not supported in this release.

* Fix broken image link in observability file

* Fix CPU seach with GPU index doc

* Fix VLLM profile instruction for nemotron-3-nano

---------

Co-authored-by: Kurt Heiss <kheiss@nvidia.com>

* Updated troubleshoot documentation for Elasticsearch connection timeout (NVIDIA-AI-Blueprints#341)

Signed-off-by: Swapnil Masurekar <smasurekar@nvidia.com>

* updated path to image files so that html output is rendered correctly (NVIDIA-AI-Blueprints#363)

* Updated helm instructions for mig-deployment prerequisites (NVIDIA-AI-Blueprints#364)

* Updated helm instructions for mig-deployment

* Update mig-deployment.md

* Doc enhancement for noteboook (NVIDIA-AI-Blueprints#361)

* Doc enhancement for noteboook

* Update release notes

* Update launchable.ipynb (NVIDIA-AI-Blueprints#365)

Updated branch name
State name changed from "FAILURE"->"FAILED"

* Fix typo in release notes

---------

Co-authored-by: rkharwar-nv <rkharwar@nvidia.com>

* fixed links in deploy-helm and mig-deploymnent (NVIDIA-AI-Blueprints#367)

* update artifacts to GA version for v2.4.0 release (NVIDIA-AI-Blueprints#359)

* updated files according to style guide (NVIDIA-AI-Blueprints#369)

* Revert deploy-helm and mig-deployment to pre-11a31a4 versions (NVIDIA-AI-Blueprints#372)

* Fix release date in changelog (NVIDIA-AI-Blueprints#373)

* Bump up version to 2.5.0

---------

Signed-off-by: Swapnil Masurekar <smasurekar@nvidia.com>
Co-authored-by: Kurt Heiss <kheiss@nvidia.com>
Co-authored-by: rkharwar-nv <rkharwar@nvidia.com>
Co-authored-by: nkmcalli <nkmcalli@yahoo.com>
Co-authored-by: Pranjal Doshi <pranjald@nvidia.com>
Co-authored-by: nv-pranjald <150428320+nv-pranjald@users.noreply.github.com>
Co-authored-by: Swapnil Masurekar <smasurekar@nvidia.com>
…rints#351)

* feat: add rag_event_ingest example - event-driven document/video ingestion pipeline

- Kafka consumer that monitors MinIO object storage for new uploads
- Routes documents to RAG Ingestor, videos to VSS for analysis
- Docker Compose deployment for Kafka, MinIO, and consumer
- Jupyter notebook for end-to-end deployment and testing
- Sample test data (PDF document, MP4 video) tracked via Git LFS

Signed-off-by: Minh Nguyen <minhngu@nvidia.com>
Made-with: Cursor
Signed-off-by: Minh Nguyen <minhngu@nvidia.com>
Made-with: Cursor

* fix: polish rag_event_ingest notebook - fix sections, descriptions, TOC

Signed-off-by: Minh Nguyen <minhngu@nvidia.com>
Made-with: Cursor
Signed-off-by: Minh Nguyen <minhngu@nvidia.com>
Made-with: Cursor

* refactor: consolidate Setup into single cell - clone, deps, API keys

Signed-off-by: Minh Nguyen <minhngu@nvidia.com>
Made-with: Cursor
Signed-off-by: Minh Nguyen <minhngu@nvidia.com>
Made-with: Cursor

* refactor: inline check_rag/vss/aidp_status into their usage cells

Signed-off-by: Minh Nguyen <minhngu@nvidia.com>
Made-with: Cursor
Signed-off-by: Minh Nguyen <minhngu@nvidia.com>
Made-with: Cursor

* docs: add markdown description before every code cell

Signed-off-by: Minh Nguyen <minhngu@nvidia.com>
Made-with: Cursor
Signed-off-by: Minh Nguyen <minhngu@nvidia.com>
Made-with: Cursor

* fix: notebook is standalone entry point, clones RAG repo to ~/rag

Signed-off-by: Minh Nguyen <minhngu@nvidia.com>
Made-with: Cursor
Signed-off-by: Minh Nguyen <minhngu@nvidia.com>
Made-with: Cursor

* fix: set COLLECTION_NAME, load .env, simplify query_rag, add expected logs

Signed-off-by: Minh Nguyen <minhngu@nvidia.com>
Made-with: Cursor
Signed-off-by: Minh Nguyen <minhngu@nvidia.com>
Made-with: Cursor

* fix: left-align markdown tables in notebook

Signed-off-by: Minh Nguyen <minhngu@nvidia.com>
Made-with: Cursor
Signed-off-by: Minh Nguyen <minhngu@nvidia.com>
Made-with: Cursor

* fix: use HTML tables to force left alignment

Signed-off-by: Minh Nguyen <minhngu@nvidia.com>
Made-with: Cursor
Signed-off-by: Minh Nguyen <minhngu@nvidia.com>
Made-with: Cursor

* fix: replace API Keys markdown table with HTML for left alignment

Signed-off-by: Minh Nguyen <minhngu@nvidia.com>
Made-with: Cursor
Signed-off-by: Minh Nguyen <minhngu@nvidia.com>
Made-with: Cursor

* feat: add storage verification, RAG frontend hints, and configurable consumer prompts

- Add verify_file_in_storage() helper to confirm files landed in MinIO
- Merge storage verification into document/video ingestion checks
- Add RAG Frontend UI link (port 8090) to query sections
- Make Kafka consumer VSS prompts configurable via env vars in docker-compose
- Install git/git-lfs in notebook setup cell
- Index cells in Deploy Continuous Ingestion section

Signed-off-by: Minh Nguyen <minhngu@nvidia.com>
Made-with: Cursor
Signed-off-by: Minh Nguyen <minhngu@nvidia.com>
Made-with: Cursor

* fix: skip RAG clone if directory already exists

Signed-off-by: Minh Nguyen <minhngu@nvidia.com>
Made-with: Cursor
Signed-off-by: Minh Nguyen <minhngu@nvidia.com>
Made-with: Cursor

* fix: url

Signed-off-by: Minh Nguyen <minhngu@nvidia.com>
Made-with: Cursor
Signed-off-by: Minh Nguyen <minhngu@nvidia.com>
Made-with: Cursor

* feat: add continuous ingestion notebook for video and document pipeline

Add rag_event_ingest.ipynb notebook that provides an end-to-end walkthrough for:
- Deploying NVIDIA RAG stack (NIMs, Milvus, Ingestor, RAG Server)
- Deploying NVIDIA VSS stack (VLM, LLM, Embedding, Reranker NIMs)
- Deploying continuous ingestion pipeline (Kafka, MinIO, Kafka Consumer)
- Configurable video analysis prompts for the Kafka consumer
- Uploading documents and videos to MinIO with storage verification
- Verifying ingestion via consumer logs
- Querying ingested content via RAG API or Frontend UI

Signed-off-by: Minh Nguyen <minhngu@nvidia.com>
Made-with: Cursor
Signed-off-by: Minh Nguyen <minhngu@nvidia.com>
Made-with: Cursor

* fix: gpu

Signed-off-by: Minh Nguyen <minhngu@nvidia.com>
Made-with: Cursor
Signed-off-by: Minh Nguyen <minhngu@nvidia.com>
Made-with: Cursor

* fix: add ensurepip, fix VSS tag to v2.4.1, use GPUs 2-3 for VSS, update hw req to 4 GPUs

Signed-off-by: Minh Nguyen <minhngu@nvidia.com>
Made-with: Cursor
Signed-off-by: Minh Nguyen <minhngu@nvidia.com>
Made-with: Cursor

* fix: tag

Signed-off-by: Minh Nguyen <minhngu@nvidia.com>
Made-with: Cursor
Signed-off-by: Minh Nguyen <minhngu@nvidia.com>
Made-with: Cursor

* feat: resolve comment

* fix: patch VSS config to use host-mapped ports for shared RAG embedding/reranker

The via-server runs on the local_deployment_single_gpu_default network,
not nvidia-rag, so it cannot resolve nemoretriever-embedding-ms or
nemoretriever-ranking-ms. Route through host.docker.internal with the
correct host-mapped ports instead (9080 for embedding, 1976 for reranker).

Co-authored-by: Cursor <cursoragent@cursor.com>
Signed-off-by: Minh Nguyen <minhngu@nvidia.com>
Made-with: Cursor
Signed-off-by: Minh Nguyen <minhngu@nvidia.com>
Made-with: Cursor

---------

Signed-off-by: Minh Nguyen <minhngu@nvidia.com>
Co-authored-by: anngu <anngu@nvidia.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
* Fix query decomp doc and prompt

* fix prompt in helm as well
…s#371)

Signed-off-by: Swapnil Masurekar <smasurekar@nvidia.com>
* confirming presence of switcher text in conf.py file

* docs: adjust conf.py for 2.5.0
…AI-Blueprints#386)

* Prompt tuining, low reasoning and reasoning budget

* Filter out think token when enable filter is on

* Use default prompt

* Fix unit test

* Add doc for nemotron thinking budget

* Add question back in prompt.yaml
…DIA-AI-Blueprints#395)

* Add config to enable nemotron parse only extraction in nv-ingest

* Refactor nemotron parse only documentation

* Remove nemotron parse only references from the previous section
…rs (NVIDIA-AI-Blueprints#402)

Signed-off-by: Swapnil Masurekar <smasurekar@nvidia.com>
* Update langchain-nvidia-ai-endpointsto >=1.1.0

* security: Update langgraph to version 1.10.0
…ueprints#397)

* Update NIM wait times and patch VSS embed/rerank models

Adjust expected NIM model loading wait from 2-5 min to ~10 min
for RTX PRO 6000 hardware. Add explicit patching of VSS config.yaml
to align embedding and reranker model names with RAG stack defaults.

Signed-off-by: Minh Nguyen <minhngu@nvidia.com>
Made-with: Cursor

* Update VSS prompts to match default format and use seconds-based queries

- Align consumer VSS prompts with VSS config.yaml defaults (sports-adapted):
  caption, caption_summarization, summary_aggregation with proper dedup/merge logic
- Extract RAG embed/rerank model names dynamically from compose file
- Add parse_compose_default helper to avoid hardcoded model names
- Change time-range query from MM:SS to seconds format for VSS compatibility

Signed-off-by: Minh Nguyen <minhngu@nvidia.com>
Made-with: Cursor
Signed-off-by: Minh Nguyen <minhngu@nvidia.com>
Made-with: Cursor

* Clean up notebook: rename variable, remove config overrides

- Rename _rag_compose to _rag_compose_path for clarity
- Remove hardcoded max_tokens and batch_size patches from VSS config
- Simplify time-range query cell comments

Signed-off-by: Minh Nguyen <minhngu@nvidia.com>
Made-with: Cursor

* Rename helper function and revert prompts to MM:SS format

- Rename parse_compose_default to extract_rag_default_compose_var
- Revert VSS prompts to MM:SS timestamp conversion style
- Revert time-range query to MM:SS format

Signed-off-by: Minh Nguyen <minhngu@nvidia.com>
Made-with: Cursor

* Add GPU assignment table and update NIM container names

Update notebook to reflect renamed NIM containers
(nemoretriever-* → nemotron-*) and add default GPU assignment
table for RTX PRO 6000 / H100 hardware.

Signed-off-by: Minh Nguyen <minhngu@nvidia.com>
Made-with: Cursor

---------

Signed-off-by: Minh Nguyen <minhngu@nvidia.com>
Co-authored-by: Kurt Heiss <kheiss@nvidia.com>
…structure (NVIDIA-AI-Blueprints#403)

Signed-off-by: Swapnil Masurekar <smasurekar@nvidia.com>
rriley99-oci and others added 30 commits March 11, 2026 16:24
* confirming presence of switcher text in conf.py file

* Update documentation to reflect name change to NeMo Retriever Library

* Update api-rag.md

removed GitHub markers

* Update change-model.md

Removed GitHub markers

* Update deploy-helm.md

removed GitHub markers

* Update deploy-helm.md

Remove GitHub markers

* Update deploy-helm.md

Remove GitHub markers

* Update mig-deployment.md

removed GitHub markers

* Update deploy-helm.md

removed extra space
* confirming presence of switcher text in conf.py file

* Continuous ingestion topic

* updated index for continuous ingestion

* updated reademe for continuous ingestion

* Update continuous-ingestion-object-storage.md

added RAG Blueprint

* Update continuous-ingestion-object-storage.md

Converted first sentence into 2 sentences

* Update index.md

* Apply suggestion from @nkmcalli

Co-authored-by: nkmcalli <nmcallister@nvidia.com>

* Update continuous-ingestion-object-storage.md

* Update continuous-ingestion-object-storage.md

* Update continuous-ingestion-object-storage.md

---------

Co-authored-by: nkmcalli <nmcallister@nvidia.com>
…prints#430)

* Nemotron 3 super deployment guide and migration guide

* Organize gpu requirement and heading for nemotron3 super

* Add instruction for updating values.yaml and refractor doc

* Add cloud endpoint url in env file

* Instruction to export llm max token in docker flow

* remove unrequired llm api key from doc

* Seprate yaml for nemotron 3 deployment

* Remove unnecessary information for local hosted

* Simplify docker deployment logs

* Remove cuda device from rtx 6000 pro

* Add prompt customization instruction in nemotron3 helm section

* Instruction for prompt customization

* Remove heading for rtx 6000 pro
Signed-off-by: smasurekar <smasurekar@nvidia.com>
…#434)

* docs: add RAG accuracy benchmarks documentation

* docs: Fix broken links and format in accuracy benchmark doc

* Update accuracy-benchmarks.md

* Update accuracy-benchmarks.md

* Update accuracy-benchmarks.md

* Update accuracy-benchmarks.md

* Update accuracy-benchmarks.md

* Update accuracy-benchmarks.md

implmented changes as instructed by Sumit in Slack thread: https://nvidia.slack.com/archives/C09HAQRT1UY/p1773470561423909

---------

Co-authored-by: Kurt Heiss <kheiss@nvidia.com>
* Update changelog to include new additions

* Update containers to GA version
Integrates 46 upstream commits including:
- Nemotron 3 Super NIM models (embedding, ranking, OCR)
- Reasoning/thinking parameters for LLM generation
- Event-driven document/video ingestion pipeline
- NV-Ingest 26.1.2 and GA container upgrades
- VLM embed multimodal content concatenation
- Security CVE fixes (frontend + packages)
- Helm packaging and CI updates

Conflicts resolved:
- pyproject.toml: kept upstream langchain-nvidia-ai-endpoints>=1.2.0,
  kept minio as optional (not needed for Oracle 26ai deployments)
- uv.lock: accepted upstream version
- publish-artifacts.yml: kept fork deletion (fork has own CI)

Oracle-specific code paths preserved intact:
- Oracle VDB implementation (oracle_vdb.py, oracle_queries.py)
- Oracle configuration in .env and configuration.py
- Custom Dockerfiles and CI workflows
- Health check endpoints

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- notebooks/gt_page_mapper.py: Switch from 0-based to 1-based page
  numbering (enumerate with start=1) to match the system convention
  documented in metadata_validation.py

- rag_server/Dockerfile: Align with ingestor Dockerfile pattern:
  - Update uv from 0.7.4 to 0.8.12 in builder stage (was already
    0.8.12 in python-env stage — inconsistency could break lockfile)
  - Replace pinned gpgv version with apt upgrade -y for broader
    security coverage (matches upstream CVE fix approach)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The upstream uv.lock didn't include oracledb since Oracle support
is fork-specific. Ran uv lock to sync the lockfile with our
pyproject.toml which includes oracledb>=3.4.2 in core deps.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The previous v0.0.5 images deployed to OKE had nv-ingest 25.9.0
which is incompatible with the nv-ingest 26.1.2 server in v2.5.0.
Bumping to v0.0.6 to cleanly distinguish the fixed images (with
nv-ingest 26.1.2, upstream v2.5.0 merge, and nemotron model renames)
from the broken v0.0.5 deployment.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The fork had reverted the api_version from "v2" to "v1" in
get_nv_ingest_client(), which was preserved during the auto-merge.
The nv-ingest 26.1.2 server uses v2 dispatch — a v1 client submits
jobs that stay SUBMITTED forever because the payload never reaches
the pipeline worker through the v2 Redis queue.

This was the root cause of the ingestion blocker on the OKE
helm v2.5.0 deployment.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The core dependency pins oracledb>=3.4.2 but the [all] and [oracle]
extras had the older >=2.0.0 floor. Aligning to >=3.4.2 since that
is the tested minimum for Oracle 26ai vector support.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Root cause: Oracle's default behavior folds unquoted identifiers to
UPPERCASE. Combined with explicit .upper() calls in oracle_vdb.py,
this caused all collection names to be persisted as uppercase
regardless of input casing.

Symptom (AIQ frontend):
- POST /v1/collections with collection_name="s_fdbe..." → returns 201
- POST /v1/collections/s_fdbe.../documents
- list_collections() returns "S_FDBE..." (uppercased)
- AIQ case-sensitive comparison "s_fdbe..." == "S_FDBE..." → never matches
- Returns None → 404

Fix:
- oracle_queries.py: Quote all table/index identifiers in DDL/DML
  (CREATE TABLE "name", DROP TABLE "name", INSERT INTO "name", etc.)
- oracle_queries.py: check_table_exists_query() uses exact case match
  (removed UPPER() wrapper) since quoted identifiers are case-sensitive
- oracle_vdb.py: Removed all .upper() calls on collection_name
  (kept only on index_type and distance_metric config values, and on
  SYSTEM_COLLECTIONS comparison which legitimately needs case-insensitive)
- oracle_vdb.py: Quoted table_name in INSERT statement (write_to_index)
  and in OracleVSCompat similarity_search override

Backward compatibility: Existing UPPERCASE tables (created before this
fix) continue to work when clients refer to them with uppercase names.
The behavior now matches Milvus/Elasticsearch (case-sensitive collection
names that preserve user input).

Bumps VERSION to v0.0.7.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…ables

LangChain's OracleVS.__init__ unconditionally calls _create_table() which
uses unquoted DDL — Oracle case-folds the table name to UPPERCASE. When
combined with our quoted-identifier tables (e.g. "MyCollection"), every
retrieval call would create a shadow uppercase table (MYCOLLECTION) with
empty data, then run our overridden similarity search against the real
quoted table.

Fix: rewrite OracleVSCompat.__init__ to replicate the necessary state
setup from OracleVS without calling _create_table. The user table is
already created by NvidiaRAGIngestor.create_collection() via
create_vector_table_ddl with quoted identifiers. LangChain only handles
retrieval, which goes through our overridden
similarity_search_by_vector_with_relevance_scores (already quotes the
table name).

Also adds tests/unit/test_utils/test_vdb/test_oracle_queries.py to
verify all DDL/DML generators quote identifiers consistently across
mixed-case, lowercase, uppercase, PascalCase, and dash-containing names.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Aligns the lockfile with the pyproject.toml change that bumped
oracledb minimum version from 2.0.0 to 3.4.2 in the [all] and
[oracle] extras.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Two related blockers when upgrading from v0.0.6 to v0.0.7:

1. v0.0.6 created METADATA_SCHEMA and DOCUMENT_INFO via unquoted DDL,
   so Oracle stored them as uppercase. v0.0.7's case-fold fix made
   _table_exists() use exact-case lookup with the lowercase identifier
   used in our DDL ("metadata_schema") — which never matched the stored
   UPPERCASE form. Result: every container restart attempted to CREATE
   the system tables again and hit ORA-00955.

2. Same root cause manifested for fresh collections too — once one
   collection exists, the system tables exist, and the next collection
   creation fails with ORA-00955 on the metadata table CREATE.

Fixes:
- Add _table_exists_unquoted() that does WHERE table_name = UPPER(:name)
  for system tables and any v0.0.6 legacy uppercase tables.
- create_metadata_schema_collection / create_document_info_collection
  use the unquoted lookup since those DDL statements are unquoted.
- check_collection_exists() and create_collection() now check BOTH the
  quoted (case-preserved) and unquoted (case-folded) variants, so
  upgraders can still address legacy uppercase collections by name.
- Add _execute_ddl_idempotent() that swallows ORA-00955 on CREATE.
  Wraps every CREATE TABLE / CREATE INDEX site as a defense-in-depth
  layer against existence-check race conditions.

Also addresses the audit item on object naming:
- Add _derive_object_name(table_name, suffix) helper that returns the
  verbatim concatenation when it fits in Oracle's 128-char identifier
  limit, and falls back to a deterministic 16-char SHA-256 prefix
  ("nvr_<digest>{suffix}") when it would not. Index DDL builders use
  this helper, so vector and text indexes never exceed 128 chars.
- Validate collection_name length (<=128) in create_collection.

Adds tests for derivation correctness (verbatim short, hashed long,
deterministic, collision-resistant, DDL emits hashed form for long
inputs) and a migration guide at
docs/migration-oracle-v0.0.6-to-v0.0.7.md.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.