mirror of
https://github.com/openclaw/openclaw.git
synced 2026-04-24 07:31:44 +00:00
43 lines
1.6 KiB
TypeScript
43 lines
1.6 KiB
TypeScript
import { getApiProvider, type Api, type Model } from "@mariozechner/pi-ai";
|
|
import type { OpenClawConfig } from "../config/config.js";
|
|
import { createAnthropicVertexStreamFnForModel } from "./anthropic-vertex-stream.js";
|
|
import { ensureCustomApiRegistered } from "./custom-api-registry.js";
|
|
import { registerProviderStreamForModel } from "./provider-stream.js";
|
|
import {
|
|
buildTransportAwareSimpleStreamFn,
|
|
prepareTransportAwareSimpleModel,
|
|
} from "./provider-transport-stream.js";
|
|
|
|
function resolveAnthropicVertexSimpleApi(baseUrl?: string): Api {
|
|
const suffix = baseUrl?.trim() ? encodeURIComponent(baseUrl.trim()) : "default";
|
|
return `openclaw-anthropic-vertex-simple:${suffix}`;
|
|
}
|
|
|
|
export function prepareModelForSimpleCompletion<TApi extends Api>(params: {
|
|
model: Model<TApi>;
|
|
cfg?: OpenClawConfig;
|
|
}): Model<Api> {
|
|
const { model, cfg } = params;
|
|
// Only provider-owned custom APIs need runtime stream registration here.
|
|
if (!getApiProvider(model.api) && registerProviderStreamForModel({ model, cfg })) {
|
|
return model;
|
|
}
|
|
|
|
const transportAwareModel = prepareTransportAwareSimpleModel(model);
|
|
if (transportAwareModel !== model) {
|
|
const streamFn = buildTransportAwareSimpleStreamFn(model);
|
|
if (streamFn) {
|
|
ensureCustomApiRegistered(transportAwareModel.api, streamFn);
|
|
return transportAwareModel;
|
|
}
|
|
}
|
|
|
|
if (model.provider === "anthropic-vertex") {
|
|
const api = resolveAnthropicVertexSimpleApi(model.baseUrl);
|
|
ensureCustomApiRegistered(api, createAnthropicVertexStreamFnForModel(model));
|
|
return { ...model, api };
|
|
}
|
|
|
|
return model;
|
|
}
|