Priority Level
Medium (Nice to have)
Is your feature request related to a problem? Please describe.
DataDesigner already ships a built-in OpenRouter provider, but requests sent through that provider are not attributed to the project in the way OpenRouter documents for app identification. More broadly, DataDesigner does not currently send a generic app title header that other providers or gateways could log if they choose to.
That leaves two gaps:
- OpenRouter traffic from DataDesigner is harder to identify and tabulate using OpenRouter's documented app-attribution mechanism.
- Non-OpenRouter services have no simple, low-friction title header to identify that a request originated from DataDesigner.
Describe the solution you'd like
Add outbound attribution headers with two layers:
- A generic title header on all model requests:
X-Title: NeMo Data Designer
- OpenRouter-specific attribution headers on the built-in OpenRouter provider:
HTTP-Referer: https://github.com/NVIDIA-NeMo/DataDesigner
X-OpenRouter-Title: NeMo Data Designer
X-OpenRouter-Categories: programming-app
Rationale:
X-Title is a reasonable generic, human-readable app identifier that other services can ignore or log.
- For OpenRouter specifically, we should use the documented OpenRouter headers rather than relying only on the generic alias.
programming-app is an OpenRouter-recognized marketplace category and is the best fit for DataDesigner among the currently documented coding categories.
HTTP-Referer should remain a URL and be used only for the OpenRouter-specific attribution use case.
- We should not overload
HTTP-Referer to carry a title string, since that would mix URL provenance with display-name semantics.
Implementation options:
- Apply
X-Title: NeMo Data Designer centrally for all outgoing model requests, with provider-level or user-level overrides taking precedence.
- Add the OpenRouter-specific headers above to the predefined
openrouter provider entry in packages/data-designer-config/src/data_designer/config/utils/constants.py.
- Gate framework-supplied attribution headers on the existing telemetry enablement check so the same switch controls both current telemetry capture and these outbound attribution defaults.
If desired, this can remain configurable and overridable so users who do not want framework attribution can replace or remove these defaults in custom provider configs.
Opt-Out
The automatic origination headers proposed here should reuse the existing telemetry opt-out rather than introducing a second environment variable.
Today, DataDesigner documents telemetry opt-out as:
NEMO_TELEMETRY_ENABLED=false
Suggested behavior:
- When
NEMO_TELEMETRY_ENABLED=false, DataDesigner should omit framework-supplied origination headers such as:
X-Title
HTTP-Referer for the built-in OpenRouter provider
X-OpenRouter-Title
X-OpenRouter-Categories
- When
NEMO_TELEMETRY_ENABLED=false, DataDesigner should also continue to disable the existing telemetry event capture/logging path for model and token usage.
- This should disable only framework-supplied telemetry/attribution behavior.
- It should not strip or override explicit user-supplied
extra_headers in custom provider configs, since those are user intent rather than framework telemetry/attribution defaults.
- We should not add a parallel variable such as
NEMO_ORIGINATION_ENABLED; one documented environment variable should control both telemetry surfaces.
That would keep the behavior aligned with the existing telemetry pattern:
- enabled by default
- simple environment-variable opt-out
- one documented switch for both outbound attribution headers and existing telemetry logging
- best-effort attribution that can be disabled without code changes
Describe alternatives you've considered
- OpenRouter-only attribution:
- Only add OpenRouter headers on the built-in OpenRouter provider. This helps OpenRouter, but misses the chance to expose a generic title that other services may choose to log.
- Custom DataDesigner-specific header:
- Something like
X-DataDesigner-Client would work, but it is less interoperable than a generic title header and does not align with OpenRouter's documented attribution pattern.
- Use only
HTTP-Referer:
- This is not ideal. A referer-style header is appropriate for a URL, not for a human-readable app title.
- Leave attribution entirely to end-user configuration:
- This works, but the built-in providers would remain unattributed by default.
- Add a second opt-out variable just for attribution headers:
- This would create two adjacent controls for framework-generated telemetry/attribution behavior where one existing control is already documented and understood.
Agent Investigation
I reviewed the current codebase and OpenRouter's documentation.
Codebase findings:
- DataDesigner includes a predefined
openrouter model provider in packages/data-designer-config/src/data_designer/config/utils/constants.py.
ModelProvider supports extra_headers, and ModelFacade merges provider-level extra_headers into outgoing requests.
- The OpenAI-compatible client forwards those headers as-is on HTTP requests.
- The same header plumbing is generic enough that a framework-level default title header should be possible, not just a provider-specific OpenRouter tweak.
- DataDesigner already has a client-side telemetry opt-out pattern:
README.md documents NEMO_TELEMETRY_ENABLED=false
packages/data-designer-engine/src/data_designer/engine/models/telemetry.py reads NEMO_TELEMETRY_ENABLED and short-circuits event enqueueing when disabled
OpenRouter docs findings:
- App Attribution documents these optional app-attribution headers:
HTTP-Referer
X-OpenRouter-Title
X-Title as a supported backwards-compatible alias for the title header
X-OpenRouter-Categories
- The same doc states that
X-OpenRouter-Categories accepts a comma-separated list of up to 2 recognized categories per request, and recognized values currently include programming-app under the Coding group.
- User Tracking documents app attribution separately from the optional
user field used for end-user tracking.
- Based on the docs, app-attribution headers can be sent without sending a
user field.
- The documented referer value is a site/app URL, which supports using the GitHub repo URL here.
Suggested defaults:
- Generic title on all model requests:
X-Title: NeMo Data Designer
- OpenRouter-specific attribution headers:
HTTP-Referer: https://github.com/NVIDIA-NeMo/DataDesigner
X-OpenRouter-Title: NeMo Data Designer
X-OpenRouter-Categories: programming-app
- Reuse the existing telemetry opt-out:
NEMO_TELEMETRY_ENABLED=false
Additional context
This proposal keeps the semantics cleaner:
- title stays in a title-style header
- URL stays in a referer-style header
- OpenRouter-specific marketplace metadata stays in OpenRouter's documented category header
- a single existing environment variable controls both framework-generated request attribution and the existing telemetry logging path
That should make the behavior easier to understand and more portable across providers, proxies, and logging systems.
Relevant OpenRouter docs:
It may also be worth documenting that users can override or extend these headers by defining their own provider configuration if they want custom attribution behavior.
Checklist
Priority Level
Medium (Nice to have)
Is your feature request related to a problem? Please describe.
DataDesigner already ships a built-in OpenRouter provider, but requests sent through that provider are not attributed to the project in the way OpenRouter documents for app identification. More broadly, DataDesigner does not currently send a generic app title header that other providers or gateways could log if they choose to.
That leaves two gaps:
Describe the solution you'd like
Add outbound attribution headers with two layers:
X-Title: NeMo Data DesignerHTTP-Referer: https://github.com/NVIDIA-NeMo/DataDesignerX-OpenRouter-Title: NeMo Data DesignerX-OpenRouter-Categories: programming-appRationale:
X-Titleis a reasonable generic, human-readable app identifier that other services can ignore or log.programming-appis an OpenRouter-recognized marketplace category and is the best fit for DataDesigner among the currently documented coding categories.HTTP-Referershould remain a URL and be used only for the OpenRouter-specific attribution use case.HTTP-Refererto carry a title string, since that would mix URL provenance with display-name semantics.Implementation options:
X-Title: NeMo Data Designercentrally for all outgoing model requests, with provider-level or user-level overrides taking precedence.openrouterprovider entry inpackages/data-designer-config/src/data_designer/config/utils/constants.py.If desired, this can remain configurable and overridable so users who do not want framework attribution can replace or remove these defaults in custom provider configs.
Opt-Out
The automatic origination headers proposed here should reuse the existing telemetry opt-out rather than introducing a second environment variable.
Today, DataDesigner documents telemetry opt-out as:
NEMO_TELEMETRY_ENABLED=falseSuggested behavior:
NEMO_TELEMETRY_ENABLED=false, DataDesigner should omit framework-supplied origination headers such as:X-TitleHTTP-Refererfor the built-in OpenRouter providerX-OpenRouter-TitleX-OpenRouter-CategoriesNEMO_TELEMETRY_ENABLED=false, DataDesigner should also continue to disable the existing telemetry event capture/logging path for model and token usage.extra_headersin custom provider configs, since those are user intent rather than framework telemetry/attribution defaults.NEMO_ORIGINATION_ENABLED; one documented environment variable should control both telemetry surfaces.That would keep the behavior aligned with the existing telemetry pattern:
Describe alternatives you've considered
X-DataDesigner-Clientwould work, but it is less interoperable than a generic title header and does not align with OpenRouter's documented attribution pattern.HTTP-Referer:Agent Investigation
I reviewed the current codebase and OpenRouter's documentation.
Codebase findings:
openroutermodel provider inpackages/data-designer-config/src/data_designer/config/utils/constants.py.ModelProvidersupportsextra_headers, andModelFacademerges provider-levelextra_headersinto outgoing requests.README.mddocumentsNEMO_TELEMETRY_ENABLED=falsepackages/data-designer-engine/src/data_designer/engine/models/telemetry.pyreadsNEMO_TELEMETRY_ENABLEDand short-circuits event enqueueing when disabledOpenRouter docs findings:
HTTP-RefererX-OpenRouter-TitleX-Titleas a supported backwards-compatible alias for the title headerX-OpenRouter-CategoriesX-OpenRouter-Categoriesaccepts a comma-separated list of up to 2 recognized categories per request, and recognized values currently includeprogramming-appunder the Coding group.userfield used for end-user tracking.userfield.Suggested defaults:
X-Title: NeMo Data DesignerHTTP-Referer: https://github.com/NVIDIA-NeMo/DataDesignerX-OpenRouter-Title: NeMo Data DesignerX-OpenRouter-Categories: programming-appNEMO_TELEMETRY_ENABLED=falseAdditional context
This proposal keeps the semantics cleaner:
That should make the behavior easier to understand and more portable across providers, proxies, and logging systems.
Relevant OpenRouter docs:
It may also be worth documenting that users can override or extend these headers by defining their own provider configuration if they want custom attribution behavior.
Checklist