docs(26.05): split Julio Helm and VDB reconcile updates#2316
docs(26.05): split Julio Helm and VDB reconcile updates#2316kheiss-uwzoo wants to merge 1 commit into
Conversation
Port Julio-owned Helm README and VDB reconcile changes from PR 2311 onto 26.05. Includes Greptile fixes for OCR v1, reranker image tag, and the answer_llm 26.05 chart caveat.
Greptile SummaryThis PR updates the VDB docs and Helm README for the 26.05 release. The main changes are:
|
| Filename | Overview |
|---|---|
| docs/docs/extraction/vdbs.md | Updates VDB import paths and documentation links, but several new targets do not exist on this branch. |
| nemo_retriever/helm/README.md | Updates Helm release guidance, image tables, LLM docs, and OpenShift links, but several documented values and pages do not match the chart. |
Prompt To Fix All With AI
Fix the following 9 code review issues. Work through them one at a time, proposing concise fixes.
---
### Issue 1 of 9
docs/docs/extraction/vdbs.md:63
**LanceDB Import Path Missing**
When readers copy this example on the 26.05 branch, `nemo_retriever.common.vdb.lancedb` is not importable because the package still exposes `LanceDB` from `nemo_retriever.vdb.lancedb`. The snippet fails before users can create the LanceDB instance.
```suggestion
from nemo_retriever.vdb.lancedb import LanceDB
```
### Issue 2 of 9
docs/docs/extraction/vdbs.md:120
**Source Links Target Missing Paths**
The new links on this line send readers to `nemo_retriever/src/nemo_retriever/operators/vdb.py` and `nemo_retriever/src/nemo_retriever/common/vdb/adt_vdb.py`, but those paths are not present on this branch. Users following the custom VDB guidance will hit 404s instead of the operator and interface sources under `nemo_retriever/src/nemo_retriever/vdb/`.
### Issue 3 of 9
docs/docs/extraction/vdbs.md:153
**Related Topic Link Missing**
This adds a relative link to `customize-extend.md`, but that page is not present under `docs/docs/extraction/` on this branch. Readers using the Related Topics section will land on a broken docs page instead of customization guidance.
### Issue 4 of 9
nemo_retriever/helm/README.md:212-220
**Answer LLM Flag Ignored**
This opt-in list presents `nimOperator.answer_llm.enabled=true` as an actionable flag for the chart, but the 26.05 values and templates do not include an `answer_llm` block or NIM resource. Helm accepts the override without rendering an answer LLM, so users can believe `/v1/answer` is enabled while the deployment remains unchanged.
### Issue 5 of 9
nemo_retriever/helm/README.md:324-330
**LLM Values Are Unrendered**
These `serviceConfig.llm.*` rows describe active chart settings, but the 26.05 chart has no `serviceConfig.llm` values block and the templates do not render the LLM config or API key secret. A user setting these values for `/v1/answer` will have them silently ignored, leaving the service unconfigured.
### Issue 6 of 9
nemo_retriever/helm/README.md:472-480
**Answer LLM Defaults Absent**
The NIM Operator table documents `nimOperator.answer_llm.*` defaults even though this chart has no matching values block or NIM template. Air-gapped users can mirror the listed Super-49B image and set overrides that no rendered resource consumes.
### Issue 7 of 9
nemo_retriever/helm/README.md:687
**OCR Default Conflicts With Chart**
This row says the default OCR repository is `nemotron-ocr-v2`, but the 26.05 chart values and OCR template use `nvcr.io/nim/nvidia/nemotron-ocr-v1` with tag `1.3.0`. Operators following this reference can mirror or override the wrong OCR image for the chart they are installing.
```suggestion
| `nimOperator.ocr.image.repository` | NIM image (default `nvcr.io/nim/nvidia/nemotron-ocr-v1`) |
```
### Issue 8 of 9
nemo_retriever/helm/README.md:299-302
**OpenShift Guide Link Missing**
This moves the restricted-v2 ffmpeg guidance to `./openshift.md`, but that file is not present in the chart directory on this branch. OpenShift users following the new link will hit a missing page where the inline install workaround used to be.
### Issue 9 of 9
nemo_retriever/helm/README.md:308
**Audio Default Stated Backwards**
The parenthetical says the Parakeet ASR NIM is on by default, but `nimOperator.audio.enabled` defaults to `false` in the chart. Users can skip the explicit opt-in and then deploy without the ASR NIM, so audio/video transcription will not be available.
```suggestion
1. Set `nimOperator.audio.enabled=true` (it is disabled by default; enable only the optional NIMs you need per [Recommended minimal install](#recommended-minimal-install-2605)).
```
Reviews (1): Last reviewed commit: "docs(26.05): split Julio Helm and VDB re..." | Re-trigger Greptile
|
|
||
| ```python | ||
| from nemo_retriever.vdb.lancedb import LanceDB | ||
| from nemo_retriever.common.vdb.lancedb import LanceDB |
There was a problem hiding this comment.
When readers copy this example on the 26.05 branch, nemo_retriever.common.vdb.lancedb is not importable because the package still exposes LanceDB from nemo_retriever.vdb.lancedb. The snippet fails before users can create the LanceDB instance.
| from nemo_retriever.common.vdb.lancedb import LanceDB | |
| from nemo_retriever.vdb.lancedb import LanceDB |
Prompt To Fix With AI
This is a comment left during a code review.
Path: docs/docs/extraction/vdbs.md
Line: 63
Comment:
**LanceDB Import Path Missing**
When readers copy this example on the 26.05 branch, `nemo_retriever.common.vdb.lancedb` is not importable because the package still exposes `LanceDB` from `nemo_retriever.vdb.lancedb`. The snippet fails before users can create the LanceDB instance.
```suggestion
from nemo_retriever.vdb.lancedb import LanceDB
```
How can I resolve this? If you propose a fix, please make it concise.Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!
| ### Backends with `VDB` implementations (retriever adapters) { #vdb-backends-implementations } | ||
|
|
||
| NeMo Retriever graph operators [`IngestVdbOperator`](https://github.com/NVIDIA/NeMo-Retriever/blob/main/nemo_retriever/src/nemo_retriever/vdb/operators.py) and [`RetrieveVdbOperator`](https://github.com/NVIDIA/NeMo-Retriever/blob/main/nemo_retriever/src/nemo_retriever/vdb/operators.py) wrap concrete classes that implement the [`VDB`](https://github.com/NVIDIA/NeMo-Retriever/blob/main/nemo_retriever/src/nemo_retriever/vdb/adt_vdb.py) interface (`run` for ingest, `retrieval` for search). The library ships one first-party backend: | ||
| NeMo Retriever graph operators [`IngestVdbOperator`](https://github.com/NVIDIA/NeMo-Retriever/blob/main/nemo_retriever/src/nemo_retriever/operators/vdb.py) and [`RetrieveVdbOperator`](https://github.com/NVIDIA/NeMo-Retriever/blob/main/nemo_retriever/src/nemo_retriever/operators/vdb.py) wrap concrete classes that implement the [`VDB`](https://github.com/NVIDIA/NeMo-Retriever/blob/main/nemo_retriever/src/nemo_retriever/common/vdb/adt_vdb.py) interface (`run` for ingest, `retrieval` for search). The library ships one first-party backend: |
There was a problem hiding this comment.
Source Links Target Missing Paths
The new links on this line send readers to nemo_retriever/src/nemo_retriever/operators/vdb.py and nemo_retriever/src/nemo_retriever/common/vdb/adt_vdb.py, but those paths are not present on this branch. Users following the custom VDB guidance will hit 404s instead of the operator and interface sources under nemo_retriever/src/nemo_retriever/vdb/.
Prompt To Fix With AI
This is a comment left during a code review.
Path: docs/docs/extraction/vdbs.md
Line: 120
Comment:
**Source Links Target Missing Paths**
The new links on this line send readers to `nemo_retriever/src/nemo_retriever/operators/vdb.py` and `nemo_retriever/src/nemo_retriever/common/vdb/adt_vdb.py`, but those paths are not present on this branch. Users following the custom VDB guidance will hit 404s instead of the operator and interface sources under `nemo_retriever/src/nemo_retriever/vdb/`.
How can I resolve this? If you propose a fix, please make it concise.| NVIDIA documents and validates the first-party LanceDB operator for this library. If you integrate a different vector store, you are responsible for testing and maintaining that integration. | ||
|
|
||
| To implement a custom operator, follow the `VDB` abstract interface described in [Build a Custom Vector Database Operator](https://github.com/NVIDIA/NeMo-Retriever/blob/main/examples/building_vdb_operator.ipynb). | ||
| To implement a custom operator, follow the `VDB` abstract interface described in [Build a Custom Vector Database Operator](https://github.com/NVIDIA/NeMo-Retriever/blob/main/examples/building_vdb_operator.ipynb). For an overview of all customization paths (UDFs, graph pipelines, and embeddings), refer to [Customize & extend](customize-extend.md). |
There was a problem hiding this comment.
This adds a relative link to customize-extend.md, but that page is not present under docs/docs/extraction/ on this branch. Readers using the Related Topics section will land on a broken docs page instead of customization guidance.
Prompt To Fix With AI
This is a comment left during a code review.
Path: docs/docs/extraction/vdbs.md
Line: 153
Comment:
**Related Topic Link Missing**
This adds a relative link to `customize-extend.md`, but that page is not present under `docs/docs/extraction/` on this branch. Readers using the Related Topics section will land on a broken docs page instead of customization guidance.
How can I resolve this? If you propose a fix, please make it concise.| --set ngcApiSecret.password=$NGC_API_KEY | ||
| ``` | ||
|
|
||
| > The VL reranker (`rerankqa`), Nemotron Parse, the Nemotron 3 Nano Omni 30B caption NIM, and the Parakeet `audio` ASR NIM are **all off by default** in 26.05 — they only reconcile when you explicitly opt in. Opt-in flags: | ||
| > The VL reranker (`rerankqa`), Nemotron Parse, the Nemotron 3 Nano Omni 30B caption NIM, the generic answer-generation LLM (`answer_llm`, Super-49B defaults), and the Parakeet `audio` ASR NIM are **all off by default** — they only reconcile when you explicitly opt in. Opt-in flags: | ||
| > | ||
| > * VL reranker — `--set nimOperator.rerankqa.enabled=true` | ||
| > * Nemotron Parse — `--set nimOperator.nemotron_parse.enabled=true` | ||
| > * Omni 30B captioner — `--set nimOperator.nemotron_3_nano_omni_30b_a3b_reasoning.enabled=true` | ||
| > * Answer generation LLM — `--set nimOperator.answer_llm.enabled=true` (**not in the 26.05 chart**; refer to [Answer generation (operator-managed LLM)](#answer-generation-llm)) |
There was a problem hiding this comment.
This opt-in list presents nimOperator.answer_llm.enabled=true as an actionable flag for the chart, but the 26.05 values and templates do not include an answer_llm block or NIM resource. Helm accepts the override without rendering an answer LLM, so users can believe /v1/answer is enabled while the deployment remains unchanged.
Prompt To Fix With AI
This is a comment left during a code review.
Path: nemo_retriever/helm/README.md
Line: 212-220
Comment:
**Answer LLM Flag Ignored**
This opt-in list presents `nimOperator.answer_llm.enabled=true` as an actionable flag for the chart, but the 26.05 values and templates do not include an `answer_llm` block or NIM resource. Helm accepts the override without rendering an answer LLM, so users can believe `/v1/answer` is enabled while the deployment remains unchanged.
How can I resolve this? If you propose a fix, please make it concise.| | `serviceConfig.llm.enabled` | `false` | Enables `POST /v1/answer`. Auto-flips to true when `nimOperator.answer_llm` is enabled and the operator URL resolves. | | ||
| | `serviceConfig.llm.apiBase` | `""` | OpenAI-compatible LLM base URL. Explicit value wins; otherwise `answer_llm` opt-in resolves to `http://answer-llm:8000/v1` by default. | | ||
| | `serviceConfig.llm.apiKeySecret.name` | `""` | Optional Secret name for external LLM credentials. Explicit values win; otherwise operator-managed `answer_llm` mounts its `authSecret` as `NEMO_RETRIEVER_LLM_API_KEY` so LiteLLM/OpenAI has a credential value without writing it to the ConfigMap. | | ||
| | `serviceConfig.llm.apiKeySecret.key` | `api_key` | Secret key for external LLM credentials. Operator-managed `answer_llm` uses `NGC_API_KEY` from `nimOperator.answer_llm.authSecret` when no explicit LLM Secret is set. | | ||
| | `serviceConfig.llm.model` | `""` | Optional explicit LiteLLM model id. Leave empty to inherit `nimOperator.answer_llm.model` when using the operator-managed answer LLM; set it for external endpoints. | | ||
| | `serviceConfig.llm.ragSystemPromptPrefix` | `""` | Optional explicit RAG prompt prefix. Leave empty unless an endpoint needs model-specific prompt directives. | | ||
| | `serviceConfig.llm.reasoningEnabled` | `true` | Request-level reasoning toggle for `/v1/answer`. Defaults to true for external OpenAI-compatible providers; set false for Nemotron endpoints that should receive portable no-reasoning controls. | |
There was a problem hiding this comment.
These serviceConfig.llm.* rows describe active chart settings, but the 26.05 chart has no serviceConfig.llm values block and the templates do not render the LLM config or API key secret. A user setting these values for /v1/answer will have them silently ignored, leaving the service unconfigured.
Prompt To Fix With AI
This is a comment left during a code review.
Path: nemo_retriever/helm/README.md
Line: 324-330
Comment:
**LLM Values Are Unrendered**
These `serviceConfig.llm.*` rows describe active chart settings, but the 26.05 chart has no `serviceConfig.llm` values block and the templates do not render the LLM config or API key secret. A user setting these values for `/v1/answer` will have them silently ignored, leaving the service unconfigured.
How can I resolve this? If you propose a fix, please make it concise.| | `nimOperator.vlm_embed.enabled` | `true` | Multimodal embedding NIM (also used by the vectordb Pod). | | ||
| | `nimOperator.vlm_embed.nimServiceName` | `llama-nemotron-embed-vl-1b-v2` | NIMService / in-cluster DNS name. | | ||
| | `nimOperator.vlm_embed.image` | `nvcr.io/nim/nvidia/llama-nemotron-embed-vl-1b-v2:1.12.0` | Default VLM embed NIM image. | | ||
| | `nimOperator.rerankqa.enabled` | `false` | VL reranker NIM (optional; not auto-wired). Set `true` to opt in. Default `false` so 26.05 installs honor the "optional and disabled by default" contract in [deployment-options.md](https://github.com/NVIDIA/NeMo-Retriever/blob/main/docs/docs/extraction/deployment-options.md) and do not silently provision an extra ≈ 3.1 GiB GPU NIM. The image points at the **VL** SKU (`llama-nemotron-rerank-vl-1b-v2`) per [prerequisites-support-matrix.md](https://github.com/NVIDIA/NeMo-Retriever/blob/main/docs/docs/extraction/prerequisites-support-matrix.md#default-helm-nims) — the text-only `llama-nemotron-rerank-1b-v2` silently degrades multimodal reranking and is not the documented POR. | | ||
| | `nimOperator.nemotron_parse.enabled` | `false` | Structured-parse NIM (optional). Set `true` when using `extract_method="nemotron_parse"`. Default `false` so 26.05 installs honor the "optional and disabled by default" contract in [deployment-options.md](https://github.com/NVIDIA/NeMo-Retriever/blob/main/docs/docs/extraction/deployment-options.md). Image tag follows the [image tag conventions](#image-tag-conventions). | | ||
| | `nimOperator.nemotron_3_nano_omni_30b_a3b_reasoning.enabled` | `false` | Omni 30B caption NIM (optional). Set `true` to enable image captioning — see [Image captioning (Omni 30B)](#image-captioning-omni-30b). Default `false` so 26.05 installs do not silently pull ≈ 62 GiB of BF16 weights or claim a second dedicated GPU. Image tag follows the [image tag conventions](#image-tag-conventions). | | ||
| | `nimOperator.rerankqa.enabled` | `false` | VL reranker NIM (optional; not auto-wired). Set `true` to opt in. Default `false` so chart installs honor the "optional and disabled by default" contract in [deployment-options.md](https://github.com/NVIDIA/NeMo-Retriever/blob/main/docs/docs/extraction/deployment-options.md) and do not silently provision an extra ≈ 3.1 GiB GPU NIM. The image points at the **VL** SKU (`llama-nemotron-rerank-vl-1b-v2`) per [prerequisites-support-matrix.md](https://github.com/NVIDIA/NeMo-Retriever/blob/main/docs/docs/extraction/prerequisites-support-matrix.md#default-helm-nims) — the text-only `llama-nemotron-rerank-1b-v2` silently degrades multimodal reranking and is not the documented POR. | | ||
| | `nimOperator.nemotron_parse.enabled` | `false` | Structured-parse NIM (optional). Set `true` when using `extract_method="nemotron_parse"`. Default `false` so chart installs honor the "optional and disabled by default" contract in [deployment-options.md](https://github.com/NVIDIA/NeMo-Retriever/blob/main/docs/docs/extraction/deployment-options.md). Image tag follows the [image tag conventions](#image-tag-conventions). | | ||
| | `nimOperator.nemotron_3_nano_omni_30b_a3b_reasoning.enabled` | `false` | Omni 30B caption NIM (optional). Set `true` to enable image captioning — refer to [Image captioning (Omni 30B)](#image-captioning-omni-30b). Default `false` so chart installs do not silently pull ≈ 62 GiB of BF16 weights or claim a second dedicated GPU. Image tag follows the [image tag conventions](#image-tag-conventions). | | ||
| | `nimOperator.answer_llm.enabled` | `false` | Generic answer-generation LLM NIM (optional; Super-49B defaults). Set `true` to enable `/v1/answer` — refer to [Answer generation (operator-managed LLM)](#answer-generation-llm). Default `false` so installs do not silently claim answer-generation GPUs. | | ||
| | `nimOperator.answer_llm.model` | `openai/nvidia/llama-3.3-nemotron-super-49b-v1.5` | LiteLLM/OpenAI model id inherited by `serviceConfig.llm.model` when the operator-managed answer LLM is enabled and no explicit service model is set. | | ||
| | `nimOperator.answer_llm.ragSystemPromptPrefix` | `""` | Optional prompt prefix inherited by `serviceConfig.llm.ragSystemPromptPrefix` only when explicitly set. Leave empty to keep the operator-managed LLM model-neutral and use `serviceConfig.llm.reasoningEnabled` for request-level reasoning control. | |
There was a problem hiding this comment.
The NIM Operator table documents nimOperator.answer_llm.* defaults even though this chart has no matching values block or NIM template. Air-gapped users can mirror the listed Super-49B image and set overrides that no rendered resource consumes.
Prompt To Fix With AI
This is a comment left during a code review.
Path: nemo_retriever/helm/README.md
Line: 472-480
Comment:
**Answer LLM Defaults Absent**
The NIM Operator table documents `nimOperator.answer_llm.*` defaults even though this chart has no matching values block or NIM template. Air-gapped users can mirror the listed Super-49B image and set overrides that no rendered resource consumes.
How can I resolve this? If you propose a fix, please make it concise.| | `nimOperator.nimCache.keepOnUninstall` | When `true`, NIMCache CRs survive `helm uninstall` (`helm.sh/resource-policy: keep`). NIMService CRs are always removed. Set `false` for dev clusters that should fully tear down on uninstall. | | ||
| | `nimOperator.ocr.enabled` | Reconcile the OCR `NIMService` | | ||
| | `nimOperator.ocr.image.repository` | NIM image (default `nvcr.io/nim/nvidia/nemotron-ocr-v1`) | | ||
| | `nimOperator.ocr.image.repository` | NIM image (default `nvcr.io/nim/nvidia/nemotron-ocr-v2`) | |
There was a problem hiding this comment.
OCR Default Conflicts With Chart
This row says the default OCR repository is nemotron-ocr-v2, but the 26.05 chart values and OCR template use nvcr.io/nim/nvidia/nemotron-ocr-v1 with tag 1.3.0. Operators following this reference can mirror or override the wrong OCR image for the chart they are installing.
| | `nimOperator.ocr.image.repository` | NIM image (default `nvcr.io/nim/nvidia/nemotron-ocr-v2`) | | |
| | `nimOperator.ocr.image.repository` | NIM image (default `nvcr.io/nim/nvidia/nemotron-ocr-v1`) | |
Prompt To Fix With AI
This is a comment left during a code review.
Path: nemo_retriever/helm/README.md
Line: 687
Comment:
**OCR Default Conflicts With Chart**
This row says the default OCR repository is `nemotron-ocr-v2`, but the 26.05 chart values and OCR template use `nvcr.io/nim/nvidia/nemotron-ocr-v1` with tag `1.3.0`. Operators following this reference can mirror or override the wrong OCR image for the chart they are installing.
```suggestion
| `nimOperator.ocr.image.repository` | NIM image (default `nvcr.io/nim/nvidia/nemotron-ocr-v1`) |
```
How can I resolve this? If you propose a fix, please make it concise.| For audio and video extraction, set `service.installFfmpeg=true` when your | ||
| cluster allows runtime package installation. For air-gapped clusters, see | ||
| [Deployment options — Air-gapped and disconnected deployment](https://docs.nvidia.com/nemo/retriever/latest/extraction/deployment-options/#air-gapped-deployment). | ||
| cluster allows runtime package installation. **OpenShift restricted-v2** blocks | ||
| that path — use a prebuilt service image instead; refer to [Audio and video on restricted OpenShift](./openshift.md#audio-and-video-ffmpeg-on-restricted-openshift). | ||
| For air-gapped clusters, refer to [Deployment options — Air-gapped and disconnected deployment](https://docs.nvidia.com/nemo/retriever/latest/extraction/deployment-options/#air-gapped-deployment). |
There was a problem hiding this comment.
This moves the restricted-v2 ffmpeg guidance to ./openshift.md, but that file is not present in the chart directory on this branch. OpenShift users following the new link will hit a missing page where the inline install workaround used to be.
Prompt To Fix With AI
This is a comment left during a code review.
Path: nemo_retriever/helm/README.md
Line: 299-302
Comment:
**OpenShift Guide Link Missing**
This moves the restricted-v2 ffmpeg guidance to `./openshift.md`, but that file is not present in the chart directory on this branch. OpenShift users following the new link will hit a missing page where the inline install workaround used to be.
How can I resolve this? If you propose a fix, please make it concise.|
|
||
| 1. Set `nimOperator.audio.enabled=true` (it is on by default; disable other optional NIMs you do not need per [Recommended minimal install (26.05)](#recommended-minimal-install-2605)). | ||
| 2. Pin the ASR `NIMService` to a **dedicated GPU** with `nimOperator.audio.resources`, `nodeSelector`, or `tolerations` (see [NIM Operator](https://docs.nvidia.com/nim-operator/latest/index.html)). | ||
| 1. Set `nimOperator.audio.enabled=true` (it is on by default; disable other optional NIMs you do not need per [Recommended minimal install](#recommended-minimal-install-2605)). |
There was a problem hiding this comment.
Audio Default Stated Backwards
The parenthetical says the Parakeet ASR NIM is on by default, but nimOperator.audio.enabled defaults to false in the chart. Users can skip the explicit opt-in and then deploy without the ASR NIM, so audio/video transcription will not be available.
| 1. Set `nimOperator.audio.enabled=true` (it is on by default; disable other optional NIMs you do not need per [Recommended minimal install](#recommended-minimal-install-2605)). | |
| 1. Set `nimOperator.audio.enabled=true` (it is disabled by default; enable only the optional NIMs you need per [Recommended minimal install](#recommended-minimal-install-2605)). |
Prompt To Fix With AI
This is a comment left during a code review.
Path: nemo_retriever/helm/README.md
Line: 308
Comment:
**Audio Default Stated Backwards**
The parenthetical says the Parakeet ASR NIM is on by default, but `nimOperator.audio.enabled` defaults to `false` in the chart. Users can skip the explicit opt-in and then deploy without the ASR NIM, so audio/video transcription will not be available.
```suggestion
1. Set `nimOperator.audio.enabled=true` (it is disabled by default; enable only the optional NIMs you need per [Recommended minimal install](#recommended-minimal-install-2605)).
```
How can I resolve this? If you propose a fix, please make it concise.|
Closing: module-path reorg and main chart features not in 26.05 release. Triage vs upstream/26.05 (post-#2313):
Note: the GA service image default (nrl-service:26.5.0) may be worth a separate eng/chart PR if values.yaml confirms it — but it should not ride with main-only answer_llm/OpenShift content. 26.05 Helm OCR v1 and existing vdb module layout should remain as shipped. |
Summary
answer_llmcaveat.Review context
This is part of the owner-based split of #2311 so previous contributors can review their own 26.05 reconcile changes.
Test plan
upstream/26.05: one commit, intended docs files only.