feat: pluginize cli inference backends

This commit is contained in:
Peter Steinberger
2026-03-26 15:09:01 +00:00
parent 24dd7aec90
commit a4a00aa1da
49 changed files with 657 additions and 248 deletions

View File

@@ -0,0 +1,35 @@
import type { CliBackendPlugin } from "openclaw/plugin-sdk/cli-backend";
import {
CLI_FRESH_WATCHDOG_DEFAULTS,
CLI_RESUME_WATCHDOG_DEFAULTS,
} from "openclaw/plugin-sdk/cli-backend";
const GEMINI_MODEL_ALIASES: Record<string, string> = {
pro: "gemini-3.1-pro-preview",
flash: "gemini-3.1-flash-preview",
"flash-lite": "gemini-3.1-flash-lite-preview",
};
export function buildGoogleGeminiCliBackend(): CliBackendPlugin {
return {
id: "google-gemini-cli",
config: {
command: "gemini",
args: ["--prompt", "--output-format", "json"],
resumeArgs: ["--resume", "{sessionId}", "--prompt", "--output-format", "json"],
output: "json",
input: "arg",
modelArg: "--model",
modelAliases: GEMINI_MODEL_ALIASES,
sessionMode: "existing",
sessionIdFields: ["session_id", "sessionId"],
reliability: {
watchdog: {
fresh: { ...CLI_FRESH_WATCHDOG_DEFAULTS },
resume: { ...CLI_RESUME_WATCHDOG_DEFAULTS },
},
},
serialize: true,
},
};
}

View File

@@ -5,6 +5,7 @@ import {
applyGoogleGeminiModelDefault,
} from "openclaw/plugin-sdk/provider-models";
import { createGoogleThinkingPayloadWrapper } from "openclaw/plugin-sdk/provider-stream";
import { buildGoogleGeminiCliBackend } from "./cli-backend.js";
import { registerGoogleGeminiCliProvider } from "./gemini-cli-provider.js";
import { buildGoogleImageGenerationProvider } from "./image-generation-provider.js";
import { googleMediaUnderstandingProvider } from "./media-understanding-provider.js";
@@ -48,6 +49,7 @@ export default definePluginEntry({
wrapStreamFn: (ctx) => createGoogleThinkingPayloadWrapper(ctx.streamFn, ctx.thinkingLevel),
isModernModelRef: ({ modelId }) => isModernGoogleModel(modelId),
});
api.registerCliBackend(buildGoogleGeminiCliBackend());
registerGoogleGeminiCliProvider(api);
api.registerImageGenerationProvider(buildGoogleImageGenerationProvider());
api.registerMediaUnderstandingProvider(googleMediaUnderstandingProvider);