mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-06 07:00:43 +00:00
43 lines
1.3 KiB
TypeScript
43 lines
1.3 KiB
TypeScript
import type { ProviderStreamOptions } from "@mariozechner/pi-ai";
|
|
import {
|
|
describeImageWithModelPayloadTransform,
|
|
describeImagesWithModelPayloadTransform,
|
|
type MediaUnderstandingProvider,
|
|
} from "openclaw/plugin-sdk/media-understanding";
|
|
|
|
function isRecord(value: unknown): value is Record<string, unknown> {
|
|
return Boolean(value) && typeof value === "object" && !Array.isArray(value);
|
|
}
|
|
|
|
export function stripOpencodeDisabledResponsesReasoningPayload(payload: unknown): void {
|
|
if (!isRecord(payload)) {
|
|
return;
|
|
}
|
|
const reasoning = payload.reasoning;
|
|
if (reasoning === "none") {
|
|
delete payload.reasoning;
|
|
return;
|
|
}
|
|
if (!isRecord(reasoning) || reasoning.effort !== "none") {
|
|
return;
|
|
}
|
|
delete payload.reasoning;
|
|
}
|
|
|
|
const stripDisabledResponsesReasoning: ProviderStreamOptions["onPayload"] = (payload) => {
|
|
stripOpencodeDisabledResponsesReasoningPayload(payload);
|
|
return undefined;
|
|
};
|
|
|
|
export const opencodeMediaUnderstandingProvider: MediaUnderstandingProvider = {
|
|
id: "opencode",
|
|
capabilities: ["image"],
|
|
defaultModels: {
|
|
image: "gpt-5-nano",
|
|
},
|
|
describeImage: (request) =>
|
|
describeImageWithModelPayloadTransform(request, stripDisabledResponsesReasoning),
|
|
describeImages: (request) =>
|
|
describeImagesWithModelPayloadTransform(request, stripDisabledResponsesReasoning),
|
|
};
|