mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-08 16:48:26 +00:00
refactor: deduplicate shared helpers and test setup
This commit is contained in:
@@ -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(
|
||||
{
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user