import type { ProviderRuntimeModel } from "openclaw/plugin-sdk/plugin-entry" ;
import { describe, expect, it } from "vitest" ;
import { resolveProviderPluginChoice } from "../../src/plugins/provider-auth-choice.runtime.js" ;
import { registerSingleProviderPlugin } from "../../test/helpers/plugins/plugin-registration.js" ;
import {
createProviderDynamicModelContext,
runSingleProviderCatalog,
} from "../test-support/provider-model-test-helpers.js" ;
import fireworksPlugin from "./index.js" ;
import {
FIREWORKS_BASE_URL,
FIREWORKS_DEFAULT_CONTEXT_WINDOW,
FIREWORKS_DEFAULT_MAX_TOKENS,
FIREWORKS_DEFAULT_MODEL_ID,
FIREWORKS_K2_6_CONTEXT_WINDOW,
FIREWORKS_K2_6_MAX_TOKENS,
FIREWORKS_K2_6_MODEL_ID,
} from "./provider-catalog.js" ;
function createFireworksDefaultRuntimeModel(params: { reasoning: boolean }): ProviderRuntimeModel {
return {
id: FIREWORKS_DEFAULT_MODEL_ID,
name: FIREWORKS_DEFAULT_MODEL_ID,
provider: "fireworks" ,
api: "openai-completions" ,
baseUrl: FIREWORKS_BASE_URL,
reasoning: params.reasoning,
input: ["text" , "image" ],
cost: { input: 0 , output: 0 , cacheRead: 0 , cacheWrite: 0 },
contextWindow: FIREWORKS_DEFAULT_CONTEXT_WINDOW,
maxTokens: FIREWORKS_DEFAULT_MAX_TOKENS,
};
}
describe("fireworks provider plugin" , () => {
it("registers Fireworks with api-key auth wizard metadata" , async () => {
const provider = await registerSingleProviderPlugin(fireworksPlugin);
const resolved = resolveProviderPluginChoice({
providers: [provider],
choice: "fireworks-api-key" ,
});
expect(provider.id).toBe("fireworks" );
expect(provider.label).toBe("Fireworks" );
expect(provider.aliases).toEqual(["fireworks-ai" ]);
expect(provider.envVars).toEqual(["FIREWORKS_API_KEY" ]);
expect(provider.auth).toHaveLength(1 );
expect(resolved?.provider.id).toBe("fireworks" );
expect(resolved?.method.id).toBe("api-key" );
});
it("builds the Fireworks catalog" , async () => {
const provider = await registerSingleProviderPlugin(fireworksPlugin);
const catalogProvider = await runSingleProviderCatalog(provider);
expect(catalogProvider.api).toBe("openai-completions" );
expect(catalogProvider.baseUrl).toBe(FIREWORKS_BASE_URL);
expect(catalogProvider.models?.map((model) => model.id)).toEqual([
FIREWORKS_K2_6_MODEL_ID,
FIREWORKS_DEFAULT_MODEL_ID,
]);
expect(catalogProvider.models?.[0 ]).toMatchObject({
reasoning: false ,
input: ["text" , "image" ],
contextWindow: FIREWORKS_K2_6_CONTEXT_WINDOW,
maxTokens: FIREWORKS_K2_6_MAX_TOKENS,
});
expect(catalogProvider.models?.[1 ]).toMatchObject({
reasoning: false ,
input: ["text" , "image" ],
contextWindow: FIREWORKS_DEFAULT_CONTEXT_WINDOW,
maxTokens: FIREWORKS_DEFAULT_MAX_TOKENS,
});
});
it("resolves forward-compat Fireworks model ids from the default template" , async () => {
const provider = await registerSingleProviderPlugin(fireworksPlugin);
const resolved = provider.resolveDynamicModel?.(
createProviderDynamicModelContext({
provider: "fireworks" ,
modelId: "accounts/fireworks/models/qwen3.6-plus" ,
models: [createFireworksDefaultRuntimeModel({ reasoning: true })],
}),
);
expect(resolved).toMatchObject({
provider: "fireworks" ,
id: "accounts/fireworks/models/qwen3.6-plus" ,
api: "openai-completions" ,
baseUrl: FIREWORKS_BASE_URL,
reasoning: true ,
});
});
it("disables reasoning metadata for Fireworks Kimi dynamic models" , async () => {
const provider = await registerSingleProviderPlugin(fireworksPlugin);
const resolved = provider.resolveDynamicModel?.(
createProviderDynamicModelContext({
provider: "fireworks" ,
modelId: "accounts/fireworks/models/kimi-k2p5" ,
models: [createFireworksDefaultRuntimeModel({ reasoning: false })],
}),
);
expect(resolved).toMatchObject({
provider: "fireworks" ,
id: "accounts/fireworks/models/kimi-k2p5" ,
reasoning: false ,
});
});
it("disables reasoning metadata for Fireworks Kimi k2.5 aliases" , async () => {
const provider = await registerSingleProviderPlugin(fireworksPlugin);
const resolved = provider.resolveDynamicModel?.(
createProviderDynamicModelContext({
provider: "fireworks" ,
modelId: "accounts/fireworks/routers/kimi-k2.5-turbo" ,
models: [createFireworksDefaultRuntimeModel({ reasoning: false })],
}),
);
expect(resolved).toMatchObject({
provider: "fireworks" ,
id: "accounts/fireworks/routers/kimi-k2.5-turbo" ,
reasoning: false ,
});
});
it("disables reasoning metadata for Fireworks Kimi k2.6 dynamic models" , async () => {
const provider = await registerSingleProviderPlugin(fireworksPlugin);
const resolved = provider.resolveDynamicModel?.(
createProviderDynamicModelContext({
provider: "fireworks" ,
modelId: "accounts/fireworks/models/kimi-k2p6" ,
models: [createFireworksDefaultRuntimeModel({ reasoning: false })],
}),
);
expect(resolved).toMatchObject({
provider: "fireworks" ,
id: "accounts/fireworks/models/kimi-k2p6" ,
reasoning: false ,
});
});
});
Messung V0.5 in Prozent C=100 H=100 G=100
¤ Dauer der Verarbeitung: 0.12 Sekunden
(vorverarbeitet am 2026-06-06)
¤
*© Formatika GbR, Deutschland