refactor: deduplicate shared helpers and test setup

This commit is contained in:
Peter Steinberger
2026-02-23 20:40:38 +00:00
parent 1f5e6444ee
commit 75423a00d6
33 changed files with 999 additions and 1112 deletions

View File

@@ -160,6 +160,24 @@ async function createAudioCtx(params?: {
} satisfies MsgContext;
}
async function setupAudioAutoDetectCase(stdout: string): Promise<{
ctx: MsgContext;
cfg: OpenClawConfig;
}> {
const ctx = await createAudioCtx({
fileName: "sample.wav",
mediaType: "audio/wav",
content: "audio",
});
const cfg: OpenClawConfig = { tools: { media: { audio: {} } } };
const execModule = await import("../process/exec.js");
vi.mocked(execModule.runExec).mockResolvedValueOnce({
stdout,
stderr: "",
});
return { ctx, cfg };
}
async function applyWithDisabledMedia(params: {
body: string;
mediaPath: string;
@@ -395,19 +413,9 @@ describe("applyMediaUnderstanding", () => {
await fs.writeFile(path.join(modelDir, "decoder.onnx"), "a");
await fs.writeFile(path.join(modelDir, "joiner.onnx"), "a");
const ctx = await createAudioCtx({
fileName: "sample.wav",
mediaType: "audio/wav",
content: "audio",
});
const cfg: OpenClawConfig = { tools: { media: { audio: {} } } };
const { ctx, cfg } = await setupAudioAutoDetectCase('{"text":"sherpa ok"}');
const execModule = await import("../process/exec.js");
const mockedRunExec = vi.mocked(execModule.runExec);
mockedRunExec.mockResolvedValueOnce({
stdout: '{"text":"sherpa ok"}',
stderr: "",
});
await withMediaAutoDetectEnv(
{
@@ -435,19 +443,9 @@ describe("applyMediaUnderstanding", () => {
const modelPath = path.join(modelDir, "tiny.bin");
await fs.writeFile(modelPath, "model");
const ctx = await createAudioCtx({
fileName: "sample.wav",
mediaType: "audio/wav",
content: "audio",
});
const cfg: OpenClawConfig = { tools: { media: { audio: {} } } };
const { ctx, cfg } = await setupAudioAutoDetectCase("whisper cpp ok\n");
const execModule = await import("../process/exec.js");
const mockedRunExec = vi.mocked(execModule.runExec);
mockedRunExec.mockResolvedValueOnce({
stdout: "whisper cpp ok\n",
stderr: "",
});
await withMediaAutoDetectEnv(
{

View File

@@ -320,6 +320,29 @@ async function resolveProviderExecutionAuth(params: {
};
}
async function resolveProviderExecutionContext(params: {
providerId: string;
cfg: OpenClawConfig;
entry: MediaUnderstandingModelConfig;
config?: MediaUnderstandingConfig;
agentDir?: string;
}) {
const { apiKeys, providerConfig } = await resolveProviderExecutionAuth({
providerId: params.providerId,
cfg: params.cfg,
entry: params.entry,
agentDir: params.agentDir,
});
const baseUrl = params.entry.baseUrl ?? params.config?.baseUrl ?? providerConfig?.baseUrl;
const mergedHeaders = {
...providerConfig?.headers,
...params.config?.headers,
...params.entry.headers,
};
const headers = Object.keys(mergedHeaders).length > 0 ? mergedHeaders : undefined;
return { apiKeys, baseUrl, headers };
}
export function formatDecisionSummary(decision: MediaUnderstandingDecision): string {
const total = decision.attachments.length;
const success = decision.attachments.filter(
@@ -428,19 +451,13 @@ export async function runProviderEntry(params: {
maxBytes,
timeoutMs,
});
const { apiKeys, providerConfig } = await resolveProviderExecutionAuth({
const { apiKeys, baseUrl, headers } = await resolveProviderExecutionContext({
providerId,
cfg,
entry,
config: params.config,
agentDir: params.agentDir,
});
const baseUrl = entry.baseUrl ?? params.config?.baseUrl ?? providerConfig?.baseUrl;
const mergedHeaders = {
...providerConfig?.headers,
...params.config?.headers,
...entry.headers,
};
const headers = Object.keys(mergedHeaders).length > 0 ? mergedHeaders : undefined;
const providerQuery = resolveProviderQuery({
providerId,
config: params.config,
@@ -491,19 +508,13 @@ export async function runProviderEntry(params: {
`Video attachment ${params.attachmentIndex + 1} base64 payload ${estimatedBase64Bytes} exceeds ${maxBase64Bytes}`,
);
}
const { apiKeys, providerConfig } = await resolveProviderExecutionAuth({
const { apiKeys, baseUrl, headers } = await resolveProviderExecutionContext({
providerId,
cfg,
entry,
config: params.config,
agentDir: params.agentDir,
});
const baseUrl = entry.baseUrl ?? params.config?.baseUrl ?? providerConfig?.baseUrl;
const mergedHeaders = {
...providerConfig?.headers,
...params.config?.headers,
...entry.headers,
};
const headers = Object.keys(mergedHeaders).length > 0 ? mergedHeaders : undefined;
const result = await executeWithApiKeyRotation({
provider: providerId,
apiKeys,