feat: add a Nebius Token Factory example provider profile
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Newbie friendliness
- 82/100
Research direction
Read the existing example profiles under providers/ and the expected-ID list in list_provider_profiles_returns_built_in_profile_categories. Add providers/nebius-token-factory.yaml in the same format, allowing the listed inference routes while excluding the management routes named in the issue. Done when the profile lints and imports, and the profile category test includes its ID.
Written by the indexing model from the issue text.
Description
User Story
I use OpenShell to run coding and research agents in sandboxes, and my models are served by Nebius Token Factory through its OpenAI-compatible API at https://api.tokenfactory.nebius.com/v1. Today I have to hand-write a provider profile for it, and the obvious copy of the openai profile with the host swapped would hand my agents a key that can also create dedicated endpoints and fine-tuning jobs on my account.
Problem Statement
providers/ has no example profile for Nebius Token Factory. Operators who use it have to write one from scratch and decide on their own which parts of the Token Factory API a sandboxed agent should reach.
Impact / Why This Matters
A Token Factory API key works on more than inference. On the same host it can list, upload, and delete files and datasets, start fine-tuning jobs and batch operations, and create, update, or delete dedicated endpoints, which are billable GPU deployments. A profile that grants the whole host, like the existing openai, nvidia, and deepinfra examples, lets a sandboxed agent use the injected key for all of that. Operators who don't read the API reference closely will not notice.
Proposed Design
Add providers/nebius-token-factory.yaml, following the format of the other example profiles:
id: nebius-token-factory
display_name: Nebius Token Factory
category: inference
inference_capable: true
credentials:
- name: api_key
env_vars: [NEBIUS_API_KEY]
auth_style: bearer
header_name: authorization
endpoints:
- host: api.tokenfactory.nebius.com
port: 443
protocol: rest
enforcement: enforce
rules:
- allow: { method: POST, path: "/v1/chat/completions" }
- allow: { method: POST, path: "/v1/completions" }
- allow: { method: POST, path: "/v1/embeddings" }
- allow: { method: POST, path: "/v1/rerank" }
- allow: { method: POST, path: "/v1/responses" }
- allow: { method: GET, path: "/v1/models" }
binaries: [/usr/bin/curl, /usr/local/bin/curl]
Workflow:
openshell provider profile import -f providers/nebius-token-factory.yaml --global
openshell provider create --name nebius --type nebius-token-factory --credential NEBIUS_API_KEY
openshell sandbox create --provider nebius -- curl -sS https://api.tokenfactory.nebius.com/v1/models
NEBIUS_API_KEY matches the variable name in the Token Factory documentation.
Acceptance Criteria
-
providers/nebius-token-factory.yamllints and imports, and has the same header block as the other examples (client binaries, reference layout, credential scope, endpoint access, smoke test). - A sandbox with the provider attached can call chat completions (streaming included), completions, embeddings, rerank, the Responses API, and the model list.
- In that sandbox, requests to the files, datasets, fine-tuning, operations, and dedicated-endpoint APIs are denied by the proxy.
- No telemetry or provider-table changes are needed, in line with #3906.
Alternatives Considered
- Leave it to operators to copy the
openaiprofile and change the host. That gives agents the whole Token Factory API, as described above. - Grant
/v1/**read-write. This is simpler, but it still allows file, dataset, fine-tuning, and operation calls, and it would allow new management routes added under/v1later. - An endpointless profile bound per sandbox from policy. That suits per-deployment hosts, but Token Factory has a single public host, so a fixed endpoint is simpler for operators.
Agent Investigation
- Profiles are import-only examples under
providers/. Adding one changes only the YAML and the expected-ID list inlist_provider_profiles_returns_built_in_profile_categories, as in #3904. - I listed the routes from Token Factory's published OpenAPI spec (
https://api.tokenfactory.nebius.com/openapi.json). Inference routes are the ones above. Management routes are under/v1/files,/v1/datasets,/v1/fine_tuning,/v1/operations, and/v0/dedicated_endpoints.
- Dominant language
- Rust
- Stars
- 17.1k
- Forks
- 1.8k
- Avg merge
- 2d 8h
- Merged PRs (30d)
- 370
Getting set up
- No Dockerfile or Docker Compose file
- Has a pull request template
- Read the contributing 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.
More from NVIDIA/OpenShell
-
bug(install): install.sh prints gawk "escape sequence \. treated as plain ." warnings on RPM hostsPossibly taken @ericcurtin claimed this today. Openstate:triage-needed
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
Maintainers usually reply within 1 day
-
bug(sdk/go): browser login callback binds 127.0.0.1 but redirect_uri uses localhostMay be free again A pull request for this issue was closed without being merged. Openstate:triage-needed
Difficulty 2/5 1-3 hours Newbie friendliness 65/100
NVIDIA/OpenShell#4518 · 1 comment ·
Maintainers usually reply within 1 day
-
state:triage-needed
Difficulty 2/5 1-3 hours Newbie friendliness 62/100
Maintainers usually reply within 1 day
-
bug(sdk/go): edge (Cloudflare Access) token is cached for the client lifetime and never reloadedOpenstate:triage-needed
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
NVIDIA/OpenShell#4515 · 1 comment ·
Maintainers usually reply within 1 day
-
state:triage-needed
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
Maintainers usually reply within 1 day
All issues in NVIDIA/OpenShell
Similar issues
-
Difficulty 1/5 1-3 hours Newbie friendliness 86/100
Maintainers usually reply within 1 day
-
area:sim good first issue kind:feature
Difficulty 2/5 1-3 hours Newbie friendliness 87/100
Maintainers usually reply within 1 day
-
The demo's interval button and chart legend keep the previous interval after an interval changeOpenbug ui
Difficulty 2/5 1-3 hours Newbie friendliness 83/100
userFRM/egui-charts#670 ·
Maintainers usually reply within 1 day
-
docs good first issue
Difficulty 1/5 1-3 hours Newbie friendliness 84/100
Usenova-Labs/usenova-backend#35 ·
Maintainers usually reply within 1 day
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 70/100
lugassawan/swe-workbench#823 ·
Maintainers usually reply within 1 day