Skip to content

Commit 56819c7

Browse files
committed
feat: switch hosted OCR CPU actor defaults to Nemotron OCR v2
Update remote DEFAULT_INVOKE_URL values, library-mode CI, README/CLI examples, and tests to match Helm v2 defaults (#2239). Clarify that TableStructureCPUActor has no default OCR URL.
1 parent ec5ea8e commit 56819c7

12 files changed

Lines changed: 24 additions & 27 deletions

File tree

.github/workflows/integration-test-library-mode.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ jobs:
3737
# Hosted NIM / integrate.api auth (ExtractParams / EmbedParams read NVIDIA_API_KEY / NGC_API_KEY).
3838
NVIDIA_API_KEY: ${{ secrets.NVIDIA_BUILD_API_KEY }}
3939
PAGE_ELEMENTS_INVOKE_URL: "https://ai.api.nvidia.com/v1/cv/nvidia/nemotron-page-elements-v3"
40-
OCR_INVOKE_URL: "https://ai.api.nvidia.com/v1/cv/nvidia/nemoretriever-ocr-v1"
40+
OCR_INVOKE_URL: "https://ai.api.nvidia.com/v1/cv/nvidia/nemoretriever-ocr-v2"
4141
GRAPHIC_ELEMENTS_INVOKE_URL: "https://ai.api.nvidia.com/v1/cv/nvidia/nemotron-graphic-elements-v1"
4242
TABLE_STRUCTURE_INVOKE_URL: "https://ai.api.nvidia.com/v1/cv/nvidia/nemotron-table-structure-v1"
4343
EMBED_INVOKE_URL: "https://integrate.api.nvidia.com/v1"

nemo_retriever/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ python -m nemo_retriever.examples.graph_pipeline \
178178
/your-example-dir \
179179
--vdb-kwargs-json '{"uri":"lancedb","table_name":"nemo-retriever"}' \
180180
--page-elements-invoke-url https://ai.api.nvidia.com/v1/cv/nvidia/nemotron-page-elements-v3 \
181-
--ocr-invoke-url https://ai.api.nvidia.com/v1/cv/nvidia/nemotron-ocr-v1 \
181+
--ocr-invoke-url https://ai.api.nvidia.com/v1/cv/nvidia/nemotron-ocr-v2 \
182182
--table-structure-invoke-url https://ai.api.nvidia.com/v1/cv/nvidia/nemotron-table-structure-v1 \
183183
--embed-invoke-url https://integrate.api.nvidia.com/v1/embeddings \
184184
--embed-model-name nvidia/llama-nemotron-embed-1b-v2
@@ -537,7 +537,7 @@ ingestor = (
537537
.extract(
538538
# for self hosted NIMs, your URLs will depend on your NIM container DNS settings
539539
page_elements_invoke_url="https://ai.api.nvidia.com/v1/cv/nvidia/nemotron-page-elements-v3",
540-
ocr_invoke_url="https://ai.api.nvidia.com/v1/cv/nvidia/nemotron-ocr-v1",
540+
ocr_invoke_url="https://ai.api.nvidia.com/v1/cv/nvidia/nemotron-ocr-v2",
541541
table_structure_invoke_url="https://ai.api.nvidia.com/v1/cv/nvidia/nemotron-table-structure-v1",
542542
)
543543
.embed(

nemo_retriever/docs/cli/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ export NVIDIA_API_KEY=nvapi-...
109109

110110
retriever ingest ./data/multimodal_test.pdf \
111111
--page-elements-invoke-url https://ai.api.nvidia.com/v1/cv/nvidia/nemotron-page-elements-v3 \
112-
--ocr-invoke-url https://ai.api.nvidia.com/v1/cv/nvidia/nemotron-ocr-v1 \
112+
--ocr-invoke-url https://ai.api.nvidia.com/v1/cv/nvidia/nemotron-ocr-v2 \
113113
--table-structure-invoke-url https://ai.api.nvidia.com/v1/cv/nvidia/nemotron-table-structure-v1 \
114114
--embed-invoke-url https://integrate.api.nvidia.com/v1/embeddings \
115115
--embed-model-name nvidia/llama-nemotron-embed-1b-v2

nemo_retriever/src/nemo_retriever/operators/extract/chart/cpu_actor.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,12 @@
2323
class GraphicElementsCPUActor(AbstractOperator, CPUOperator):
2424
"""CPU-only variant of :class:`GraphicElementsActor`.
2525
26-
Defaults to build.nvidia.com endpoints for ``nemotron-graphic-elements-v1``
27-
and hosted ``nemotron-ocr-v1``. Remote OCR remains URL-driven until OCR v2
28-
NIM is released.
26+
Defaults to the build.nvidia.com endpoint for
27+
``nemotron-graphic-elements-v1`` and hosted ``nemotron-ocr-v2``.
2928
"""
3029

3130
DEFAULT_GRAPHIC_ELEMENTS_INVOKE_URL = "https://ai.api.nvidia.com/v1/cv/nvidia/nemotron-graphic-elements-v1"
32-
DEFAULT_OCR_INVOKE_URL = "https://ai.api.nvidia.com/v1/cv/nvidia/nemotron-ocr-v1"
31+
DEFAULT_OCR_INVOKE_URL = "https://ai.api.nvidia.com/v1/cv/nvidia/nemotron-ocr-v2"
3332

3433
def __init__(
3534
self,

nemo_retriever/src/nemo_retriever/operators/extract/ocr/cpu_ocr.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,10 @@
1919
class OCRCPUActor(AbstractOperator, CPUOperator):
2020
"""Remote OCR variant of :class:`OCRActor`.
2121
22-
The hosted NIM endpoint is still v1-only until OCR v2 is released remotely.
22+
Defaults to the hosted Nemotron OCR v2 NIM endpoint.
2323
"""
2424

25-
# Keep the remote default on v1 until a hosted OCR v2 NIM is available.
26-
DEFAULT_INVOKE_URL = "https://ai.api.nvidia.com/v1/cv/nvidia/nemotron-ocr-v1"
25+
DEFAULT_INVOKE_URL = "https://ai.api.nvidia.com/v1/cv/nvidia/nemotron-ocr-v2"
2726

2827
def __init__(self, **ocr_kwargs: Any) -> None:
2928
super().__init__(**ocr_kwargs)

nemo_retriever/src/nemo_retriever/operators/extract/table/cpu_actor.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,8 @@
2323
class TableStructureCPUActor(AbstractOperator, CPUOperator):
2424
"""CPU-only variant of :class:`TableStructureActor`.
2525
26-
Defaults to the build.nvidia.com endpoint for
27-
``nemotron-table-structure-v1`` and hosted ``nemotron-ocr-v1``. Remote OCR
28-
remains URL-driven until OCR v2 NIM is released.
26+
Uses NVIDIA's hosted table-structure service by default. OCR is not turned on
27+
unless you provide an ``ocr_invoke_url``.
2928
"""
3029

3130
DEFAULT_TABLE_STRUCTURE_INVOKE_URL = "https://ai.api.nvidia.com/v1/cv/nvidia/nemotron-table-structure-v1"

nemo_retriever/src/nemo_retriever/operators/extract/video/ocr_actor.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,11 +87,11 @@ def postprocess(self, data: Any, **kwargs: Any) -> Any:
8787
class VideoFrameOCRCPUActor(AbstractOperator, CPUOperator):
8888
"""Remote Nemotron OCR on full video frames, batched per call.
8989
90-
Hosted OCR NIM is currently v1-only; the local GPU variant uses
90+
Hosted OCR NIM defaults to Nemotron OCR v2; the local GPU variant uses
9191
``NemotronOCRV2`` with the selected OCR mode.
9292
"""
9393

94-
DEFAULT_INVOKE_URL = "https://ai.api.nvidia.com/v1/cv/nvidia/nemotron-ocr-v1"
94+
DEFAULT_INVOKE_URL = "https://ai.api.nvidia.com/v1/cv/nvidia/nemotron-ocr-v2"
9595

9696
def __init__(self, **ocr_kwargs: Any) -> None:
9797
super().__init__(**ocr_kwargs)

nemo_retriever/tests/test_actor_operators.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -391,9 +391,9 @@ def test_init_with_ocr_invoke_url_skips_local_ocr(self, monkeypatch):
391391
monkeypatch.setitem(local_models.__dict__, "NemotronTableStructureV1", mock_ts)
392392
monkeypatch.setitem(local_models.__dict__, "NemotronOCRV2", mock_ocr)
393393

394-
actor = GPUActor(ocr_invoke_url="http://ocr.example/v1/cv/nvidia/nemotron-ocr-v1")
394+
actor = GPUActor(ocr_invoke_url="http://ocr.example/v1/cv/nvidia/nemotron-ocr-v2")
395395

396-
assert actor._ocr_invoke_url == "http://ocr.example/v1/cv/nvidia/nemotron-ocr-v1"
396+
assert actor._ocr_invoke_url == "http://ocr.example/v1/cv/nvidia/nemotron-ocr-v2"
397397
assert actor._ocr_model is None
398398
mock_ocr.assert_not_called()
399399
mock_ts.assert_called_once_with()

nemo_retriever/tests/test_operator_flags_and_cpu_actors.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ def test_uses_default_urls(self):
182182
assert actor._graphic_elements_model is None
183183
assert actor._ocr_model is None
184184
assert "nemotron-graphic-elements-v1" in actor._graphic_elements_invoke_url
185-
assert "nemotron-ocr-v1" in actor._ocr_invoke_url
185+
assert "nemotron-ocr-v2" in actor._ocr_invoke_url
186186

187187
def test_creates_with_custom_urls(self):
188188
from nemo_retriever.operators.extract.chart.cpu_actor import GraphicElementsCPUActor
@@ -317,7 +317,7 @@ def test_uses_default_invoke_url(self):
317317

318318
actor = OCRCPUActor()
319319
assert actor._model is None
320-
assert "nemotron-ocr-v1" in actor.ocr_kwargs["invoke_url"]
320+
assert "nemotron-ocr-v2" in actor.ocr_kwargs["invoke_url"]
321321

322322
def test_creates_with_custom_invoke_url(self):
323323
from nemo_retriever.operators.extract.ocr.cpu_ocr import OCRCPUActor

nemo_retriever/tests/test_readme_video_pipeline_example.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ def test_readme_video_pipeline_build_graph_chain() -> None:
9494
graph = build_graph(
9595
extraction_mode="auto",
9696
extract_params=ExtractParams(
97-
ocr_invoke_url="https://ai.api.nvidia.com/v1/cv/nvidia/nemoretriever-ocr-v1",
97+
ocr_invoke_url="https://ai.api.nvidia.com/v1/cv/nvidia/nemoretriever-ocr-v2",
9898
),
9999
audio_chunk_params=AudioChunkParams(
100100
enabled=True,
@@ -134,7 +134,7 @@ def test_audio_only_excludes_visual_branch_from_graph() -> None:
134134
graph = build_graph(
135135
extraction_mode="auto",
136136
extract_params=ExtractParams(
137-
ocr_invoke_url="https://ai.api.nvidia.com/v1/cv/nvidia/nemoretriever-ocr-v1",
137+
ocr_invoke_url="https://ai.api.nvidia.com/v1/cv/nvidia/nemoretriever-ocr-v2",
138138
),
139139
audio_chunk_params=AudioChunkParams(
140140
enabled=True,

0 commit comments

Comments
 (0)