mirror of
https://github.com/openclaw/openclaw.git
synced 2026-03-24 08:21:39 +00:00
refactor: split remaining monitor runtime helpers
This commit is contained in:
@@ -80,10 +80,8 @@ vi.mock("../plugins/provider-runtime.js", async (importOriginal) => {
|
||||
const thinkingLevel = skipReasoningInjection ? undefined : params.context.thinkingLevel;
|
||||
return createOpenRouterSystemCacheWrapper(createOpenRouterWrapper(streamFn, thinkingLevel));
|
||||
},
|
||||
resolveProviderCapabilitiesWithPlugin: (params: {
|
||||
provider: string;
|
||||
workspaceDir?: string;
|
||||
}) => resolveProviderCapabilitiesWithPluginMock(params),
|
||||
resolveProviderCapabilitiesWithPlugin: (params: { provider: string; workspaceDir?: string }) =>
|
||||
resolveProviderCapabilitiesWithPluginMock(params),
|
||||
};
|
||||
});
|
||||
|
||||
|
||||
@@ -89,11 +89,14 @@ function hasOpenAiAnthropicToolPayloadCompatFlag(model: { compat?: unknown }): b
|
||||
);
|
||||
}
|
||||
|
||||
function requiresAnthropicToolPayloadCompatibilityForModel(model: {
|
||||
api?: unknown;
|
||||
provider?: unknown;
|
||||
compat?: unknown;
|
||||
}, options?: AnthropicToolPayloadResolverOptions): boolean {
|
||||
function requiresAnthropicToolPayloadCompatibilityForModel(
|
||||
model: {
|
||||
api?: unknown;
|
||||
provider?: unknown;
|
||||
compat?: unknown;
|
||||
},
|
||||
options?: AnthropicToolPayloadResolverOptions,
|
||||
): boolean {
|
||||
if (model.api !== "anthropic-messages") {
|
||||
return false;
|
||||
}
|
||||
@@ -107,10 +110,13 @@ function requiresAnthropicToolPayloadCompatibilityForModel(model: {
|
||||
return hasOpenAiAnthropicToolPayloadCompatFlag(model);
|
||||
}
|
||||
|
||||
function usesOpenAiFunctionAnthropicToolSchemaForModel(model: {
|
||||
provider?: unknown;
|
||||
compat?: unknown;
|
||||
}, options?: AnthropicToolPayloadResolverOptions): boolean {
|
||||
function usesOpenAiFunctionAnthropicToolSchemaForModel(
|
||||
model: {
|
||||
provider?: unknown;
|
||||
compat?: unknown;
|
||||
},
|
||||
options?: AnthropicToolPayloadResolverOptions,
|
||||
): boolean {
|
||||
if (
|
||||
typeof model.provider === "string" &&
|
||||
usesOpenAiFunctionAnthropicToolSchema(model.provider, options)
|
||||
@@ -120,10 +126,13 @@ function usesOpenAiFunctionAnthropicToolSchemaForModel(model: {
|
||||
return hasOpenAiAnthropicToolPayloadCompatFlag(model);
|
||||
}
|
||||
|
||||
function usesOpenAiStringModeAnthropicToolChoiceForModel(model: {
|
||||
provider?: unknown;
|
||||
compat?: unknown;
|
||||
}, options?: AnthropicToolPayloadResolverOptions): boolean {
|
||||
function usesOpenAiStringModeAnthropicToolChoiceForModel(
|
||||
model: {
|
||||
provider?: unknown;
|
||||
compat?: unknown;
|
||||
},
|
||||
options?: AnthropicToolPayloadResolverOptions,
|
||||
): boolean {
|
||||
if (
|
||||
typeof model.provider === "string" &&
|
||||
usesOpenAiStringModeAnthropicToolChoice(model.provider, options)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import type { OpenClawConfig } from "../config/config.js";
|
||||
import { resolveProviderCapabilitiesWithPlugin } from "../plugins/provider-runtime.js";
|
||||
import { normalizeProviderId } from "./model-selection.js";
|
||||
import type { OpenClawConfig } from "../config/config.js";
|
||||
|
||||
export type ProviderCapabilities = {
|
||||
anthropicToolSchemaMode: "native" | "openai-functions";
|
||||
@@ -125,8 +125,7 @@ export function usesOpenAiStringModeAnthropicToolChoice(
|
||||
options?: ProviderCapabilityLookupOptions,
|
||||
): boolean {
|
||||
return (
|
||||
resolveProviderCapabilities(provider, options).anthropicToolChoiceMode ===
|
||||
"openai-string-modes"
|
||||
resolveProviderCapabilities(provider, options).anthropicToolChoiceMode === "openai-string-modes"
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -56,6 +56,10 @@ function normalizeTrimmedSet(
|
||||
.filter((id): id is string => Boolean(id));
|
||||
}
|
||||
|
||||
function objectValues<T>(value: Record<string, T> | undefined): T[] {
|
||||
return Object.values(value ?? {});
|
||||
}
|
||||
|
||||
export async function listSlackDirectoryPeersFromConfig(
|
||||
params: DirectoryConfigParams,
|
||||
): Promise<ChannelDirectoryEntry[]> {
|
||||
@@ -123,9 +127,9 @@ export async function listDiscordDirectoryPeersFromConfig(
|
||||
account.config.allowFrom ?? account.config.dm?.allowFrom,
|
||||
account.config.dms,
|
||||
);
|
||||
for (const guild of Object.values(account.config.guilds ?? {})) {
|
||||
for (const guild of objectValues(account.config.guilds)) {
|
||||
addTrimmedEntries(ids, guild.users ?? []);
|
||||
for (const channel of Object.values(guild.channels ?? {})) {
|
||||
for (const channel of objectValues(guild.channels)) {
|
||||
addTrimmedEntries(ids, channel.users ?? []);
|
||||
}
|
||||
}
|
||||
@@ -153,7 +157,7 @@ export async function listDiscordDirectoryGroupsFromConfig(
|
||||
return [];
|
||||
}
|
||||
const ids = new Set<string>();
|
||||
for (const guild of Object.values(account.config.guilds ?? {})) {
|
||||
for (const guild of objectValues(account.config.guilds)) {
|
||||
addTrimmedEntries(ids, Object.keys(guild.channels ?? {}));
|
||||
}
|
||||
|
||||
|
||||
@@ -99,7 +99,8 @@ function readExportStatements(path: string): string[] {
|
||||
|
||||
return sourceFile.statements.flatMap((statement) => {
|
||||
if (!ts.isExportDeclaration(statement)) {
|
||||
if (!statement.modifiers?.some((modifier) => modifier.kind === ts.SyntaxKind.ExportKeyword)) {
|
||||
const modifiers = ts.canHaveModifiers(statement) ? ts.getModifiers(statement) : undefined;
|
||||
if (!modifiers?.some((modifier) => modifier.kind === ts.SyntaxKind.ExportKeyword)) {
|
||||
return [];
|
||||
}
|
||||
return [statement.getText(sourceFile).replaceAll(/\s+/g, " ").trim()];
|
||||
|
||||
Reference in New Issue
Block a user