fix(clawsweeper): address review for automerge-openclaw-openclaw-73388 (2)

This commit is contained in:
clawsweeper
2026-05-02 22:15:03 +00:00
parent be1d51422c
commit 84191c0d67
3 changed files with 96 additions and 24 deletions

View File

@@ -295,34 +295,66 @@ describe("arcee provider plugin", () => {
],
});
const trinityRuntimeModel = {
name: "Trinity Large Thinking",
api: "openai-completions",
reasoning: true,
input: ["text"],
contextWindow: 262144,
maxTokens: 80000,
cost: {
input: 0.25,
output: 0.9,
cacheRead: 0.25,
cacheWrite: 0.25,
},
compat: {
supportsReasoningEffort: false,
},
};
const trinityCompat = {
supportsReasoningEffort: false,
supportsTools: false,
};
expect(
provider.contributeResolvedModelCompat?.({
provider: "arcee",
modelId: "arcee/trinity-large-thinking",
model: {
...trinityRuntimeModel,
provider: "arcee",
id: "arcee/trinity-large-thinking",
name: "Trinity Large Thinking",
api: "openai-completions",
baseUrl: "https://openrouter.ai/api/v1",
reasoning: true,
input: ["text"],
contextWindow: 262144,
maxTokens: 80000,
cost: {
input: 0.25,
output: 0.9,
cacheRead: 0.25,
cacheWrite: 0.25,
},
compat: {
supportsReasoningEffort: false,
},
},
} as never),
).toEqual({
supportsReasoningEffort: false,
supportsTools: false,
});
).toEqual(trinityCompat);
expect(
provider.contributeResolvedModelCompat?.({
provider: "arcee",
modelId: "trinity-large-thinking",
model: {
...trinityRuntimeModel,
provider: "arcee",
id: "trinity-large-thinking",
baseUrl: "https://api.arcee.ai/api/v1",
},
} as never),
).toEqual(trinityCompat);
expect(
provider.contributeResolvedModelCompat?.({
provider: "openrouter",
modelId: "trinity-large-thinking",
model: {
...trinityRuntimeModel,
provider: "openrouter",
id: "trinity-large-thinking",
baseUrl: "https://openrouter.ai/api/v1",
},
} as never),
).toBeUndefined();
});
});

View File

@@ -7,7 +7,7 @@ import {
import { OPENAI_COMPATIBLE_REPLAY_HOOKS } from "openclaw/plugin-sdk/provider-model-shared";
import {
ARCEE_TRINITY_LARGE_THINKING_COMPAT,
isArceeTrinityLargeThinkingModelId,
shouldContributeArceeTrinityLargeThinkingCompat,
} from "./models.js";
import {
applyArceeConfig,
@@ -127,8 +127,8 @@ export default definePluginEntry({
}),
normalizeConfig: ({ providerConfig }) => normalizeArceeProviderConfig(providerConfig),
normalizeResolvedModel: ({ model }) => normalizeArceeResolvedModel(model),
contributeResolvedModelCompat: ({ modelId, model }) =>
isArceeTrinityLargeThinkingModelId(model.id) || isArceeTrinityLargeThinkingModelId(modelId)
contributeResolvedModelCompat: (ctx) =>
shouldContributeArceeTrinityLargeThinkingCompat(ctx)
? ARCEE_TRINITY_LARGE_THINKING_COMPAT
: undefined,
normalizeTransport: ({ api, baseUrl }) => {

View File

@@ -9,9 +9,49 @@ export const ARCEE_TRINITY_LARGE_THINKING_COMPAT = {
supportsTools: false,
} as const satisfies ModelCompatConfig;
const ARCEE_PROVIDER_ID = "arcee";
const ARCEE_TRINITY_LARGE_THINKING_ID = "trinity-large-thinking";
const ARCEE_TRINITY_LARGE_THINKING_REF = `${ARCEE_PROVIDER_ID}/${ARCEE_TRINITY_LARGE_THINKING_ID}`;
function normalizeModelId(modelId: string): string {
return modelId.trim().toLowerCase();
}
function normalizeBaseUrl(baseUrl: unknown): string {
return typeof baseUrl === "string" ? baseUrl.trim().replace(/\/+$/, "") : "";
}
export function isArceeTrinityLargeThinkingModelId(modelId: string): boolean {
const normalized = modelId.trim().toLowerCase();
return normalized === "trinity-large-thinking" || normalized === "arcee/trinity-large-thinking";
const normalized = normalizeModelId(modelId);
return (
normalized === ARCEE_TRINITY_LARGE_THINKING_ID ||
normalized === ARCEE_TRINITY_LARGE_THINKING_REF
);
}
export function shouldContributeArceeTrinityLargeThinkingCompat(params: {
provider?: unknown;
modelId: string;
model: { id: string; provider?: unknown; baseUrl?: unknown };
}): boolean {
const modelId = normalizeModelId(params.modelId);
const resolvedId = normalizeModelId(params.model.id);
if (
modelId === ARCEE_TRINITY_LARGE_THINKING_REF ||
resolvedId === ARCEE_TRINITY_LARGE_THINKING_REF
) {
return true;
}
if (
modelId !== ARCEE_TRINITY_LARGE_THINKING_ID &&
resolvedId !== ARCEE_TRINITY_LARGE_THINKING_ID
) {
return false;
}
if (params.provider === ARCEE_PROVIDER_ID || params.model.provider === ARCEE_PROVIDER_ID) {
return true;
}
return normalizeBaseUrl(params.model.baseUrl) === normalizeBaseUrl(ARCEE_BASE_URL);
}
export const ARCEE_MODEL_CATALOG: ModelDefinitionConfig[] = [