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:
ModelConfig generation types are currently chat-completion, embedding, and image.
ModelFacade exposes chat generation, embeddings, and image generation, but no public raw provider request or native NER method.
ColumnGeneratorWithModelRegistry can access get_model_config() and get_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, with NerInferenceParams, 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_resolver or _client.
Investigation / Context
This came up while implementing Anonymizer workflow-column plugins: NVIDIA-NeMo/Anonymizer#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/completions for native NER models.
- Scheduling metadata can distinguish non-chat request domains, or at least avoid misclassifying them as chat.
- Anonymizer can replace its detector
LLMTextColumnConfig with 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.
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-piican 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.chat-completion, DataDesigner health checks call chat generation, which still requires the extra chat head.Possible implementation paths:
ModelFacade, for example a JSON request method that reuses provider endpoint, resolved API key, extra headers/body, timeout, retries, request admission, and error mapping.GenerationType.NER, withNerInferenceParams, client/facade methods, scheduling metadata, and an appropriate health check._secret_resolveror_client.Investigation / Context
This came up while implementing Anonymizer workflow-column plugins: NVIDIA-NeMo/Anonymizer#192
That PR removes
CustomColumnConfigfrom the detection post-processing path, but the detector itself remains anLLMTextColumnConfig, 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:
/chat/completionsfor native NER models.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.