
























@@ -20,19 +20,21 @@ describe("arcee provider plugin", () => {
2020providers: [provider],
2121choice: "arceeai-api-key",
2222});
23-expect(directChoice).toMatchObject({
24-provider: { id: "arcee" },
25-method: { id: "arcee-platform" },
26-});
23+if (!directChoice) {
24+throw new Error("expected direct Arcee auth choice");
25+}
26+expect(directChoice.provider.id).toBe("arcee");
27+expect(directChoice.method.id).toBe("arcee-platform");
27282829const orChoice = resolveProviderPluginChoice({
2930providers: [provider],
3031choice: "arceeai-openrouter",
3132});
32-expect(orChoice).toMatchObject({
33-provider: { id: "arcee" },
34-method: { id: "openrouter" },
35-});
33+if (!orChoice) {
34+throw new Error("expected OpenRouter Arcee auth choice");
35+}
36+expect(orChoice.provider.id).toBe("arcee");
37+expect(orChoice.method.id).toBe("openrouter");
3638});
37393840it("stores the OpenRouter onboarding path under the OpenRouter auth profile", async () => {
@@ -58,14 +60,12 @@ describe("arcee provider plugin", () => {
5860toApiKeyCredential: () => null,
5961} as never);
606261-expect(config?.auth?.profiles?.["openrouter:default"]).toMatchObject({
62-provider: "openrouter",
63-mode: "api_key",
64-});
65-expect(config?.models?.providers?.arcee).toMatchObject({
66-baseUrl: "https://openrouter.ai/api/v1",
67-api: "openai-completions",
68-});
63+const openRouterProfile = config?.auth?.profiles?.["openrouter:default"];
64+expect(openRouterProfile?.provider).toBe("openrouter");
65+expect(openRouterProfile?.mode).toBe("api_key");
66+const arceeConfig = config?.models?.providers?.arcee;
67+expect(arceeConfig?.baseUrl).toBe("https://openrouter.ai/api/v1");
68+expect(arceeConfig?.api).toBe("openai-completions");
6969expect(config?.models?.providers?.arcee?.models?.map((model) => model.id)).toEqual([
7070"arcee/trinity-mini",
7171"arcee/trinity-large-preview",
@@ -94,12 +94,11 @@ describe("arcee provider plugin", () => {
9494"trinity-large-preview",
9595"trinity-large-thinking",
9696]);
97-expect(
98-catalogProvider.models?.find((model) => model.id === "trinity-large-thinking")?.compat,
99-).toMatchObject({
100-supportsTools: false,
101-supportsReasoningEffort: false,
102-});
97+const thinkingCompat = catalogProvider.models?.find(
98+(model) => model.id === "trinity-large-thinking",
99+)?.compat;
100+expect(thinkingCompat?.supportsTools).toBe(false);
101+expect(thinkingCompat?.supportsReasoningEffort).toBe(false);
103102});
104103105104it("builds the OpenRouter-backed Arcee AI model catalog", async () => {
@@ -120,31 +119,27 @@ describe("arcee provider plugin", () => {
120119"arcee/trinity-large-preview",
121120"arcee/trinity-large-thinking",
122121]);
123-expect(
124-catalogProvider.models?.find((model) => model.id === "arcee/trinity-large-thinking")?.compat,
125-).toMatchObject({
126-supportsTools: false,
127-supportsReasoningEffort: false,
128-});
122+const thinkingCompat = catalogProvider.models?.find(
123+(model) => model.id === "arcee/trinity-large-thinking",
124+)?.compat;
125+expect(thinkingCompat?.supportsTools).toBe(false);
126+expect(thinkingCompat?.supportsReasoningEffort).toBe(false);
129127});
130128131129it("normalizes Arcee OpenRouter models to vendor-prefixed runtime ids", async () => {
132130const provider = await registerSingleProviderPlugin(arceePlugin);
133131134-expect(
135-provider.normalizeResolvedModel?.({
136-modelId: "arcee/trinity-large-thinking",
137-model: {
138-provider: "arcee",
139-id: "trinity-large-thinking",
140-name: "Trinity Large Thinking",
141-api: "openai-completions",
142-baseUrl: "https://openrouter.ai/api/v1",
143-},
144-} as never),
145-).toMatchObject({
146-id: "arcee/trinity-large-thinking",
147-});
132+const openRouterModel = provider.normalizeResolvedModel?.({
133+modelId: "arcee/trinity-large-thinking",
134+model: {
135+provider: "arcee",
136+id: "trinity-large-thinking",
137+name: "Trinity Large Thinking",
138+api: "openai-completions",
139+baseUrl: "https://openrouter.ai/api/v1",
140+},
141+} as never);
142+expect(openRouterModel?.id).toBe("arcee/trinity-large-thinking");
148143149144expect(
150145provider.normalizeResolvedModel?.({
@@ -163,34 +158,28 @@ describe("arcee provider plugin", () => {
163158it("canonicalizes stale OpenRouter /v1 config and transport metadata", async () => {
164159const provider = await registerSingleProviderPlugin(arceePlugin);
165160166-expect(
167-provider.normalizeConfig?.({
168-provider: "arcee",
169-providerConfig: {
170-api: "openai-completions",
171-baseUrl: "https://openrouter.ai/v1/",
172-models: [],
173-},
174-} as never),
175-).toMatchObject({
176-baseUrl: "https://openrouter.ai/api/v1",
177-});
161+const normalizedConfig = provider.normalizeConfig?.({
162+provider: "arcee",
163+providerConfig: {
164+api: "openai-completions",
165+baseUrl: "https://openrouter.ai/v1/",
166+models: [],
167+},
168+} as never);
169+expect(normalizedConfig?.baseUrl).toBe("https://openrouter.ai/api/v1");
178170179-expect(
180-provider.normalizeResolvedModel?.({
181-modelId: "arcee/trinity-large-thinking",
182-model: {
183-provider: "arcee",
184-id: "trinity-large-thinking",
185-name: "Trinity Large Thinking",
186-api: "openai-completions",
187-baseUrl: "https://openrouter.ai/v1",
188-},
189-} as never),
190-).toMatchObject({
191-id: "arcee/trinity-large-thinking",
192-baseUrl: "https://openrouter.ai/api/v1",
193-});
171+const normalizedModel = provider.normalizeResolvedModel?.({
172+modelId: "arcee/trinity-large-thinking",
173+model: {
174+provider: "arcee",
175+id: "trinity-large-thinking",
176+name: "Trinity Large Thinking",
177+api: "openai-completions",
178+baseUrl: "https://openrouter.ai/v1",
179+},
180+} as never);
181+expect(normalizedModel?.id).toBe("arcee/trinity-large-thinking");
182+expect(normalizedModel?.baseUrl).toBe("https://openrouter.ai/api/v1");
194183195184expect(
196185provider.normalizeTransport?.({
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。