mirror of
https://github.com/openclaw/openclaw.git
synced 2026-08-02 12:21:36 +00:00
* fix(deepinfra): migrate embedding provider registration * fix(deepinfra): preserve embedding index identity
86 lines
2.8 KiB
TypeScript
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();
|