Files
openclaw/extensions/deepinfra/embedding-adapter.ts
Jason (Json) 62baf451c1 fix(deepinfra): remove deprecated embedding provider warning (#114727)
* fix(deepinfra): migrate embedding provider registration

* fix(deepinfra): preserve embedding index identity
2026-07-27 14:53:34 -06:00

86 lines
2.8 KiB
TypeScript

// Deepinfra plugin module adapts its text embedding runtime to the generic provider contract.
import type {
EmbeddingInput,
EmbeddingProvider,
EmbeddingProviderAdapter,
EmbeddingProviderCreateOptions,
} from "openclaw/plugin-sdk/embedding-providers";
import type {
MemoryEmbeddingProvider,
MemoryEmbeddingProviderCreateOptions,
} from "openclaw/plugin-sdk/memory-core-host-engine-embeddings";
import {
createDeepInfraEmbeddingProvider,
DEFAULT_DEEPINFRA_EMBEDDING_MODEL,
} from "./embedding-provider.js";
import type { DeepInfraSurfaceModel } from "./provider-models.js";
function textFromEmbeddingInput(input: EmbeddingInput): string {
return typeof input === "string" ? input : input.text;
}
function adaptMemoryEmbeddingProvider(provider: MemoryEmbeddingProvider): EmbeddingProvider {
return {
id: provider.id,
model: provider.model,
...(typeof provider.maxInputTokens === "number"
? { maxInputTokens: provider.maxInputTokens }
: {}),
embed: async (input, options) =>
await provider.embedQuery(textFromEmbeddingInput(input), { signal: options?.signal }),
embedBatch: async (inputs, options) =>
await provider.embedBatch(inputs.map(textFromEmbeddingInput), { signal: options?.signal }),
...(provider.close ? { close: async () => await provider.close?.() } : {}),
};
}
function buildMemoryCreateOptions(
options: EmbeddingProviderCreateOptions,
): MemoryEmbeddingProviderCreateOptions {
return {
config: options.config,
agentDir: options.agentDir,
provider: "deepinfra",
fallback: "none",
remote: options.remote,
model: options.model,
inputType: options.inputType,
queryInputType: options.queryInputType,
documentInputType: options.documentInputType,
outputDimensionality: options.dimensions,
taskType: options.taskType as MemoryEmbeddingProviderCreateOptions["taskType"],
};
}
// First entry of embedModels becomes the default embedding model.
export function buildDeepInfraEmbeddingAdapter(options?: {
embedModels?: readonly DeepInfraSurfaceModel[];
}): EmbeddingProviderAdapter {
const defaultModel = options?.embedModels?.[0]?.id ?? DEFAULT_DEEPINFRA_EMBEDDING_MODEL;
return {
id: "deepinfra",
defaultModel,
transport: "remote",
authProviderId: "deepinfra",
create: async (createOptions) => {
const { provider, client } = await createDeepInfraEmbeddingProvider({
...buildMemoryCreateOptions(createOptions),
defaultModel,
});
return {
provider: provider ? adaptMemoryEmbeddingProvider(provider) : null,
runtime: {
id: "deepinfra",
cacheKeyData: {
provider: "deepinfra",
model: client.model,
},
},
};
},
};
}
export const deepinfraEmbeddingProviderAdapter: EmbeddingProviderAdapter =
buildDeepInfraEmbeddingAdapter();