feat: add a Nebius Token Factory example provider profile
维护者通常 1 天内回复
还没有人认领这个 Issue。
评估
调研方向
阅读 providers/ 下现有的示例配置文件,以及 list_provider_profiles_returns_built_in_profile_categories 中预期 ID 的列表。按照相同格式添加 providers/nebius-token-factory.yaml,允许列出的推理路由,同时排除 issue 中提到的管理路由。配置文件通过 lint 检查并成功导入,且配置文件类别测试包含其 ID 后,即为完成。
由索引模型根据 Issue 内容生成。
描述
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.
- 主要语言
- Rust
- 星标
- 17.1k
- 派生
- 1.8k
- 平均合并
- 2 天 8 小时
- 30 天内合并 PR
- 370
环境准备
- 没有 Dockerfile 或 Docker Compose 文件
- 有 Pull Request 模板
- 阅读贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
NVIDIA/OpenShell 的其他 Issue
-
bug(install): install.sh prints gawk "escape sequence \. treated as plain ." warnings on RPM hosts可能已有人在做 @ericcurtin 今天认领。 未关闭state:triage-needed
难度 2/5 1-3 小时 新手友好度 82/100
维护者通常 1 天内回复
-
bug(sdk/go): browser login callback binds 127.0.0.1 but redirect_uri uses localhost可能重新可做 关联的 PR 已关闭且未合并。 未关闭state:triage-needed
难度 2/5 1-3 小时 新手友好度 65/100
NVIDIA/OpenShell#4518 · 1 条评论 ·
维护者通常 1 天内回复
-
state:triage-needed
难度 2/5 1-3 小时 新手友好度 62/100
维护者通常 1 天内回复
-
bug(sdk/go): edge (Cloudflare Access) token is cached for the client lifetime and never reloaded未关闭state:triage-needed
难度 2/5 1-3 小时 新手友好度 72/100
NVIDIA/OpenShell#4515 · 1 条评论 ·
维护者通常 1 天内回复
-
state:triage-needed
难度 2/5 1-3 小时 新手友好度 76/100
维护者通常 1 天内回复
相似的 Issue
-
Docker host resolution missing default rootless Docker path可能已有人在做 @500B 今天认领。 未关闭
难度 2/5 1-3 小时 新手友好度 88/100
testcontainers/testcontainers-rs#1000 ·
维护者通常 3 天内回复
-
bug needs triage P3
难度 2/5 1-3 小时 新手友好度 76/100
pbakaus/impeccable#1143 ·
维护者通常 1 天内回复
-
Bundled uv is never updated and trusts the compromised eMudhra certificates可能已有人在做 @FabienDanieau 今天认领。 未关闭bug
难度 2/5 1-3 小时 新手友好度 76/100
-
难度 2/5 1-3 小时 新手友好度 66/100
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 62/100
维护者通常 1 天内回复