feat: add Nebius Token Factory provider
- Provider configuration with 11 models (Qwen, DeepSeek, Llama, GLM families) - Credential handling and onboarding flow - Complete documentation (nebius.md, config examples, provider list) - Test coverage for config functions - Changelog entry
This commit is contained in:
parent
84a1994890
commit
062ce60bfa
@ -15,6 +15,7 @@ Status: beta.
|
|||||||
|
|
||||||
### Changes
|
### Changes
|
||||||
- Providers: add Venice AI integration; update Moonshot Kimi references to kimi-k2.5; update MiniMax API endpoint/format. (#2762, #3064)
|
- Providers: add Venice AI integration; update Moonshot Kimi references to kimi-k2.5; update MiniMax API endpoint/format. (#2762, #3064)
|
||||||
|
- Providers: add Nebius Token Factory integration with onboarding flow (Qwen, DeepSeek, Llama, GLM families).
|
||||||
- Providers: add Xiaomi MiMo (mimo-v2-flash) support and onboarding flow. (#3454) Thanks @WqyJh.
|
- Providers: add Xiaomi MiMo (mimo-v2-flash) support and onboarding flow. (#3454) Thanks @WqyJh.
|
||||||
- Telegram: quote replies, edit-message action, silent sends, sticker support + vision caching, linkPreview toggle, plugin sendPayload support. (#2900, #2394, #2382, #2548, #1700, #1917)
|
- Telegram: quote replies, edit-message action, silent sends, sticker support + vision caching, linkPreview toggle, plugin sendPayload support. (#2900, #2394, #2382, #2548, #1700, #1917)
|
||||||
- Discord: configurable privileged gateway intents for presences/members. (#2266) Thanks @kentaro.
|
- Discord: configurable privileged gateway intents for presences/members. (#2266) Thanks @kentaro.
|
||||||
|
|||||||
@ -53,6 +53,7 @@ describe("models-config", () => {
|
|||||||
const previousMoonshot = process.env.MOONSHOT_API_KEY;
|
const previousMoonshot = process.env.MOONSHOT_API_KEY;
|
||||||
const previousSynthetic = process.env.SYNTHETIC_API_KEY;
|
const previousSynthetic = process.env.SYNTHETIC_API_KEY;
|
||||||
const previousVenice = process.env.VENICE_API_KEY;
|
const previousVenice = process.env.VENICE_API_KEY;
|
||||||
|
const previousNebius = process.env.NEBIUS_API_KEY;
|
||||||
const previousXiaomi = process.env.XIAOMI_API_KEY;
|
const previousXiaomi = process.env.XIAOMI_API_KEY;
|
||||||
delete process.env.COPILOT_GITHUB_TOKEN;
|
delete process.env.COPILOT_GITHUB_TOKEN;
|
||||||
delete process.env.GH_TOKEN;
|
delete process.env.GH_TOKEN;
|
||||||
@ -62,6 +63,7 @@ describe("models-config", () => {
|
|||||||
delete process.env.MOONSHOT_API_KEY;
|
delete process.env.MOONSHOT_API_KEY;
|
||||||
delete process.env.SYNTHETIC_API_KEY;
|
delete process.env.SYNTHETIC_API_KEY;
|
||||||
delete process.env.VENICE_API_KEY;
|
delete process.env.VENICE_API_KEY;
|
||||||
|
delete process.env.NEBIUS_API_KEY;
|
||||||
delete process.env.XIAOMI_API_KEY;
|
delete process.env.XIAOMI_API_KEY;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@ -95,6 +97,8 @@ describe("models-config", () => {
|
|||||||
else process.env.SYNTHETIC_API_KEY = previousSynthetic;
|
else process.env.SYNTHETIC_API_KEY = previousSynthetic;
|
||||||
if (previousVenice === undefined) delete process.env.VENICE_API_KEY;
|
if (previousVenice === undefined) delete process.env.VENICE_API_KEY;
|
||||||
else process.env.VENICE_API_KEY = previousVenice;
|
else process.env.VENICE_API_KEY = previousVenice;
|
||||||
|
if (previousNebius === undefined) delete process.env.NEBIUS_API_KEY;
|
||||||
|
else process.env.NEBIUS_API_KEY = previousNebius;
|
||||||
if (previousXiaomi === undefined) delete process.env.XIAOMI_API_KEY;
|
if (previousXiaomi === undefined) delete process.env.XIAOMI_API_KEY;
|
||||||
else process.env.XIAOMI_API_KEY = previousXiaomi;
|
else process.env.XIAOMI_API_KEY = previousXiaomi;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -17,6 +17,8 @@ import {
|
|||||||
applySyntheticProviderConfig,
|
applySyntheticProviderConfig,
|
||||||
applyXiaomiConfig,
|
applyXiaomiConfig,
|
||||||
applyXiaomiProviderConfig,
|
applyXiaomiProviderConfig,
|
||||||
|
applyNebiusConfig,
|
||||||
|
applyNebiusProviderConfig,
|
||||||
OPENROUTER_DEFAULT_MODEL_REF,
|
OPENROUTER_DEFAULT_MODEL_REF,
|
||||||
SYNTHETIC_DEFAULT_MODEL_ID,
|
SYNTHETIC_DEFAULT_MODEL_ID,
|
||||||
SYNTHETIC_DEFAULT_MODEL_REF,
|
SYNTHETIC_DEFAULT_MODEL_REF,
|
||||||
@ -466,3 +468,44 @@ describe("applyOpenrouterConfig", () => {
|
|||||||
expect(cfg.agents?.defaults?.model?.fallbacks).toEqual(["anthropic/claude-opus-4-5"]);
|
expect(cfg.agents?.defaults?.model?.fallbacks).toEqual(["anthropic/claude-opus-4-5"]);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
describe("applyNebiusConfig", () => {
|
||||||
|
it("adds Nebius provider with correct settings", () => {
|
||||||
|
const cfg = applyNebiusConfig({});
|
||||||
|
expect(cfg.models?.providers?.nebius).toMatchObject({
|
||||||
|
baseUrl: "https://api.tokenfactory.nebius.com/v1",
|
||||||
|
api: "openai-completions",
|
||||||
|
});
|
||||||
|
expect(cfg.agents?.defaults?.model?.primary).toBe("nebius/zai-org/GLM-4.7-FP8");
|
||||||
|
});
|
||||||
|
|
||||||
|
it("merges Nebius models and keeps existing provider overrides", () => {
|
||||||
|
const cfg = applyNebiusProviderConfig({
|
||||||
|
models: {
|
||||||
|
providers: {
|
||||||
|
nebius: {
|
||||||
|
baseUrl: "https://old.example.com",
|
||||||
|
apiKey: "old-key",
|
||||||
|
api: "openai-completions",
|
||||||
|
models: [
|
||||||
|
{
|
||||||
|
id: "custom-model",
|
||||||
|
name: "Custom",
|
||||||
|
reasoning: false,
|
||||||
|
input: ["text"],
|
||||||
|
cost: { input: 1, output: 2, cacheRead: 0, cacheWrite: 0 },
|
||||||
|
contextWindow: 1000,
|
||||||
|
maxTokens: 100,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(cfg.models?.providers?.nebius?.baseUrl).toBe("https://api.tokenfactory.nebius.com/v1");
|
||||||
|
expect(cfg.models?.providers?.nebius?.api).toBe("openai-completions");
|
||||||
|
expect(cfg.models?.providers?.nebius?.apiKey).toBe("old-key");
|
||||||
|
expect(cfg.models?.providers?.nebius?.models.map((m) => m.id)).toContain("custom-model");
|
||||||
|
expect(cfg.models?.providers?.nebius?.models.map((m) => m.id)).toContain("zai-org/GLM-4.7-FP8");
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user