From 7df763b04d3819ce26dcd2e2ebf8ba121484f940 Mon Sep 17 00:00:00 2001 From: Vincent Koc Date: Sat, 4 Apr 2026 11:42:38 +0900 Subject: [PATCH] refactor(providers): share xai compat helper --- extensions/venice/index.ts | 13 ++----------- extensions/xai/api.ts | 15 +++++---------- src/plugin-sdk/provider-tools.ts | 8 ++++++++ 3 files changed, 15 insertions(+), 21 deletions(-) diff --git a/extensions/venice/index.ts b/extensions/venice/index.ts index eac4baa9f0a..c4db8bc3cc0 100644 --- a/extensions/venice/index.ts +++ b/extensions/venice/index.ts @@ -1,7 +1,5 @@ import { defineSingleProviderPluginEntry } from "openclaw/plugin-sdk/provider-entry"; -import { applyModelCompatPatch } from "openclaw/plugin-sdk/provider-model-shared"; -import type { ModelCompatConfig } from "openclaw/plugin-sdk/provider-model-shared"; -import { resolveXaiModelCompatPatch } from "openclaw/plugin-sdk/provider-tools"; +import { applyXaiModelCompat } from "openclaw/plugin-sdk/provider-tools"; import { applyVeniceConfig, VENICE_DEFAULT_MODEL_REF } from "./onboard.js"; import { buildVeniceProvider } from "./provider-catalog.js"; @@ -11,13 +9,6 @@ function isXaiBackedVeniceModel(modelId: string): boolean { return modelId.trim().toLowerCase().includes("grok"); } -function applyXaiCompat(model: T): T { - return applyModelCompatPatch( - model as T & { compat?: ModelCompatConfig }, - resolveXaiModelCompatPatch(), - ) as T; -} - export default defineSingleProviderPluginEntry({ id: PROVIDER_ID, name: "Venice Provider", @@ -51,6 +42,6 @@ export default defineSingleProviderPluginEntry({ buildProvider: buildVeniceProvider, }, normalizeResolvedModel: ({ modelId, model }) => - isXaiBackedVeniceModel(modelId) ? applyXaiCompat(model) : undefined, + isXaiBackedVeniceModel(modelId) ? applyXaiModelCompat(model) : undefined, }, }); diff --git a/extensions/xai/api.ts b/extensions/xai/api.ts index 1266b18afab..1a0d9fe8bb9 100644 --- a/extensions/xai/api.ts +++ b/extensions/xai/api.ts @@ -1,12 +1,13 @@ import { - applyModelCompatPatch, getModelProviderHint, normalizeNativeXaiModelId, normalizeProviderId, resolveProviderEndpoint, } from "openclaw/plugin-sdk/provider-model-shared"; -import type { ModelCompatConfig } from "openclaw/plugin-sdk/provider-model-shared"; -import { resolveXaiModelCompatPatch } from "openclaw/plugin-sdk/provider-tools"; +import { + applyXaiModelCompat, + resolveXaiModelCompatPatch, +} from "openclaw/plugin-sdk/provider-tools"; export { buildXaiProvider } from "./provider-catalog.js"; export { applyXaiConfig, applyXaiProviderConfig } from "./onboard.js"; @@ -22,18 +23,12 @@ export { } from "./model-definitions.js"; export { isModernXaiModel, resolveXaiForwardCompatModel } from "./provider-models.js"; export { + applyXaiModelCompat, HTML_ENTITY_TOOL_CALL_ARGUMENTS_ENCODING, XAI_TOOL_SCHEMA_PROFILE, resolveXaiModelCompatPatch, } from "openclaw/plugin-sdk/provider-tools"; -export function applyXaiModelCompat(model: T): T { - return applyModelCompatPatch( - model as T & { compat?: ModelCompatConfig }, - resolveXaiModelCompatPatch(), - ) as T; -} - function isXaiNativeEndpoint(baseUrl: unknown): boolean { return ( typeof baseUrl === "string" && resolveProviderEndpoint(baseUrl).endpointClass === "xai-native" diff --git a/src/plugin-sdk/provider-tools.ts b/src/plugin-sdk/provider-tools.ts index 306d007d775..256f233bafc 100644 --- a/src/plugin-sdk/provider-tools.ts +++ b/src/plugin-sdk/provider-tools.ts @@ -3,6 +3,7 @@ import { GEMINI_UNSUPPORTED_SCHEMA_KEYWORDS, } from "../agents/schema/clean-for-gemini.js"; import type { ModelCompatConfig } from "../config/types.models.js"; +import { applyModelCompatPatch } from "../plugins/provider-model-compat.js"; import type { AnyAgentTool, ProviderNormalizeToolSchemasContext, @@ -79,6 +80,13 @@ export function resolveXaiModelCompatPatch(): ModelCompatConfig { }; } +export function applyXaiModelCompat(model: T): T { + return applyModelCompatPatch( + model as T & { compat?: ModelCompatConfig }, + resolveXaiModelCompatPatch(), + ) as T; +} + export function findUnsupportedSchemaKeywords( schema: unknown, path: string,