refactor(providers): share xai compat helper

This commit is contained in:
Vincent Koc 2026-04-04 11:42:38 +09:00
parent 6d33c67c01
commit 7df763b04d
3 changed files with 15 additions and 21 deletions

View File

@ -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<T extends { compat?: unknown }>(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,
},
});

View File

@ -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<T extends { compat?: unknown }>(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"

View File

@ -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<T extends { compat?: unknown }>(model: T): T {
return applyModelCompatPatch(
model as T & { compat?: ModelCompatConfig },
resolveXaiModelCompatPatch(),
) as T;
}
export function findUnsupportedSchemaKeywords(
schema: unknown,
path: string,