NVIDIA-NeMo / NVIDIA-NeMo/DataDesigner
Add native provider request support for non-chat plugin model calls
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 2.2k
- Forks
- 211
- Avg merge
- 2d 6h
- Merged PRs (30d)
- 40
Description
Priority Level
Medium
Task Summary
Enable DataDesigner column-generator plugins to call non-chat model endpoints, such as native NER/token-classification endpoints, through DataDesigner's model/provider infrastructure without requiring those models to expose a chat-completions-compatible head.
Technical Details & Implementation Plan
Anonymizer is moving custom workflow columns into DataDesigner plugins. The next desired step is to make its GLiNER detector a plugin column as well, so nvidia/gliner-pii can be served through its native NER API instead of being wrapped behind /chat/completions.
Current blockers in DataDesigner:
ModelConfiggeneration types are currentlychat-completion,embedding, andimage.ModelFacadeexposes chat generation, embeddings, and image generation, but no public raw provider request or native NER method.ColumnGeneratorWithModelRegistrycan accessget_model_config()andget_model_provider(), but a plugin cannot cleanly reuse API key resolution, retries, request admission, provider error mapping, or HTTP client lifecycle for a custom route.- If a plugin declares the detector model alias while the model remains
chat-completion, DataDesigner health checks call chat generation, which still requires the extra chat head. - If the plugin avoids declaring the alias, it loses startup validation and scheduling metadata.
Possible implementation paths:
- Add a public provider request hook to
ModelFacade, for example a JSON request method that reuses provider endpoint, resolved API key, extra headers/body, timeout, retries, request admission, and error mapping. - Or add a native NER generation type, e.g.
GenerationType.NER, withNerInferenceParams, client/facade methods, scheduling metadata, and an appropriate health check. - The hook should be usable by plugin column generators without accessing private fields like
_secret_resolveror_client.
Investigation / Context
This came up while implementing Anonymizer workflow-column plugins: https://github.com/NVIDIA-NeMo/Anonymizer/pull/192
That PR removes CustomColumnConfig from the detection post-processing path, but the detector itself remains an LLMTextColumnConfig, so it still routes through chat completion generation.
A native detector plugin in Anonymizer would be straightforward if DataDesigner exposed a clean non-chat model-call boundary. It would call the NER endpoint and emit the existing raw detector shape:
{
"entities": [
{
"text": "Alice",
"label": "first_name",
"start": 0,
"end": 5,
"score": 0.98
}
]
}
Agent Plan / Findings
Acceptance criteria:
- A plugin column generator can call a non-chat model endpoint through public DataDesigner APIs.
- The call reuses provider config, resolved API keys, extra headers/body, timeout, retry behavior, and request admission.
- Health checks do not require
/chat/completionsfor native NER models. - Scheduling metadata can distinguish non-chat request domains, or at least avoid misclassifying them as chat.
- Anonymizer can replace its detector
LLMTextColumnConfigwith a plugin column without requiring a chat-completions-compatible NER server.
Dependencies
Related downstream work: Anonymizer native detector workflow column after this DataDesigner support exists.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by tracing ModelFacade, ModelConfig, and ColumnGeneratorWithModelRegistry to understand the existing provider, health-check, retry, and scheduling paths. Compare the public request-hook and native-NER options, then verify that a plugin can call a non-chat endpoint without private fields and that Anonymizer can use it without requiring chat-completions support.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- ai, backend-api-design
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100